,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,-,#,-,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,04,章控制程序流程,第04章控制程序流程,-,2,-,本章内容安排,while,循环,dowhile,循环,for,循环,高级循环,switch,-2-本章内容安排while循环,-,3,-,循环的概念,计算机擅长的工作之一是重复做相同的事情。,许多编程任务可以通过重复相同的操作来完成,通过指定次数或设定条件来控制执行过程。多次重复执行的结构称为,循环,,每一次循环称为,迭代,。,while,、,dowhile,、,for,-3-循环的概念计算机擅长的工作之一是重复做相同的事情。,-,4,-,while,循环,在指定条件为,true,的情况下,程序重复执行,直到指定条件变为,false,。,条件放在,while,之后的()内,循环执行的语句放在一对内。,表达式,F,循环体语句,T,while(,表达式,),循环体语句,;,-4-while循环在指定条件为true的情况下,程序重复执,-,5,-,显示,099,#include,using namespace std;,int main(),int x=0;,while(,x100,),cout x ;,x+;,return 0;,假如循环语句中没有,x+,,则,while,循环,的条件永远为真,导致循环一直执行,,称为无限循环或死循环。,-5-显示099#include 假如,-,6,-,显示,099,,每行,5,个,#include,using namespace std;,int main(),int x=0;,while(x100),cout x ;,x+;,if(x%5=0)coutendl;,return 0;,递增,x,,每当,x,是,5,的倍数时,输出回车。,-6-显示099,每行5个#include iostre,-,7,-,显示前,20,个整除,14,的正整数,#include,using namespace std;,int main(),int x=0,count=0;,while(,true,),x+;,if(x%14=0),coutx19),break;,return 0;,循环中让,while,的条件为,true,,构,造,1,个无限循环。,在循环体内,调用,break,语句,可,立即停止循环的执行。,使用,while(true),结构时,要确,保循环能够停止。,-7-显示前20个整除14的正整数#include ios,-,8,-,显示前,20,个整除,14,的正整数,#include,using namespace std;,int main(),int x=0,count=0;,while(count19),x+;,if(x%15!=0),continue;,coutx;,count+;,return 0;,在循环中遇到,continue,语句,将,跳过余下的语句,执行下一次,迭代。,break,结束当前循环,而,continue,结束本次迭代。,-8-显示前20个整除14的正整数#include ios,-,9,-,显示前,20,个整除,14,的正整数,#include,using namespace std;,int main(),int x=0,count=0;,while(count19),x+=14;,coutx;,count+;,return 0;,14,倍数,从,14,开始,依次递增,14,。,-9-显示前20个整除14的正整数#include ios,-,10,-,本章内容安排,while,循环,dowhile,循环,for,循环,高级循环,switch,-10-本章内容安排while循环,-,11,-,dowhile,循环,while,在执行循环前检查条件,如果此时条件为,false,,则一次循环也不执行。,dowhile,在循环之后检查条件,条件为,true,,继续循环,条件为,false,结束循环。,do,循环体语句,;,while(,表达式,),;,表达式,F,循环体语句,T,-11-dowhile循环while在执行循环前检查条件,,-,12,-,重复显示单词指定次数,#include,using namespace std;,int main(),int badger;,coutbadger;,do,cout0),;,coutn;,return 0;,不要遗漏语句最后的;号。,无论条件如何设置,,do,while,循,至少执行,1,次。,break,和,continue,仍然有效。,-12-重复显示单词指定次数#include iostre,-,13,-,本章内容安排,while,循环,dowhile,循环,for,循环,高级循环,switch,-13-本章内容安排while循环,-,14,-,for,循环,for,循环将设置计数变量初值、检查条件、修改计数变量合并到,1,条语句中。,for(,表达式,1,;,表达式,2,;,表达式,3),循环体;,表达式,2,F,表达式,3,表达式,1,循环体语句,T,-14-for循环for循环将设置计数变量初值、检查条件、修,计算,1100,的和,#include,using namespace std;,int main(),int i,sum=0;,for(i=1;i=100;i+),sum+=i;,cout“Sum:“sum“n”;,return 0;,表达式,1,:完成计数变量初始化。,表达式,2,:检查条件,确定是否,继续执行循环。,表达式,3,:修改计数变量的值。,3,个表达式之间用分号分割。,-,15,-,计算1100的和#include 表达,-,16,-,本章内容安排,while,循环,dowhile,循环,for,循环,高级循环,switch,-16-本章内容安排while循环,1,、,for,的变化形式,1,#include,using namespace std;,int main(),int i,sum;,for(,i=1,sum=0;,i=100;i+),sum=sum+i;,cout“Sum:“sum“n”;,return 0;,初始化多个变量时,用逗号进行,分割。,仍然是,3,大部分,用;分割,-,17,-,1、for的变化形式1#include,for,的变化形式,2,#include,using namespace std;,int main(),int,i=1,sum=0,;,for(,;,i=100;i+),sum=sum+i;,cout“Sum:“sum“n”;,return 0;,3,个表达式中的任意,1,个可以为空,,但对应的分号不能省略。,-,18,-,for的变化形式2#include 3个,for,的变化形式,3,#include,using namespace std;,int main(),int,i=1,sum=0,;,for(,;,i=100,;,),sum=sum+i;,i+;,cout“Sum:“sum=100),break;,i+;,cout“Sum:“sum“n”;,return 0;,将,3,个表达式全部移出,退化为,while(true),结构。,-,20,-,for的变化形式4#include 将3,for,的变化形式,5,#include,using namespace std;,int main(),int,i=1,sum=0,;,for(i=1;i=100;,sum=sum+i,i+,),;,cout“Sum:“sum“n”;,return 0;,将循环体内的语句转移到某个表达式,中,不提倡这种用法。,第,3,部分为逗号表达式,顺序执行,-,21,-,for的变化形式5#include 将循,2,、循环的典型问题,#include,using namespace std;,int main(),int i,sum=0;,for(i=1;i=100;i+),;,sum+=i;,cout“Sum:“sum“n”;,return 0;,此时的,for,循环,执行了,100,次空,语句(;)。,真正的循环体,sum+=i,没有执行。,-,22,-,2、循环的典型问题#include 此时,循环的典型错误,#include,using namespace std;,int main(),int,i=1,sum=0,;,for(;i=100;),sum=sum+i;,i+;,cout“Sum:“sum“n”;,return 0;,循环执行,sum=sum+i,,而不会执行,i+,,导致死循环。,养成将循环语句放在,内作为复,语句的良好习惯,不管是否只有,1,条语句。,-,23,-,循环的典型错误#include 循环执行,循环的典型错误,#include,using namespace std;,int main(),int i=1,sum=0;,while(i=100),;,sum+=i;,i+;,cout“Sum:“sum“n”;,return 0;,while,循环后面不能加分号,否则,while,一直执行空语句,导致,i,无,法递增,死循环。,-,24,-,循环的典型错误#include whil,循环的典型错误,#include,using namespace std;,int main(),int i=1,sum=0;,do,sum+=i;,i+;,while(i=100),cout“Sum:“sum“n”;,return 0;,dowhile,循环的结束必须有;,否则无法通过编译。,-,25,-,循环的典型错误#include dow,-,26,-,3,、循环的嵌套,在循环体内,可以包含另一个循环,从而构成循环的嵌套。,外部循环每次迭代时,内部循环都将完整循环,1,次,-26-3、循环的嵌套在循环体内,可以包含另一个循环,从而构,输出字符矩形,#include,using namespace std;,int main(),int rows,columns;,char character;,coutrows;,coutcolumns;,coutcharacter;,coutn;,-,27,-,输出字符矩形#include-27-,输出字符矩形,#include,using namespace std;,int main(),for(int i=0;irows;i+),for(int j=0;jcolumns;j+),coutcharacter;,coutn;,return 0;,-,28,-,输出字符矩形#include-28-,马克思手稿中的数学问题,共有,30,个人,其中有男人、女人和小孩,他们在一家饭馆吃饭共花费了,50,先令,其中每个男人花费,3,先令,每个女人花费,2,先令,每个小孩各花,1,先令,问,30,个人中男人、女人和小孩各几人?,设男人、女人和小孩的人数各为,x,、,y,、,z,,则通过题意可以列出下面的方程。,x+y+z=30,3x+2y+z=50,-,29,-,马克思手稿中的数学问题共有30个人,其中有男人、女人和小孩,,穷举法,通过两个方程解,3,个未知数,这是一个不定方程,应该有多组解,用代数方法很难求解。,利用计算机编写程序,通过“,穷举法,”可以,列举出所有可能的解,。所谓“穷举法”,就是让计算机根据所有可能的情况,逐一去验证,从而找出所有满足要求的“解”。,由于总人数为,30,人,所以,x,、,y,和,z,的取值范围一定为,030,并且为整数,,在编程时,我们可以让,x,、,y,和,z,都从,0,循环到,30,,然后验证看哪个组合能满足方程式。,-,30,-,穷举法通过两个方程解3个未知数,这是一个不定方程,应该有多组,三重循环求解,int main(),int