




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章 循环结构程序设计,2019年2月7日星期四,提出问题,求整数1到5的连加,怎么编程?,求整数1到100的连加,怎么编程?,main() int sum=0; sum=sum+1; sum=sum+2; sum=sum+3; sum=sum+4; sum=sum+5; printf(“sum=%d“,sum); ,main() int sum=0; sum=sum+1; sum=sum+2; sum=sum+3; sum=sum+100; printf(“sum=%d“,sum); ,分析:让我们找出问题的规律 sum=sum+i (i=1,2,3,100) sum=sum+i被重复执行 变量i有规律的变化 解决这类问题可以采用,循环结构,2019年2月7日星期四,结束,开始,i=1, sum=0,i=100,y,n,i=i+1,sum=sum+i,输出sum,i=1,i=2,i=2,i=3,提出问题,循环: 反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。,对于有规律的事物, 一般都可以用循环来组织。,i=101,i=100,i=101,2019年2月7日星期四,第六章 循环结构程序设计,主要内容 goto 和 if 语句构成循环 while 语句 dowhile 语句 for 语句 辅助控制语句:continue,break,2019年2月7日星期四,goto语句,goto语句的一般形式: goto 标号; 标号: 语句,说明: 标号只能是标识符,不能用整数作标号 标号只能加在可执行语句前面 不能加在声明语句的前面 标号在一个函数体内唯一,2019年2月7日星期四,goto语句,用if 和goto语句构成循环,求:,main() int i=1, sum=0; loop: if (i=100) sum+=i; i+; goto loop; printf(“%d“,sum); ,2019年2月7日星期四,goto语句,goto语句的用途 与 if 语句一起,构成循环 从一个循环体中,跳转到循环体外,while() while() goto label; label: 语句,c语言提供break来跳出本层循环,提供continue来结束本次循环 goto语句的使用,有时会给程序带来致命的问题,结构化程序设计主张限制使用goto语句,2019年2月7日星期四,while 语句,while 语句的一般形式: while (exp) statement;,特点: 先判断表达式, 后执行循环体,2019年2月7日星期四,while语句,用while语句求:,main() int i=1, sum=0; while ( i=100 ) sum=sum+i; i+; printf(“%d“,sum); ,循环体,2019年2月7日星期四,while语句,用while语句求:,main() int i=1, sum=0; while ( i=100 ) sum=sum+i; i+; printf(“%d“,sum); ,死循环,运行时用 ctrl+break 可跳出当前运行,main() int i=1, sum=0; while ( i=100 ) sum=sum+i; i+; printf(“%d“,sum); ,2019年2月7日星期四,while 语句,while 语句的两个要素:,2019年2月7日星期四,while 语句,循环体可为任意类型语句 循环体应当为一个单独的语句,或一个复合语句 循环体中一定要有能够使循环趋向于结束的语句, 避免出现“死循环”,while 语句的两个要素:,2019年2月7日星期四,dowhile 语句,dowhile 语句的一般形式: do statement; while (exp);,特点: 先执行循环体, 后判断表达式,dowhile 语句至少会执行一遍循环体 while 语句不一定,2019年2月7日星期四,dowhile 语句,dowhile 语句的一般形式:,do statement; while (exp);,statement; while (exp) statement;,dowhile 语句可以转化为while 语句,2019年2月7日星期四,dowhile语句,用do while语句求:,main() int i=1, sum=0; do sum=sum+i; i+; while ( i=100 ); printf(“%d“,sum); ,循环体,2019年2月7日星期四,dowhile 语句,dowhile 语句的两个要素:,循环体可为任意类型语句 循环体应当为一个单独的语句,或一个复合语句 循环体中一定要有能够使循环趋向于结束的语句, 避免出现“死循环”,2019年2月7日星期四,dowhile 语句,while语句 和 dowhile 语句比较:,main() int i, sum=0; scanf(“%d“, ,main() int i, sum=0; scanf(“%d“, ,1 ,5050,1 ,5050,101 ,0,101 ,101,while语句先判断表达式,后执行语句 dowhile语句先执行循环体,后判断表达式 while语句循环体执行次数0 dowhile语句循环体执行次数1,2019年2月7日星期四,for 语句,for 语句的一般形式: for (exp1; exp2; exp3) statement;,for语句中exp1,exp2,exp3类型任意,都可省略, 但分号不可省略 无限循环: for( ; ; ) 相当于 while(1) for语句可以转换成while结构,2019年2月7日星期四,for 语句,for 语句的一般形式: for (exp1; exp2; exp3) statement; for 语句一般应用形式: for (循环变量赋初值;循环条件;循环变量增值) 循环体; 例如:for(i=1; i=100; i+) sum=sum+i;,相当于: i=1; while (i=100) sum=sum+i; i+; ,2019年2月7日星期四,for 语句,for 语句的一般形式: for (exp1; exp2; exp3) statement; exp1 和 exp3 可以是逗号表达式: 例如:for(sum=0, i=1; i=100; sum+=i, i+);,相当于: sum =0; for(i=1; i=100; i+) sum+=i;,2019年2月7日星期四,for 语句,用 for 语句求:,main() int i, sum=0; for(i=1; i=100; i+) sum=sum+i; printf(“%d“,sum); ,i=1; for(; i=100; i+) sum=sum+i;,i=1; for(; i=100; ) sum=sum+i; i+; ,for( i=1; i=100 ; sum+=i, i+ );,2019年2月7日星期四,循环的嵌套,循环的嵌套是指: 一个循环体内又包含另一个完整的循环结构 三种循环结构可以相互嵌套,层数不限,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,(4) for( ; ; ) do while(); while() . ,for( ; ;) do while() while(); . ,o,2019年2月7日星期四,break 语句,break 语句 break; 功能 在循环语句中,跳出并终止循环体 在switch语句中,跳出并终止分支语句体 说明 break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中体,2019年2月7日星期四,break 语句,break 语句 break;,2019年2月7日星期四,break 语句,用 for 语句求:,main() int i, sum=0; for( i=1; ; i+ ) if (i100) break; sum=sum+i; printf(“%d“,sum); ,i=1; for(; ;) if (i100) break; sum=sum+(i+); ,2019年2月7日星期四,continue 语句,continue 语句 continue; 功能 结束本次循环,跳过循环体中尚未执行的语句, 进行下一次是否执行循环体的判断 说明 continue只能用于循环体中,2019年2月7日星期四,continue 语句,continue 语句 continue;,2019年2月7日星期四,continue 语句,输出100200之间不能被3整除的数:,main() int n; for(n=100; n=200; n+) if (n%3=0) continue; printf(“%5d“, n); ,2019年2月7日星期四,算法举例-穷举法,穷举法 将2角钱换成1分、2分和5分的硬币,列出所有可能的换法。 main() int x,y,z,k= 0; for(z=0;z=4 ;z+) for(y=0;y=(20-5*z)/2 ; y+) printf(“ 第%d种: 1分=%dt2分=%dt5分=%dn”, +k,20-2*y-5*z,y,z); printf(“总的换法=%dn”,k); ,2019年2月7日星期四,输入学生成绩,将及格者的成绩打印出来。 main() int n,i; float score; printf(“输入学生总数: ”); /*输入学生总数*/ scanf(“%d”,&n); for(i=1;i=60.0)printf(“第 %d 学生的成绩是 : %fn”,i,score); ,算法举例-穷举法,2019年2月7日星期四,求fibonacci 数列的前40个数: f1 = 1 (n=1) f2 = 1 (n=2) fn = fn-1+fn-2 (n3),循环语句举例,f1 f2 ? ? ?,main() long f1=1, f2=1; int i; for(i=1; i=20; i+) printf(“%12ld %12ld“,f1,f2); if(i%2=0) printf(“n“); f1=f1+f2; f2=f2+f1; ,i=1; while (i=20) printf(“%12ld %12ld“,f1,f2); if(i%2=0) printf(“n“); f1=f1+f2; f2=f2+f1; i +; ,i=1; do printf(“%12ld %12ld“,f1,f2); if(i%2=0) printf(“n“); f1=f1+f2; f2=f2+f1; i +; while (i=20);,main() long f1=1, f2=1; int i; for(i=1; i=20; i+) printf(“%12ld %12ld“,f1,f2); if(i%2=0) printf(“n“); f1=f1+f2; f2=f2+f1; ,算法举例-迭代法,2019年2月7日星期四,循环程序设计举例,辗转相除法 main( ) int x,y,a,b,t; printf(“输入两个整数x,y: “); scanf (“%d,%d“,/*用乘积除以最大公约数得到最小公倍数*/,【例6.18】求两个整数的最大公约数和最小公倍数。,2019年2月7日星期四,分子 s:1,-1,1,-1 分母 n:1,3,5,7,. 项t=s/n,用 公式求 的近似值,直到 某一项的绝对值小于 为止,#include main() int s; float n,t,pi; t=1; pi=0; n=1; s=1; while(fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi = pi*4; printf(“pi=%10.6f”,pi); ,循环程序设计举例,2019年2月7日星期四,循环程序设计举例,用循环输出如下图案: * * * * * * * * * * * * * * *,main() int i,m,n; for(i=1;i=5;i+) /*行数的控制*/ for(m=1;m=5-i;m+)printf(“”); /*空格的控制*/ for(n=1;n=i;n+)printf(“*”); /*输出*个数的控制*/ printf(“n”); /*每一行要有回车换行*/ ,2019年2月7日星期四,循环程序设计举例,打印所有的“水仙花数”(三位数:153135333)。,main() int i,ge,shi,bai; for (i=100;i=999;i+) bai=i/100; shi=i/10%10; ge=i%10; if (i=ge*ge*ge+shi*shi*shi+bai*bai*bai) printf(“%6d“,i); printf(“n“); getch(); ,2019年2月7日星期四,循环语句举例,判断m是否为素数: 用2到m的平凡根之间 的所有整数去除m 若m可以被其中的一个 整数除尽 则说明m不是素数 否则说明m是素数,#include main() int m, i, k; scanf(“%d“, ,若m能被从2到sqrt(m)的之间的数整除,则m不是素数 循环提前结束,i必定小于等于k 否则,m是素数,并且经过最后一次循环后,i=k+1,#include main() int m, i, k; scanf(“%d“, ,i=2; while (i=k) if( m%i=0 ) break; i +; ,i=2; do if( m%i=0 ) break; i +; while (i=k);,#include main() int m, i, k; scanf(“%d“, ,无法判断:1、2、3这三个数!,2019年2月7日星期四,循环语句举例,输出100200间的全部素数:,#include main() int m, i, k, n=0; for (m=101; mk) printf(“%5d“, m); n=n+1; if (n%10=0) printf(“n“); ,自己尝试用 while 和 dowhile 语句改写该程序,2019年2月7日星期四,循环语句举例,输入一个正整数,要求逆序输出该数: 例如:输入12345,输出54321,main() int n; printf (“input the number:“); scanf (“%d“, /* number缩小10倍 */ ,2019年2月7日星期四,循环语句举例,输出乘法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电路和电流课件
- 大学高校保安服务投标方案
- 电脑课件VIP服务
- 数据管理平台技术服务方案
- 技改、修理类工程监理合同
- ps考试题目模拟试题及答案
- nike兼职考试及答案
- 电缆工程专业科普知识培训课件
- 江西省抚州市南城县2022-2023学年九年级上学期期中化学试题(含答案)
- 电玩城专业知识培训内容课件
- 成人脑室外引流护理标准解读
- 算法认识与体验(教学设计)-2024-2025学年人教版(2024)小学信息技术五年级全一册
- 2025年水利工程监理员网络培训考试试题与答案
- 初三化学上教学工作方案
- 山西省太原市小升初语文试卷(含答案)
- 建筑结构及选型
- 质量管理统计工具(共102页).ppt
- (完整版)PHQ-9抑郁症筛查量表
- 场记单模板(共20页)
- 食物频率法问卷调查FFQ
- FOXBORO__IA_高级培训
评论
0/150
提交评论