版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,第5章循环结构程序设计,学习要点:while语句do-while语句for语句continue语句和break语句循环语句的嵌套,5.1while语句,while语句的一般形式为:while(表达式)语句;执行过程:当表达式的结果为非0时,执行while语句中的内嵌语句。,图5-1while语句的流程图,例5.1求,#includevoidmain()inti=1,sum=0;while(i=100)sum=sum+i;i+;printf(“%dn”,sum);,图5-2算法流程图,使用while语句时注意:,1)while语句中的”表达式”(即判断条件)可以是任意的表达式,但一般为关系表达
2、式或逻辑表达式。2)循环体如果包含一个以上的语句,应该用括起来,以复合语句形式出现。3)在循环体中应有使循环趋向于结束的语句,以免形成死循环。voidmain()inta,n=0;while(a=5)printf(“%d”,n+);本例中while语句的循环条件为赋值表达式a=5,因此该表达式的值永远为真,而循环体中又没有其它终止循环的手段,因此该循环将无休止地进行下去,形成死循环。4)允许循环体以空语句形式出现。5)允许while语句的循环体又是while语句,从而形成双重循环。,5.2do-while语句,do-while语句的一般形式为:do语句while(表达式);执行过程:先执行一次
3、指定的循环体语句,然后判别表达式,当表达式的值为非0(真)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。,图5-3do-while语句的流程图,例5.2求,#includevoidmain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(“%dn”,sum);,#includevoidmain()intcount,number;count=0;printf(“Enteranumber:);scanf(%d,Enteranumber:12534Itcontains5digits.,Enteranumber:-9
4、9Itcontains2digits.,Enteranumber:0Itcontains1digits.,while(number!=0)number=number/10;count+;,while语句和do-while语句的比较:,例5.3统计一个整数的位数。,1)在if语句和while语句中,表达式后面一般不加分号,而在do-while语句的表达式后面则必须加分号。2)do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。3)当do和while之间的循环体由多个语句组成时,也必须用括起来组成一个复合语句。4)do-while和while语句相互替换时,要注意修改循环控
5、制条件。,使用do-while语句时注意:,5.3for语句,for语句的一般形式:for(表达式1;表达式2;表达式3)语句;,说明:1)表达式1:通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。2)表达式2:通常是循环条件,一般为关系表达式或逻辑表达式。3)表达式3:通常可用来修改循环变量的值,一般是赋值语句。4)语句:循环体语句。其中,表达式1、表达式2及表达式3这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略,但”;”不可省略。,for语句的执行过程:,(1)先求解表达式1。(2)
6、求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句。,图5-4for语句的流程图,例5.4求。(改例5.1),#includevoidmain()inti,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(“%dn”,sum);,#includevoidmain()inti=1,sum=0;while(i=100)sum=sum+i;i+;printf(“%dn”,sum);
7、,while语句和for语句,while(条件)循环体语句;,循环条件,循环体,一条语句,while语句和for语句都是在循环前先判断条件,for语句等价于下列语句:表达式1;while(表达式2)for的循环体语句;表达式3;,把for语句改写成while语句for(表达式1;表达式2;表达式3)循环体语句,while和for的比较,for(i=1;i=100;i+)sum=sum+i;,i=1;循环变量赋初值while(i=100)循环条件sum=sum+i;i+;循环变量的改变,循环体,用for语句简单、方便。,5.4几种循环语句的比较,1)三种循环都可以用来处理同一问题,一般情况下它们
8、可以互相代替。2)用while和dowhile循环时,循环变量初始化的操作在while和dowhile语句前完成;for语句可以在表达式1中完成循环变量的初始化。3)while和dowhile循环只在while后面指定循环条件,且在循环体中应包含使循环趋于结束的语句;for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。4)while和for循环是先判断表达式,后执行循环体语句,而dowhile循环是先执行循环体语句后判断表达式,也即是dowhile的循环体至少被执行一次,而w
9、hile循环和for循环可能一次都不执行。,例5.5分别用while、do-while、for语句构成的循环求n!。,#includevoidmain()inti=1,item=1,n;scanf(“%d”,doitem=item*i;i+;while(i=n);,for(i=1;i=n;i+)item=item*i;,5.5continue语句和break语句,5.5.1continue语句continue语句的一般形式为:continue;功能:结束本次循环(跳过循环体中尚未执行的语句),接着进行是否执行下一次循环的判定。,例5.6输出100200之间的不能被3整除的数。,#include
10、voidmain()intn;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d”,n);printf(“n”);,换成什么,可不改变结果?,5.5.2break语句,break语句的一般形式为:break;说明:break语句一般用于switch语句和循环语句。功能:用在switch语句中使流程跳出switch结构,继续执行switch语句后面的语句。用在循环体内,迫使所在循环立即终止(跳出当前循环体),继续执行循环体后面的第一条语句。,例5.7判断某个数m是否为素数。,1.程序分析:除了1和自身,不能被其它数整除的数是素数。算法:判断一个数是否为
11、素数,需要检查该数是否能被1和自身以外的其他数整除,即判断m能否被2m-1之间的整数整除。设i取值2,m-1,如果m不能被该区间上的任何一个数整除,即对每个i,m%i都不为0,则m是素数;但是只要找到一个i,使m%i为0,则m肯定不是素数。,由于m不可能被大于m/2的数整除,所以上述i的取值区间可以缩小为2,m/2,数学上能证明,该区间还可以是2,。,2.程序源代码:,#include#includevoidmain()intm,i,k;scanf(“%d”,例5.8改写例5.6,将continue语句改为break语句。,#includevoidmain()intn;for(n=100;n=
12、200;n+)if(n%3=0)continue;printf(“%d”,n);printf(“n”);,break;,continue和break的区别:continue只结束本次循环,而非终止整个循环。break则是结束所在循环,不再进行条件判断。,5.6循环语句的嵌套,一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。while循环、dowhile循环和for循环都可以进行嵌套,而且可以相互嵌套。,例5.9求,1.程序分析:这是一个求累加和的问题,共循环100次,每次累加一项,循环算式是:sum=sum+第i项其中,第i项就是i的阶乘。阶乘
13、的求解在5.4节中已经学习。所以,在求累加和的循环中再用一个小循环求出第i项的阶乘。求累加和的for语句为:for(i=1;i=100;i+)item=i!sum=sum+item;i!的求解又由for循环完成,因此上述for语句进一步写为:for(i=1;i=100;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,2.程序源代码,#includevoidmain()inti,j;doubleitem,sum;/*item存放阶乘*/sum=0;for(i=1;i=100;i+)item=1;/*每次求阶乘都从1开始*/for(j=1;j=
14、i;j+)/*内层循环算出item=i!*/item=item*j;sum=sum+item;printf(“1!+2!+3!+100!=%en”,sum);,内层循环的初始化,for(i=1;i=100;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,item=1;for(i=1;i=100;i+)for(j=1;j=i;j+)item=item*j;sum=sum+item;,求1!+1!*2!+1!*2!*100!,分析嵌套循环的执行过程,for(i=1;i=100;i+)item=1;for(j=1;j=i;j+)item=item
15、*j;sum=sum+item;,外层循环变量i的每个值内层循环变量j变化一个轮次;内外层循环变量不能相同分别用i和j,for(i=1;i=100;i+)for(j=1;j=i;j+)printf(%d%dn,i,j);,例5.10输出九九乘法表。,1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:#includevoidmain()inti,j,result;printf(“n”);for(i=1;i=3时,fib(n)总可以由fib(n-1)和fib(n-2)得到,由旧值递推出新值,这是一个典型的迭代关系,所以我们可以考虑迭代算法。,2.程序源代码:,#includevoidmain(void)inti,f1,f2,f;/*f1、f2及f为迭代变量,f1和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年环保智能油烟处理系统创新报告
- 2026年预制菜行业冷链物流成本控制创新报告
- 2026年环保设施维修合同三篇
- 制冷机组冷凝器水垢处理指南
- 肾上腺髓质素在卵巢癌中的表达及其对ERK活性的影响研究
- 肺腺癌吉非替尼治疗疗效预测的分子生物学解码与临床应用
- 肺癌早期miRNA生物标志物组合的计算识别与临床价值探究
- 护理心理教育的学生心理健康教育
- VR主题公园运营合同协议2026年
- 肥城市食管鳞癌衍变阶段:危险因素剖析与生物标志物探寻
- DB11T 3032-2022 水利工程建设质量检测管理规范
- 媒体创意经济:玩转互联网时代学习通超星期末考试答案章节答案2024年
- 工程造价咨询服务投标方案(技术方案)
- GB/T 44299-2024探测器探测范围的测量方法和声明用于大和小运动探测的被动式红外探测器
- 《交通监控系统》课件
- 27.2.2相似三角形的性质教学设计人教版九年级数学下册
- GSTGM9000图形显示装置软件用户手册
- 明管结构计算书(Excel)
- 2023年同等学力申硕经济学综合历年真题及答案
- 《社会工作实务》初级社会工作师
- 环境规划学课后习题答案
评论
0/150
提交评论