c语言-第4章循环结构.ppt_第1页
c语言-第4章循环结构.ppt_第2页
c语言-第4章循环结构.ppt_第3页
c语言-第4章循环结构.ppt_第4页
c语言-第4章循环结构.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

4.1 用格里高利公式求的近似值(while语句) 第4章 循环结构 例4-1 用格里高利公式求的近似值,要求精确到最后一项的绝 对值小于10-5。 循环结构: 根据条件的判断对某一段程序重复执行 构成循环的要素:循环体、条件判断、进入每次循环的准备 循环语句:for(表达式1; 表达式2; 表达式3) 语句 循环变量控制循环次数:循环变量、初值、终值、增量 pi=pi+item(通项) item=flag*1.0/(2*i-1) flag=1,i=1,2,? 分析循环结束条件: |item|=10-5 pi=pi+item 非0 0 i=1 i=i+1 pi=0 4.1.1 程序解析 item=1 flag=1 item=flag/(2*i-1) flag=-flag pi=4*pi 输出pi 停 表达式1和表达式3不明确 #include #include void main( ) int i,flag; double item,pi; pi=0;flag=1;i=1;item=1; for (;fabs(item)=1e-5;) pi=pi+item; i=i+1; flag=-flag; item=flag*1.0/(2*i-1); pi=pi*4; printf(“pi=%fn“,pi); 省略了表达式1和表达式 2 #include #include void main( ) int i,flag; double item,pi; pi=0;flag=1;i=1;item=1; while(fabs(item)=1e-5) pi=pi+item; i=i+1; flag=-flag; item=flag*1.0/(2*i-1); pi=pi*4; printf(“pi=%fn“,pi); for循环语句改用while循环语句 3 4.1.2 while循环语句 当型循环 当条件为真(非0)时做循环,否退出循环 格式 while(表达式) 语句 其中 语句是一个语句或复合语句 表达式是条件,求值得真(非0)或假(0) 操作 当表达式的值非0,执行语句后继续循 环;当表达式的值0,终止循环。 表达式 语句 非0 0 loop:if(表达式) 语句; goto loop; 等价于 for(;表达式;) 语句; for(表达式1; 表达式2; 表达式3) 语句; 表达式1; while(表达式2) 语句; 表达式3; 4 例4-2 输入一批学生的成绩,统计平均分 循环体 sum=sum+mark mark学生成绩 循环判断 一批 mark=0 则mark为负值结束循环 mark=0 sum=sum+mark 非0 0 num=num+1 num=0 sum=0 aver=sum/num 输出aver 停 输入mark 输入mark #include void main( ) int num; double mark,sum,aver; num=0;sum=0; scanf(“%lf“, while(mark=0) sum=sum+mark; num=num+1; scanf(“%lf“, aver=sum/num; printf(“aver=%fn“,aver); 5 4.2 统计一个整数的位数(dowhile语句) 例4-3 从键盘读入一个整数,统计该数的位数。 例如,输入1234,输出4;输入0,输出1。 一个整数由多位数字组成,统计过程需要一位位地数 利用 num/10-num,每统计一次减少一位数 例 1234 整数 位数 1234 1 1234/10-123 2 123/10-12 3 12/10-1 4 1/10-0 不计 判断条件 num!=0 例 0 整数 位数 0 1 0/10-0 不计 先统计 后判断条件 num!=0 coun=coun+1 非0 0 num=num/10 coun=0 输出coun 停 输入num 6 4.2.1 程序解析 #include void main( ) int coun,num; coun=0; scanf(“%d“, docoun=coun+1; num=num/10; while(num!=0); printf(“count=%dn“,coun); num!=0 coun=coun+1 非0 0 num=num/10 coun=0 输出coun 停 输入num 7 4.2.2 dowhile循环语句 直到型循环 做循环一直到条件不满足为止 格式 do 语句 while(表达式); 其中 语句是一个语句或复合语句 表达式是条件,求值得真(非0)或假(0) 操作 先做语句,然后判别表达式的值,如 非0则继续循环;否终止循环。 表达式 语句 非0 0 loop: 语句; if(表达式) goto loop; 等价于 8 4.2.3 循环语句的选择 循环语句的选择: for: 知道循环次数、能表示增量型、只要能表示三个表达式。 最常用。 while:当循环次数未知时,使用较多。先判断,后循环 do-while:必须从循环体中才能得到循环变量的值,然后再判决 定是否进行下一次循环。先循环,后判断 9 4.3 break语句和continue语句 4.3.1 break语句 当break语句出现在while、dowhile、for语句的循环体内, 执行 break时立即终止循环 表达式2 语句 非0 0 表达式1 表达式3 break 例 半径为1100,要求打印圆 面积100) break; printf(“r=%d,area=%fn“,r,area); 表达式? 0 非0 语句 10 例4-4输入一个正整数m,判断它是否为素数。素数就是只能被1 和自身整除的正整数,1不是素数,2是素数。 素数:指只能被1和自身整除的正整数 即 用m分别去除以2、3、m-1,全除不尽时,m是素数 实际上除数的范围2,m/2,可以证明在2, im/2 输出no 1 0 #include “stdio.h“ void main( ) int i,m; scanf(“%d“, for(i=2;im/2) printf(“YESn“); else printf(“NOn“); break 11 #include “stdio.h“ void main( ) int i,m; scanf(“%d“, for(i=2;im/2) printf(“YESn“); else printf(“NOn“); m i im/2) 1 2 21/2 - yes 2 2 22/2 - yes #include “stdio.h“ void main( ) int flag,m; scanf(“%d“, if(m=1) flag=0; else if(m=2) flag=1; else int i; flag=1; for(i=2;i 1 s=0 i=4 4%2 0 s=0+4=4 i=3 3%2 1 s=4 i=2 2%2 0 s=4+2=6 i=1 1%2 1 s=6 i=0 循环结束 15 循环嵌套 循环语句的循环体中又包含了另一个循环语句 (1) while( ) . While( ) . (2) do . While( ) . while( ) (3) for( ) . While( ) . 4.4 循环嵌套 16 例4-6 求 s=1!+2!+3!+100! 分析 1!+2!+3!+100!累加需要循环 s=s+t i!=1*2*i需要循环 t=t*j s=0 i=1,100,1 t=1 j=1,i,1 t=t*j j s=s+t i 输出s #include “stdio.h“ void main() int i,j; double t; s=0; for(i=1;i=0) if(max=0) printf(“%fn“,max); 22 例4-8 将键盘读入的一个任意正整数逆序输出。 例如键盘输入12345,屏幕输出显示54321。 分离整数各位算法 整数x x%10 - 余数 分离最低位 x=x/10 - 去掉最低位 当x0或x!=0 循环分离整数所有的位 例 x=12345 12345%105 12345/10=12340 1234%104 1234/10=1230 123%103 123/10=120 12%102 12/10=10 1%101 1/10=0 #include “stdio.h“ void main() int x; scanf(“%d“, while(x) printf(“%d “,x%10); x=x/10; printf(“n“); 分析 循环控制: x0 循环体: x%10 - 余数 输出余数 x=x/10 - 去掉最低位 23 例4-8 将键盘读入的一个任意整数逆序输出。 设正数和负数逆序输出的结果一样。即逆序输出不带负号 #include “stdio.h“ void main() int x; scanf(“%d“, while(x) printf(“%d “,x%10); x=x/10; printf(“n“); x%10输出带负号 #include “stdio.h“ #include “math.h“ void main() int x; scanf(“%d“, x=fabs(x); while(x) printf(“%d “,x%10); x=x/10; printf(“n“); 将 x取绝对值 要考虑特殊解0 #include “stdio.h“ #include “math.h“ void main() int x; scanf(“%d“, x=fabs(x); do printf(“%d “,x%10); x=x/10; while(x); printf(“n“); 24 例4-9 求500之内的全部素数,1不是素数,2是素数。 分析 素数定义: 只能被1或数本身除尽的数 判别素数: (1)给出在2500之间的m数 (2)用2,3,4,.,m-1除,只要有个被除尽,m不是素数 可以证明除数只要取2,3,. m=2,500,1 k= i=2,k,1 m%i=0 i ik+1 输出m k 0 1 1 0 流程图 程序 #include “math.h“ void main() int i,m,k,n=0; for(m=2;m=k+1) printf(“%d “,m);n+; if(n%10=0)printf(“n“); 要验证边界值: 1不是素数,2是素数 25 例4-10 求Fibonacci(斐波那契)数列的前10个数 1, 1, 2, 3, 5, 8, 13, 数之间的关系 F1=1 n=1 F2=1 n=2 Fn =Fn-1+Fn-2 n3 分析前2项之和等于后项值 f3=f1+f2 i= 1 2 3 4 5 6 7 f1= 1 1 1 2 3 5 f2= 1 1 2 3 5 8 f3= 2 3 5 8 13 + + + + 得 f1=f2 f2=f3 f3=f1+f2 26 流程图 f1=1 f2=1 f3=2 i10 i=4 i=i+1 1 0 输出f1,f2,f3 f1=f2 f2=f3 f3=f1+f2 输出f3 表达式1 表达式2 表达式3 程序 #include “stdio.h“ void main() int i,f1,f2,f3; f1=1;f2=1;f3=2; printf(“%d %d %d “,f1,f2,f3); for(i=4;i=10;i+) f1=f2; f2=f3; f3=f1+f2; printf(“%d “,f3); if(i%5=0) printf(“n“); 终 27 例4-11 某工地搬运砖块,已知男人一人搬3块,女人一人搬2块,小 孩两人搬一块。问用45人正好搬45块砖,有多少种搬法? 列出方程: men+women+child=45 men*3+women*2+child*0.5=45 2个方程解3个未知数,只有通过试算,有多种答案。 即 men=0,145、wonen=0,145、 child=0,145代入求解 #include “stdio.h“ void main() int men,women,child; for(men=0;men=45;men+) for(women=0;women=45;women+) for(child=0;child=45;child+) if(men+women+child=45 28 程序改进 for(men=0;men=45;men+) for(women=0;women=45;women+) for(child=0;child=45;child+) 三重循环45*45*45 约9万多次 减少循环次数,去掉明显不能组合的循环 由于最多只有45块砖,男人的数量不会超过15人,女人的数量不 会超过22人;

温馨提示

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

评论

0/150

提交评论