版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 循环结构程序设计,主要内容,5.1 概述 5.2 while语句 5.3 do-while 5.4 for 语句 5.5 break语句和continue语句 5.6 循环的嵌套 5.7 程序举例,所谓循环控制,就是如何实现循环结构的控制问题。有3种方法: 用while语句 用do-while语句 用for语句,5.1 概述,while语句是专门用于实现循环控制的语句之一。 其一般形式为: while (表达式) 语句 含义:当表达式的值为非0时,执行循环体语句,否则执行后续语句。,表达循环条件的表达式,循环体语句,语句关键字,5.2 while语句,执行过程是先判断后执行: whil
2、e (表达式) 语句,表达式,循环体语句,0,非0(成立),5.2 while语句,例:用while语句实现计算s=1+2+3+4+5的部分算法: #include int main() int i=1,s=0; while(i=5) s=s+i; printf(“n %d”,s);return 0; ,注意与if语句的区别。 循环体中要有使循环条件趋于成立的条件。,5.2 while语句,s,i,0,1,1,2,3,3,6,4,10,5,15,6,i+;,do-while语句主要用于实现直到型循环。 其一般形式为: do 循环体语句 while(表达式) 执行过程是先执行后判断:,非0(真)
3、,0(假),表达式,循环体语句,;,5.3 do-while语句,例:用do-while语句实现计算s=1+2+3+4+5的部分算法: #include int main() int i=1,s=0; do s+=i+; while(i=5); printf(“n%d”,s);return 0; ,5.3 do-while语句,s=s+i; i+;,s,i,1,0,1,2,3,3,6,4,10,5,15,6,例:while 和do-while循环语句的比较:,5.3 do-while语句,#include int main() int i,s=0; scanf(“%d”, ,#include
4、int main() int i,s=0; scanf(“%d”, ,当输入i的值小于或等于5时,二者得到结果如何? 当输入i的值大于5时,二者得到结果又如何?,for语句是一种使用最为灵活, 并且是用得最多的循环控制语句, 其一般形式为: for(表达式1;表达式2;表达式3) 循环体语句 大体含义: 对于()的情况执行循环体内容。,假,表达式2,求解表达式1,循环体语句,求解表达式3,真,5.4 for语句,例:用for语句实现计算s=1+2+3+4+5: s=0; for(i=1;i=5;i+) s+=i; 标准形式,表达式1,表达式2,表达式3,循环体语句,可以理解为: 循环变量i从初
5、值1开始到终值5结束,步长为1,重复执行循环体5次。,5.4 for语句,s,i,0,1,1,2,3,3,6,4,10,5,15,6,for语句的常见变化: s=0; i=1; for(;i=5;i+)s+=i;,省略表达式1,省略表达式3,省略表达式1和3,5.4 for语句,s=0;for(i=1;i=5;)s+=i+;,s=0;i=1;for(;i=5;)s+=i+;,s=0; i=1; for(;) s+=i+; if(i5) break; ,省略表达式1,2,3,表达式2是任意表达式,5.4 for语句,s=5;i=5; for(;-i;) s+=i;,s=0; for(i=1,j=
6、5;ij;i+,j-) s+=i+j; if(i=j)s=s+i;,用逗号表达式,5.4 for语句,在程序设计中不要过分追求for语句的多变性。,i,j,5,1,s,0,6,2,4,12,3,3,15,#include int main() int i,n; float s=1; scanf(“%d”, 注意s的初值。 注意当n较大时的情况。 求和与连乘都是最常用的算法,要熟练掌握。,例:求n! ,n!=1*2*3(n-1)*n。,5.4 for语句,#include int main() int i,s=0; printf(“n %d”,s); return 0; ,for(i=1;i=1
7、00;i+) s+=i;,for(i=1;i=100;i+) if(i%3=0)s+=i;,for(i=3;i=100;i+=3) s+=i;,for(i=3;i=100;i+=3) if (i%7!=0)s+=i;,例:求自然数1-100中能被3整除的数之和。,i的作用? 求能被3整除但不被7整除的数之和?,5.4 for语句,#include int main() int i,a,max; scanf(“%d”, ,例:求任意100个整数中的最大值。,循环体中没有引用循环变量。i的作用?,5.4 for语句,break语句,一般形式:break; 只能用于switch和循环语句中。,例:
8、switch(int)score/10) case 10: case 9: printf(“A”);break; case 8: printf(“B”);break; case 7: printf(“C”);break; case 6: printf(“D”);break; default: printf(“E”); ,跳出switch语句,5.5 break语句与continue语句,例: include int main( ) int sum=0,i; for(i=1;i5) break; sum=sum+i; printf(“%d”,sum); return 0; ,include in
9、t main( ) int sum=0, i, j; for(i=1;i5) break; sum=sum+i+j; printf(“%d”,sum); return 0; ,跳出本层循环,5.5break语句与continue语句,i,sum,0,1,1,2,3,3,6,j,5,1,1,2,2,0,3,9,2,3,10,一般形式:continue; 只能用循环语句中。,include int main( ) int sum=0,i; for(i=1;i5) continue; sum=sum+i; printf(“%d”,sum); return 0; ,include int main(
10、) int sum=0, i, j; for(i=1;i5) continue; sum=sum+i+j; printf(“%d”,sum); return 0; ,continue语句,5.5 break语句与continue语句,跳出本次循环,i,sum,0,1,1,2,3,3,6,4,5,10,j,0,1,1,2,2,5,3,9,4,5,10,2,1,2,3,10,3,10,循环体内又包含另一个完整的循环结构(多重循环)。 for(i=1;i=10;i+) for(j=1;j=20;j+) s+=i+j;/语句 ,外重循环,内重循环,要掌握多重循环执行的全过程。,5.6 循环的嵌套,i
11、:,j :,执行次数:,1,1,20,2,2,3,20,1,2,3,20,1,2,3,20,10,20,20,执行200次,以上多重循环结构可以简写为: for(i=1;i=10;i+) for(j=1;j=20;j+) s+=i+j;,5.6 循环的嵌套,#include int main() int i,j; for(i=1;i=100;i+) for(j=1;j=100;j+) if(i*j=100) printf(“n%d,%d”,i,j); return 0; ,例:找出行号乘以列号等于100的座位。,5.6 循环的嵌套,若考虑用方程组: 设公鸡x只,母鸡y只,小鸡z只则 x+y+z
12、=100 5x+3y+z/3=100 是一多解问题。,5.7 程序举例,例:百钱买百鸡问题。 给定100块钱,要求正好买100只鸡,已知公鸡5元/只,母鸡3元/只,小鸡1元/3只,问公鸡、母鸡和小鸡应各买多少只?,例:百钱买百鸡问题。 给定100块钱,要求正好买100只鸡,已知公鸡5元/只,母鸡3元/只,小鸡1元/3只,问公鸡、母鸡和小鸡应各买多少只?,测试法求解的程序设计有两个要点: 通过循环列出所有可能的解。 对所有列出的可能的解进行条件测试。,5.7 程序举例,通过循环列出公鸡、母鸡和小鸡可能的只数,再对可能的只数进行条件为 的测试。,用测试法求解的程序: #include int ma
13、in() int x,y,z; for(x=0;x=100;x+) for(y=0;y=100;y+) for(z=0;z=100;z+) if(x+y+z=100 ,5.7 程序举例,程序可进一步简化为: #include int main() int x,y,z; for(x=0;x=20;x+) for(y=0;y=33;y+) z=100-x-y; if(5*x+3*y+z/3.0=100) printf(“n%d,%d,%d”,x,y,z); return 0; ,5.7 程序举例,例:判断一个数m是否为素数。 分析: 只能被1和自己整除的数为素数。 通过循环列出所有和m相除的数。
14、#include int main() int i,m; scanf(“%d”, ,用测试法求解,5.7 程序举例,m,i,4,5,2,2,3,4,5,例:判断100-200间的全部素数。 分析:通过循环列出所有要判断是否是素数的数。 #include int main() int i,m; for(m=100;m=200;m+) for(i=2;im;i+) if(m%i=0)break; if(i=m) printf(“n %d is a prime”,m); else printf(“n %d is not a prime”,m); return 0; ,可用测试法求解,5.7 程序举例
15、,例: 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。如:153是一水仙花数,因为 153=13+53+33。,5.7 程序举例,#include int main() int i,j,k,n; for(n=100;n=999;n+) i=? j=? k=? if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); return 0; 通过循环列出所有3位数,然后对3位数进行条件判断。,i=n/100;,k=n%10;,j=n/10%10;,5.7 程序举例,#include int main() int i,j,k,n; f
16、or(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) n=i*100+j*10+k; if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); return 0; 通过循环列出百位,十位,个位的所有可能的解,然后对解进行条件判断。,5.7 程序举例,求多解的问题考虑用测试法,例:,求S=,i! =1!+2!+3!+4!+19!+20!,20,i=1,5.7 程序举例,分析方法一:对每一项累加求和,每一项又是连乘。,#include int main() int i,j; float t,s; s=0; for(i=1;i=20;i
17、+) t=1; for(j=1;j=i;j+) t=t*j; s+=t; printf(“n s=%f”,s); return 0; ,5.7 程序举例,/求i!,t4,t19,t20,t3,用递推法: 递推公式:ti=ti-1.i(i=2,3,420),t2,求S=,i! =1!+2!+3!+4!+19!+20!,20,i=1,5.7 程序举例,t1,t2=t1.2,t3=t2.3,t20=t19.20,include int main() int i; float t=1,s=t; for(i=2;i=20;i+) t=t*i; s+=t; printf(“n s=%f”,s); return 0; ,5.7 程序举例,例: 递推公式:,s=,i!,1,1,20,=, + + + + + ,1! 2! 3! 4! 20!,1 1 1 1 1,ti= ti-1 / i(i=2,3,420),5.7 程序举例,t2= t1 / 2,t1= 1/1,t3= t2 / 3,t20= t19 / 20,#include int main() int i;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境监测污染治理预案指南
- 2026年户外工作者高温作业防暑降温指导
- 2026年公司人事档案管理规章制度
- 数据保护安全可信承诺书(3篇)
- 2026年大数据企业数据知识产权保护培训
- 心理健康:小学生情绪管理与压力缓解小学主题班会课件
- 2026年宠物店新店开业促销活动设计与客户引流
- 2026年全自动食品包装机械创新结构设计
- 2026年幼儿园晨间接待流程与家长沟通技巧
- 基坑监测施工方案
- 中医茶馆创业计划书
- 2025年海东辅警协警招聘考试真题附答案详解(满分必刷)
- 2025广东东莞市谢岗镇招聘编外聘用人员23人参考题库及答案详解(基础+提升)
- 灭菌物品召回流程
- 病理诊断标本采集与处理全流程
- 涉密项目保密知识培训课件
- 维修资金应急预案(3篇)
- 2025年深圳非高危安全管理员和企业负责人习题(有答案版)
- 垃圾处理厂安全培训资料课件
- 计量装置铅封管理办法
- GJB2351A-2021航空航天用铝合金锻件规范
评论
0/150
提交评论