您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第04章控制程序流程
第04章控制程序流程-2-本章内容安排while循环do~while循环for循环高级循环switch-3-循环的概念计算机擅长的工作之一是重复做相同的事情。许多编程任务可以通过重复相同的操作来完成,通过指定次数或设定条件来控制执行过程。多次重复执行的结构称为循环,每一次循环称为迭代。while、do~while、for-4-while循环在指定条件为true的情况下,程序重复执行,直到指定条件变为false。条件放在while之后的()内,循环执行的语句放在一对{}内。表达式F循环体语句Twhile(表达式){循环体语句;}-5-显示0~99#includeiostreamusingnamespacestd;intmain(){intx=0;while(x100){coutx;x++;}return0;}假如循环语句中没有x++,则while循环的条件永远为真,导致循环一直执行,称为无限循环或死循环。-6-显示0~99,每行5个#includeiostreamusingnamespacestd;intmain(){intx=0;while(x100){coutx;x++;if(x%5==0)coutendl;}return0;}递增x,每当x是5的倍数时,输出回车。-7-显示前20个整除14的正整数#includeiostreamusingnamespacestd;intmain(){intx=0,count=0;while(true){x++;if(x%14==0){coutx;count++;}if(count19)break;}return0;}循环中让while的条件为true,构造1个无限循环。在循环体内,调用break语句,可立即停止循环的执行。使用while(true)结构时,要确保循环能够停止。-8-显示前20个整除14的正整数#includeiostreamusingnamespacestd;intmain(){intx=0,count=0;while(count19){x++;if(x%15!=0){continue;}coutx;count++;}return0;}在循环中遇到continue语句,将跳过余下的语句,执行下一次迭代。break结束当前循环,而continue结束本次迭代。-9-显示前20个整除14的正整数#includeiostreamusingnamespacestd;intmain(){intx=0,count=0;while(count19){x+=14;coutx;count++;}return0;}14倍数,从14开始,依次递增14。-10-本章内容安排while循环do~while循环for循环高级循环switch-11-do~while循环while在执行循环前检查条件,如果此时条件为false,则一次循环也不执行。do~while在循环之后检查条件,条件为true,继续循环,条件为false结束循环。do{循环体语句;}while(表达式);表达式F循环体语句T-12-重复显示单词指定次数#includeiostreamusingnamespacestd;intmain(){intbadger;coutHowmanybadgers?;cinbadger;do{coutBadger;badger--;}while(badger0);cout\n;return0;}不要遗漏语句最后的;号。无论条件如何设置,do~while循至少执行1次。break和continue仍然有效。-13-本章内容安排while循环do~while循环for循环高级循环switch-14-for循环for循环将设置计数变量初值、检查条件、修改计数变量合并到1条语句中。for(表达式1;表达式2;表达式3){循环体;}表达式2F表达式3表达式1循环体语句T计算1~100的和#includeiostreamusingnamespacestd;intmain(){inti,sum=0;for(i=1;i=100;i++){sum+=i;}cout“Sum:“sum“\n”;return0;}表达式1:完成计数变量初始化。表达式2:检查条件,确定是否继续执行循环。表达式3:修改计数变量的值。3个表达式之间用分号分割。-15--16-本章内容安排while循环do~while循环for循环高级循环switch1、for的变化形式1#includeiostreamusingnamespacestd;intmain(){inti,sum;for(i=1,sum=0;i=100;i++){sum=sum+i;}cout“Sum:“sum“\n”;return0;}初始化多个变量时,用逗号进行分割。仍然是3大部分,用;分割-17-for的变化形式2#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;for(;i=100;i++){sum=sum+i;}cout“Sum:“sum“\n”;return0;}3个表达式中的任意1个可以为空,但对应的分号不能省略。-18-for的变化形式3#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;for(;i=100;){sum=sum+i;i++;}cout“Sum:“sum“\n”;return0;}将表达式3转移到循环体内部,已经退化为while循环。-19-for的变化形式4#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;for(;;){sum=sum+i;if(i=100)break;i++;}cout“Sum:“sum“\n”;return0;}将3个表达式全部移出,退化为while(true)结构。-20-for的变化形式5#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;for(i=1;i=100;sum=sum+i,i++){;}cout“Sum:“sum“\n”;return0;}将循环体内的语句转移到某个表达式中,不提倡这种用法。第3部分为逗号表达式,顺序执行-21-2、循环的典型问题#includeiostreamusingnamespacestd;intmain(){inti,sum=0;for(i=1;i=100;i++);{sum+=i;}cout“Sum:“sum“\n”;return0;}此时的for循环,执行了100次空语句(;)。真正的循环体sum+=i没有执行。-22-循环的典型错误#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;for(;i=100;)sum=sum+i;i++;cout“Sum:“sum“\n”;return0;}循环执行sum=sum+i,而不会执行i++,导致死循环。养成将循环语句放在{}内作为复语句的良好习惯,不管是否只有1条语句。-23-循环的典型错误#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;while(i=100);{sum+=i;i++;}cout“Sum:“sum“\n”;return0;}while循环后面不能加分号,否则while一直执行空语句,导致i无法递增,死循环。-24-循环的典型错误#includeiostreamusingnamespacestd;intmain(){inti=1,sum=0;do{sum+=i;i++;}while(i=100)cout“Sum:“sum“\n”;return0;}do~while循环的结束必须有;否则无法通过编译。-25--26-3、循环的嵌套在循环体内,可以包含另一个循环,从而构成循环的嵌套。外部循环每次迭代时,内部循环都将完整循环1次输出字符矩形#includeiostreamusingnamespacestd;intmain(){introws,columns;charcharacter;coutHowmanyrows?;cinrows;coutHowmanycolumns?;cincolumns;coutWhatcharactertodisplay?;cincharacter;cout\n;…}-27-输出字符矩形#includeiostreamusingnamespacestd;intmain(){…for(inti=0;irows;i++){for(intj=0;jcolumns;j++){coutcharacter;}cout\n;}return0;}-28-马克思手稿中的数学问题共有30个人,其中有男人、女人和小孩,他们在一家饭馆吃饭共花费了50先令,其中每个男人花费3先令,每个女人花费2先令,每个小孩各花1先令,问30个人中男人、女人和小孩各几人?设男人、女人和小孩的人数各为x、y、z,则通过题意可以列出下面的方程。x+y+z=303x+2y+z=50-29-穷举法通过两个方程解3个未知数,这是一个不定方程,应该有多组解,用代数方法很难求解。利用计算机编写程序,通过“穷举法”可以列举出所有可能的解。所谓“穷举法”,就是让计算机根据所有可能的情况,逐一去验证,从而找出所有满足要求的“解”。由于总人数为30人,所以x、y和z的取值范围一定为0~30并且为整数,在编程时,我们可以让x、y和z都从0循环到30,然后验证看哪个组合能满足方程式。-30-三重循环求解intmain(){intx,y,z;coutMan\tWomen\tChildren\n“;for(x=0;x=30;x++)for(y=0;y=30;y++)for(z=0;z=30;z++){if(x+y+z==30&&3*x+2*y+z==50)coutx“\t”y“\t”z“\n”;}return0;}“\t”表示制表符。分析:循环体执行31×31×31,循环时x、y确定后,z就会确定,不需要再循环。此外,每种人的循环范围不一定都是30。-31-缩小穷举范围intmain(){intx,y,z;coutMan\tWomen\tChildren\n“;for(x=0;x=16;x++)for(y=0;y=25;y++)for(z=0;z=30;z++){if(x+y+z==30&&3*x+2*y+z==50)coutx“\t”y“\t”z“\n”;}return0;}-32-2重循环intmain(){intx,y,z;coutMan\tWomen\tChildren\n“;for(x=0;x=16;x++)for(y=0;y=25;y++){z=30–x–y;if(3*x+2*y+z==50)coutx“\t”y“\t”z“\n”;}return0;}某一次循环迭代中,x和y确定后,z便可以计算得出,减少了循环的次数。-33-1重循环的尝试采用消元法,消去变量z,得到新的方程式2x+y=20对于这一方程式,我们可以采用一重循环来穷举x的所有可能,即x从0变到16,但只要x确定下来,y便可以通过方程式来确定,x和y确定下来,则z可以
本文标题:第04章控制程序流程
链接地址:https://www.777doc.com/doc-654891 .html