




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 循环结构程序设计,内蒙古科技大学工程训练中心,循环语句,while 语句 do while 语句 for 语句,循环结构用于完成程序中需要重复执行的操作。是结构化程序设计的三种基本结构之一。在c语言中循环语句有三种:,while 语句,条件表达式,循环体,1(真),0(假),一般形式: while (条件表达式) 语句;,其特点是: 先判断表达式,后执行语句。,while,循环体,循环结构的术语,1. 循环条件: 是循环结构中的条件表达式。,2. 循环体:是在每个循环周期均要执行一次的语句。语句可以是任何语句,简单语句、复合语句、空语句均可以。,(1)条件表达式一般是关系表达式和逻辑表达式。,3. 循环变量 是在循环中控制条件表达式是真是假的变量,即控制循环体能否执行的变量。 在任一种循环语句中,循环变量均有:,计算从1到10所有整数的累加和,即:1+2+3+4+5+9+10。,#include main() int sum,i; sum=0;i=1; while (i=10) sum+=i; i+; printf(“sum=%dn”,sum); ,例1:,练习题: 1.在屏幕的一行上依次输出7个*号。 2.计算1100之间是7的倍数的数值之和 。,dowhile 语句,一般形式: do 循环体 while(条件表达式) ;,0(假),do,循环体,条件表达式,1(真),其特点是: 先执行循环体,后判断循环条件。,#include main() int sum,i; sum=0;i=1; do sum+=i; i+; while (i=10); printf(“sum=%dn”,sum); ,计算从1到10所有整数的累加和,即:1+2+3+4+5+6+7+8+9+10。,例2:,练习题: 1.在屏幕的一行上依次输出7个*号。 2.计算1100之间是7的倍数的数值之和。,while 语句和do while 语句的比较, while 语句先对表达式进行判断,后执行循环体; do while 语句先执行循环体,后对表达式进行判断。 当处理同一个问题时,如果第一次表达式为真时,其结果相同;第一次当表达式为假时,则结果不同。 例如:,i=2; c=0; n=2; while(in) c=c+5; i+; printf(“%d”,c);,i=2;c=0; n=2; do c=c+5; i+; while (in); printf(“%d”,c);,for 语句,一般形式: for(表达式1 ; 表达式2 ; 表达式3) 循环体,表达式1:循环变量初始值表达式。 表达式2: 循环变量终止值表达式。(条件表达式) 表达式3: 循环变量的递增或递减表达式,练习题: 1.在屏幕的一行上依次输出7个*号。 2.计算1100之间是7的倍数的数值之和。,while 和for循环注意事项:,表达式2可以省略 (不判断循环条件),2.for for (i=1;i+) /*等效于for(i=1;1;i+) */ sum+=i; if(i10) break; ,1.while while (3) 语句 表示无限循环 while (0) 语句 表示不进入循环体 do-while同上。,作业,计算10!,即1*2*3*.*10。 输出12000之间的所有偶数。,#include main() int i=1 , jc=1; while(i=10) jc=jc*i; i+; printf(“%d!=%dn”,n,jc); ,作业1:,#include main() int i=1 , jc=1; do jc=jc*i; i+; while (i=10); printf(“%d!=%dn”,n,jc); ,#include main() int i , jc=1; for(i=1;i=10;i+) jc=jc*i; printf(“%d!=%dn”,n,jc); ,作业2:输出1到2000之间的偶数。,#include main() int i; for(i=1;i=2000;i+) if (i%2=0) printf(“%d”,i); ,break语句和continue语句,1、break 语句:终止语句的执行。 1.使用在switch语句中。 2.使用在while、do-while和for循环语句的循环体中。 格式:break;,#include main() int r; float s; for(r=2;r100) break; printf(“r=%d,s=%fn“,r,s); ,2、continue 语句: continue作用: 结束本次循环(即不执行本次循环中尚未执行的语句),进入下一次循环。,continue语句和break语句的区别: continue语句只结束本次循环,而不是终止整个循环。 break语句终止整个循环,不再判断循环条件。,例如:输出100-200之间不能被3整除的数据。 for(n=100;n=200;n+) if(n%3= =0) continue; printf(“%d”,n); ,break语句和continue语句,读程序,区别两者的不同,#include main() int i; for(i=1;i=50;i+) if(i%7=0) continue; printf(“%dt“,i); printf(“n“); ,例1 求100999之间的水仙花数。 (水仙花数:每位数字的立方和等于该数本身),#include main() int i,a,b,c; for(i=100;i=999;i+) a=i%10; b=(i/10)%10; c=i/100; if(i=a*a*a+b*b*b+c*c*c) printf(“ %d“,i); ,例2:求1-1000之间的同构数。 (同构数:该数平方值的后几位数等于该数本身),#include main() int i,m; for(i=1;i=1000;i+) m=i*i; if(m%10=i | m%100=i | m%1000=i) printf(“%6d“,i); ,同一类型题: 从键盘输入一个整数,求它的位数,并打印出每一位上的数字。,作业:,求100到999的水仙花数。(单重循环) 求1000以内所有的同构数。(单重循环),循环嵌套,一个循环的循环体中套有另一个循环叫循环嵌套。这种嵌套过程可以一直重复下去。,一个循环外面包围一层循环称为二重循环。 一个循环外面包围二层循环称为三重循环。 一个循环外面包围多层循环称为多重循环。,while、do-while、for可以互相嵌套自由组合。,while( ) do while( ) : : : while( ) do do while( ) ; while( ); : while( ) ; for(; ;) for(; ;) do : : : for(; ;) while( ) for(; ;) while( );,循环嵌套的格式:,读程序段:,#include main() int i,j; i=1; while(i=3) for(j=1;j=i;j+) printf(“*“); i+; ,例1:打印8行7列的星号矩形。,#include main() int i , k; for( i=0; i8; i+ ) for( k=0; k7; k+ ) printf(“*“); printf(“n“); ,例3:求1000以内的完全数。 (完全数:该数等于它的因子之和(除自身外。例如: 6),#include main() int i,j,t; for(i=1;i=1000;i+) t=0; for(j=1;ji;j+) if(i%j=0) t=t+j; if(t=i) printf(“ %d“,i); ,#include main() int i,m; printf(“please input a number:n“); scanf(“%d“, ,例4:给定一个整数m,判断该数是否为素(质)数。,m是素数的条件是:m不能被2,3,m-1整除。,求出100200以内的所有素数。,#include #include main() int m , k,i ,n=0; for(m=101;mk) printf(“ %d“,m); ,穷举法:,穷举算法:把所有可能的方案一一测试,从中找出符合条件的方案。,例5:百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各多少只?(穷举算法),分别设鸡翁、鸡母、鸡雏各为x,y和z只。 100钱全部买了鸡翁,鸡翁最多20只,所以: x0,20 y0,34 z:100-x-y,#include main() int x,y,z; for(x=0;x=20;x+) for(y=0;y=34,y+) z=100-x-y; if(z%3=0) ,递推算法:在一个或几个结果的基础上推出下一个结果.,递推算法:,穷举法相同类型的题: 1、编程:百马拉百砖.用100匹马拉100块砖,红马拉3块, 黑马拉2块,白马两匹拉1块,在红马、黑马和白马不可缺少的情况下, 共有几种拉法? 2. 5.8(课后) p92,例6:求斐波纳契(fibonacci)数列:1,1,2,3,5,8的前20项(递推算法)。(后一项等于前两项之和),作法1:,#include main( ) int i; int f1=1, f2=1; int f; printf(%10d%10d, f1, f2); for(i=3; i=20; i+) f=f1+f2; printf(%10d, f); f1=f2; f2=f; ,#include main() int f1=1, f2=1, i; printf(“%6d%6dn“,f1,f2); for(i=1;i=9;i+) f1=f1+f2; f2=f1+f2; printf(“%6d%6dn“,f1,f2); ,作法2:,例7:求值,#include #include main() double n,sum,pa,cj; n=1; sum=0; while(1/(n*n)pow(10,-12) sum=sum+1/(n*n); n+; cj=sum*6; pa=sqrt(cj); printf(“%f“,pa); ,相同类型的题: 例5.11 p88,例8:统计从键盘上输入的字符中数字字符、大写字符、小写字符、其它符号的个数,用换行结束循环。,#include main() int sz=0,dx=0,xx=0,qt=0; char ch; scanf(“%c“, ,相同类型的题: 1. 5.7 p92 2. 5.10 p92,#include main( ) int i, j double t; double sum; sum=0; for(i=1; i=10; i+) /*求和*/ t=1; for(j=1; j=i; j+) /*求每个i数阶乘*/ t=t*j; sum=sum+t; printf(”sum=%f”, sum);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民办合肥经济技术职业学院《固定收益证券(英语)》2023-2024学年第二学期期末试卷
- 教育学学校制度改革实施路径
- 心理健康课件获取途径
- 老鼠阿姨的礼物
- 共同取水合同范例
- 2025授权机械加工合同样本
- 农村买门面合同范例
- voc安装合同样本
- 企业合作技术合同范例
- 2025标准中介销售合同协议书
- 国内外科研机构绩效管理模式分析
- 2023年高考真题-物理(福建卷) 含答案
- 1型糖尿病饮食宣教
- 《精装修成品保护》课件
- 学校食堂设备故障应急预案
- 《中小学生时间规划管理主题班会:做时间的主人》课件(五套)
- 二年级乘除法口诀专项练习1000题
- DB35T 2148-2023 养殖大黄鱼等级规格
- 药企与医疗机构合作协议书范文
- DB11∕T 1350-2016 文物建筑修缮工程验收规范
- 剑桥国际少儿英语KB1-Unit-10
评论
0/150
提交评论