第04章控制程序流程.ppt_第1页
第04章控制程序流程.ppt_第2页
第04章控制程序流程.ppt_第3页
第04章控制程序流程.ppt_第4页
第04章控制程序流程.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第04章控制程序流程,本章内容安排,while循环 dowhile循环 for循环 高级循环 switch,循环的概念,计算机擅长的工作之一是重复做相同的事情。 许多编程任务可以通过重复相同的操作来完成,通过指定次数或设定条件来控制执行过程。多次重复执行的结构称为循环,每一次循环称为迭代。 while、dowhile、for,while循环,在指定条件为true的情况下,程序重复执行,直到指定条件变为false。 条件放在while之后的()内,循环执行的语句放在一对内。,while(表达式) 循环体语句; ,显示099,#include using namespace std; int ma

2、in() int x=0; while( x100 ) cout x ; x+; return 0; ,假如循环语句中没有x+,则while循环 的条件永远为真,导致循环一直执行, 称为无限循环或死循环。,显示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的倍数时,输出回车。,显示前20个整除14的正整数,#include using namespace std; int main() in

3、t x=0, count=0; while( true ) x+; if(x%14=0) cout19) break; return 0; ,循环中让while的条件为true,构 造1个无限循环。 在循环体内,调用break语句,可 立即停止循环的执行。 使用while( true )结构时,要确 保循环能够停止。,显示前20个整除14的正整数,#include using namespace std; int main() int x=0, count=0; while( count19 ) x+; if(x%15!=0) continue; coutx ; count+; return

4、0; ,在循环中遇到continue语句,将 跳过余下的语句,执行下一次 迭代。 break结束当前循环,而continue 结束本次迭代。,显示前20个整除14的正整数,#include using namespace std; int main() int x=0, count=0; while( count19 ) x+=14; coutx ; count+; return 0; ,14倍数,从14开始,依次递增14。,本章内容安排,while循环 dowhile循环 for循环 高级循环 switch,dowhile循环,while在执行循环前检查条件,如果此时条件为false,则一次

5、循环也不执行。 dowhile在循环之后检查条件,条件为true,继续循环,条件为false结束循环。,do 循环体语句; while(表达式);,重复显示单词指定次数,#include using namespace std; int main() int badger; coutbadger; do cout0); coutn; return 0; ,不要遗漏语句最后的;号。 无论条件如何设置,dowhile循 至少执行1次。 break和continue仍然有效。,本章内容安排,while循环 dowhile循环 for循环 高级循环 switch,for循环,for循环将设置计数变量初

6、值、检查条件、修改计数变量合并到1条语句中。,for(表达式1; 表达式2;表达式3) 循环体; ,计算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个表达式之间用分号分割。,本章内容安排,while循环 dowhile循环 for循环 高级循环 switch,1、for的变化形式1,#include

7、 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大部分,用;分割,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个可以为空, 但对应的分号不能省略。,

8、for的变化形式3,#include using namespace std; int main() int i=1,sum=0; for( ; i=100; ) sum=sum+i; i+; cout“Sum: “sum“n”; return 0; ,将表达式3转移到循环体内部,已 经退化为while循环。,for的变化形式4,#include using namespace std; int main() int i=1,sum=0; for( ; ; ) sum = sum+i; if( i=100 ) break; i+; cout“Sum: “sum“n”; return 0; ,将

9、3个表达式全部移出,退化为 while(true)结构。,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部分为逗号表达式,顺序执行,2、循环的典型问题,#include using namespace std; int main() int i,sum=0; for( i=1; i=100; i+ ) ; sum+=i;

10、 cout“Sum: “sum“n”; return 0; ,此时的for循环,执行了100次空 语句(;)。 真正的循环体sum+=i没有执行。,循环的典型错误,#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条语句。,循环的典型错误,#include using namespace st

11、d; int main() int i=1,sum=0; while(i=100) ; sum+=i; i+; cout“Sum: “sum“n”; return 0; ,while循环后面不能加分号,否则 while一直执行空语句,导致i无 法递增,死循环。,循环的典型错误,#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循环的结束必须有; 否则无法通过编译。,3、循环的嵌套,在循环体内,可以包含另一

12、个循环,从而构成循环的嵌套。 外部循环每次迭代时,内部循环都将完整循环1次,输出字符矩形,#include using namespace std; int main() int rows,columns; char character; coutrows; coutcolumns; coutcharacter; coutn; ,输出字符矩形,#include using namespace std; int main() for( int i=0; irows; i+ ) for( int j=0; jcolumns; j+) coutcharacter; coutn; return 0;

13、,马克思手稿中的数学问题,共有30个人,其中有男人、女人和小孩,他们在一家饭馆吃饭共花费了50先令,其中每个男人花费3先令,每个女人花费2先令,每个小孩各花1先令,问30个人中男人、女人和小孩各几人? 设男人、女人和小孩的人数各为x、y、z,则通过题意可以列出下面的方程。 x+y+z=30 3x+2y+z=50,穷举法,通过两个方程解3个未知数,这是一个不定方程,应该有多组解,用代数方法很难求解。 利用计算机编写程序,通过“穷举法”可以列举出所有可能的解。所谓“穷举法”,就是让计算机根据所有可能的情况,逐一去验证,从而找出所有满足要求的“解” 。 由于总人数为30人,所以x、y和z的取值范围一

14、定为030并且为整数,在编程时,我们可以让x、y和z都从0循环到30,然后验证看哪个组合能满足方程式。,三重循环求解,int main() int x,y,z; coutMan t Women t Childrenn“; for(x=0;x=30;x+) for(y=0;y=30;y+) for(z=0;z=30;z+) if(x+y+z=30 ,“t”表示制表符。 分析:循环体执行313131,循环时x、y 确定后,z就会确定,不需要再循环。此外, 每种人的循环范围不一定都是30。,缩小穷举范围,int main() int x,y,z; coutMan t Women t Children

15、n“; for(x=0;x=16;x+) for(y=0;y=25;y+) for(z=0;z=30;z+) if(x+y+z=30 ,2重循环,int main() int x,y,z; coutMan t Women t Childrenn“; 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”; return 0; ,某一次循环迭代中,x和y确定后,z便可以 计算得出,减少了循环的次数。,1重循环的尝试,采用消元法,消去变量z,得到新的方程式 2x+y=20 对于这一方程式,我们

16、可以采用一重循环来穷举x的所有可能,即x从0变到16,但只要x确定下来,y便可以通过方程式来确定,x和y确定下来,则z可以由x+y+z=30确定。,1重循环(小Bug),int main() int x,y,z; coutMan t Women t Childrenn“; for(x=0; x=16; x+) y = 20 - 2*x; z = 30 - x - y; if( 3*x+2*y+z=50) coutx“t”y“t”z“n”; return 0; ,1重循环,int main() int x,y,z; coutMan t Women t Childrenn“; for(x=0; x

17、=16; x+) y = 20 - 2*x; z = 30 - x - y; if(y0 | z0) continue; if( 3*x+2*y+z=50) coutx“t”y“t”z“n”; return 0; ,本章内容安排,while循环 dowhile循环 for循环 高级循环 switch,switch的动机,对同一个变量,若存在多个分支判断情况,使用嵌套的if语句,将导致代码非常烦琐混乱,不易理解且难以维护。 switch语句,检查表达式,根据结果匹配执行多个代码块中的1个。,switch的基本结构,switch(表达式) case 常量1: 语句1; break; case 常量

18、2: 语句2; break; case 常量n: 语句n; break; default: 语句n+1; ,switch的表达式必须是一个整数值。 case分支后必须为常量,不能是变 量或者表达式,分支间不允许重复。 switch语句执行时,若匹配到某个 case,执行后面的语句;若没有匹 配的case,执行default部分。,通常每个case分支,都应该有break 语句,用于退出switch。若某个 case没有break,当前分支执行完 后,继续下一个case分支。 良好编程习惯:保留default,处理 特殊情况。,等级分转百分制,#include int main() char grade; int score; coutgrade; return 0; ,等级分转百分制,switch( grade ) case A: score = 95; break; case B: score = 85; break; case C: score = 75; break; case D: score =65; break; defau

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论