C语言第5章 循环结构程序设计_第1页
C语言第5章 循环结构程序设计_第2页
C语言第5章 循环结构程序设计_第3页
C语言第5章 循环结构程序设计_第4页
C语言第5章 循环结构程序设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、1第5章2一、实现循环结构的控制语句一、实现循环结构的控制语句二、循环嵌套二、循环嵌套三、循环结构程序举例三、循环结构程序举例3 while语句语句 do-while语句语句 for语句语句 break、continue语句语句 几种循环的比较几种循环的比较4格式格式while (表达式表达式) 语句语句 5.1 while语句举例举例P79求求110的累加和。的累加和。 i=1 sum=0当当i=10sum=sum+ii+输出输出sum#include stdio.hint main()int i,sum;i=1; sum=0;while (i=10) sum=sum+i; i+;print

2、f(sum=%5dn,sum);return 0;说明说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先判断后执行。、先判断后执行。 1 求求1100的累加和的累加和.2 求求110的奇数和的奇数和.3 求求N!表达式表达式循环体语句循环体语句不成立不成立 成立成立 ?5 求求1到到10的奇数和的奇数和举例举例#include stdio.hint main()int i,sum;i=1; sum=0;while

3、 (i=10) sum=sum+i; i+=2; printf(sum=%5dn,sum);return 0;运行结果:运行结果:6#include void main() int i,sum=0; i=1; while (i=10) if (i%2=0)sum=sum+i;i+; printf(%dn,sum);运行结果:运行结果:求求1到到10之间的偶数和之间的偶数和举例举例7举例举例求求N!#include void main() int i=1,n;float fac=1;printf(请输入请输入n:); scanf (%d,&n); while (i=n) fac=fac*

4、i;i+;printf(%.0fn,fac);运行结果:运行结果:8利用公式:利用公式:sum=1-3+5-7+9-11求求前前10项的项的和。和。#include void main() int s,i,sum,t,n; i=0;n=1,sum=0,t=1,s=1; while(i10) sum=sum+t;n=n+2;s=-s;t=s*n;i+; printf(sum=%dn,sum); s:变化的符号变化的符号i:第第i项项n:第第i项的绝对值项的绝对值t:第第i项的值项的值sum:和和举例举例运行结果:运行结果:9举例举例例例5.2 设设s=123n,求,求s不大于不大于400000时

5、时最大的最大的n。#include int main( ) int n=1;long int s=1;while(s=400000) n=n+1;s=s*n;printf(不大于不大于400000时的最大时的最大n为:为:%dns值为:值为:%ldn,n-1,s/n);return 0;运行结果:运行结果:前前n项的乘积项的乘积8110举例举例例例5.3 现有某班现有某班20名学生的名学生的C语言成绩,求该班学生的语言成绩,求该班学生的C语语言的平均成绩。言的平均成绩。运行结果:运行结果: 请输入学生成绩:请输入学生成绩:23凵凵89凵凵67凵凵78凵凵94凵凵56凵凵34凵凵83凵凵90 凵

6、凵67凵凵48凵凵72凵凵81凵凵65凵凵74凵凵87凵凵73凵凵67凵凵90凵凵98 20名学生的名学生的C语言平均成绩为:语言平均成绩为:71.8#include int main( ) float total=0,score,average;int i=1;printf(请输入学生成绩:请输入学生成绩:);while(i=20) scanf(%f,&score); total=total+score; i+; average=total/20; printf(20名学生的名学生的C语言平均成绩为:语言平均成绩为:% .1fn,average); return 0; total :

7、前前i名学生名学生的成绩的和的成绩的和 score : 每一名学生每一名学生的成绩的成绩average : 平均成绩平均成绩8111格式格式do 循环体语句循环体语句while(表达式表达式);5.2 do-while语句举例举例P85求求110的累加和。的累加和。 #include stdio.hint main() int i,sum; i=1; sum=0; do sum=sum+i;i+; while(i=10); printf(sum=%5dn,sum); return 0;说明说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。、循环体如果包含一个以上的语句,必须使用复合语

8、句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先执行,后判断。、先执行,后判断。 i=1 sum=0当当i10)输出输出sumsum=sum+ii+表达式表达式循环体语句循环体语句假假真真至少执至少执行一次行一次12举例举例while和和do-while循环的比较。循环的比较。 #include void main() int i,sum=0; scanf(%d,&i); while(i=10) sum=sum+i; i+; printf(sum=%dn,sum);#include void main()

9、int i,sum=0; scanf(%d,&i); do sum=sum+i; i+; while(i=10) ; printf(sum=%dn,sum);输入:输入:1 输入:输入:11 sum=55输出:输出:sum=55sum=0输出:输出:sum=11此程序此程序的功能?的功能?什么情况下两什么情况下两者结果相同?者结果相同?13格式格式for (表达式表达式1;表达式;表达式2;表达式;表达式3) 语句语句 P87for (循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) 语句语句 执行执行过程过程(1)先求解表达式先求解表达式1;(2)求解表

10、达式求解表达式2,若其值为真,则,若其值为真,则 执行循环体语句,然后执行第(执行循环体语句,然后执行第(3)步;)步;若为假,则结束循环,转到第(若为假,则结束循环,转到第(5)步;)步;(3)求解表达式求解表达式3;(4)转向步骤(转向步骤(2););(5)循环结束,执行循环结束,执行for语句下面的一语句下面的一个语句。个语句。表达式表达式2循环体语句循环体语句假假 真真求解表达式求解表达式1求解表达式求解表达式35.3 for语句语句14举例举例求求1100的累加和。的累加和。 #include void main() int i,sum; sum=0; for (i=1;i=100;

11、i+) sum=sum+i; printf(sum=%5dn,sum);?1 求求150的累加和的累加和.2 求求1100的奇数和的奇数和.3 求求N!i=1;while (i=100)sum=sum+i;i+;15for (表达式表达式1;表达式;表达式2;表达式;表达式3) 语句语句 说明说明三个表达式都可三个表达式都可以省略。以省略。表达式表达式2循环体语句循环体语句假假 真真求解表达式求解表达式3表达式表达式1省略省略需在循环体外赋初值需在循环体外赋初值循环体语句循环体语句求解表达式求解表达式1求解表达式求解表达式3表达式表达式2省略省略恒真循环恒真循环表达式表达式2循环体语句循环体语

12、句假假 真真求解表达式求解表达式1表达式表达式3省略省略两种情况两种情况?结果?结果?16说明说明1i=1;for(; i=10;i+) sum=sum+i; 2for (i=1; ;i+) sum=sum+i; ?3for (i=1;i=10 ;) sum=sum+i; i+; for(i=1; i=10;i+) sum=sum+i; 表达式表达式1可以省略,可以省略,但其后的分号不但其后的分号不可以省略。可以省略。没有循环结没有循环结束条件,构束条件,构成了死循环成了死循环for(i=1; i=10;i+) sum=sum+i; i=1while (1) sum=sum+i; i+; 17

13、说明说明45for( ; ; ) sum=sum+i; 6表达式表达式1和表达式和表达式3可以是可以是与循环变量无关的表达式。与循环变量无关的表达式。for( ;i=10 ; ) sum=sum+i; i+; 7表达式表达式2一般是关系表达式,也一般是关系表达式,也可以是数值或字符表达式。可以是数值或字符表达式。while(i=10) sum=sum+i; i+ ; while (1) sum=sum+i; 表达式表达式1和表达式和表达式3可以可以同时省略,此时等同于同时省略,此时等同于while语句。语句。for(sum=0,i=1;i=100;i+) sum=sum+i; 例例建议:建议:

14、for语句中只放与语句中只放与循环控制有关的语句。循环控制有关的语句。18说明说明1、 三种循环语句在处理循环问题时,一般可以三种循环语句在处理循环问题时,一般可以相互替代。相互替代。2、 对于循环次数固定的问题,用对于循环次数固定的问题,用for语句实现语句实现比较简单。比较简单。3、 对于循环次数不确定的问题,可用对于循环次数不确定的问题,可用while语语句或句或do-while语句实现。语句实现。4、 while语句语句:先判断,后执行。先判断,后执行。 do-while语句:先执行,后判断。语句:先执行,后判断。几种循环语句的比较几种循环语句的比较19格式格式while (表达式表达

15、式1) if (表达式表达式2) break; 5.4 break/continue语句举例举例 . sum=0; for (i=1;i5) break; sum=sum+i; printf(“sum=%5dn”,sum); .while (表达式表达式1) if (表达式表达式2) conitue; 结束整结束整个循环个循环结束本结束本次循环次循环 . sum=0; for (i=1;i=10;i+) if (i=5) continue; sum=sum+i; printf(“sum=%5dn”,sum); .1到到5的累加和的累加和6到到10的累加和的累加和20举例举例例例5.11 分析下

16、面程序的运行结果。分析下面程序的运行结果。P90结束整个循环结束整个循环#include int main( ) int i=0,a=0;while(i=1;n-)if(n%7=0)printf(100以内能被以内能被7整除的最大数为:整除的最大数为:%dn,n);break;return 0; n n%7第第1次执行循环次执行循环 100 2第第2次执行循环次执行循环 99 1第第3次执行循环次执行循环 98 0第第4次执行循环时条件表达式次执行循环时条件表达式n%7=0成立成立,执行执行break语句,跳出循环语句,跳出循环运行结果:运行结果:100以内能被以内能被7整除的最大数为:整除的

17、最大数为:98 22举例举例例例5.13 分析下面程序的运行结果。分析下面程序的运行结果。 P92结束本次循环结束本次循环#include stdio.hint main( ) int i=0,s=0; do if(i%2) i+; continue; i+; s+=i; while(i7); printf(%dn,s); return 0; i i%2 i+ s continue 是否执行是否执行第第1次执行循环次执行循环 0 0 1 1 否否第第2次执行循环次执行循环 1 1 2 1 是是 第第3次执行循环次执行循环 2 0 3 4 否否第第4次执行循环次执行循环 3 1 4 4 是是第第

18、5次执行循环次执行循环 4 0 5 9 否否第第6次执行循环次执行循环 5 1 6 9 是是第第7次执行循环次执行循环 6 0 7 16 否否此时条件表达式此时条件表达式17不成立不成立,结束循环结束循环运行结果:运行结果:16 S=1+3+5+723#include void main() int i; for(i=1;i3) break;if(i%2) printf(*);else continue;printf(#); printf($n);分析如下程序的输出结果:分析如下程序的输出结果: *#*#$举例举例24举例举例例例5.14 把把100200之间的能被之间的能被13整除的数输出。

19、整除的数输出。 P92#include stdio.hint main( ) int n; for(n=100;n=200;n+) if(n%13!=0) continue; else printf( %d ,n); printf(n); return 0;运行结果:运行结果:104 117 130 143 156 169 182 195 #include stdio.hint main( ) int n; for(n=100;n=200;n+) if(n%13=0) printf( %d ,n); printf(n); return 0;25概念概念一个循环体内又包含另一个完整的循环结构,称

20、为循环嵌套。一个循环体内又包含另一个完整的循环结构,称为循环嵌套。举例举例例例5.15 马克思曾经做过这样一道趣味数学题:有马克思曾经做过这样一道趣味数学题:有30个人在一个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花家小饭馆里用餐,其中有男人、女人和小孩。每个男人花3先令,先令,每个女人花每个女人花2先令,每个小孩花先令,每个小孩花1先令,共花去先令,共花去50先令。问男人、先令。问男人、女人和小孩各几人(男人、女人和小孩均存在)?女人和小孩各几人(男人、女人和小孩均存在)?P83 #include stdio.hint main( ) int man,women,child;

21、for(man=1;man16;man+) for(women=1;women=23;women+) child=30-man-women; if(man*3+women*2+child*1=50) printf(man=%-6dwowen=%-6dchild=%-6dn,man,women,child); return 0;5.5 循环嵌套循环嵌套男人人数,最多男人人数,最多15人人(16*3=48)女人人数,最多女人人数,最多23人人(24*2=48)小孩人数小孩人数=30-man-women26运行结果:运行结果:man=1 women=18 chile=11man=2 women=16

22、 chile=12man=3 women=14 chile=13man=4 women=12 chile=14man=5 women=10 chile=15man=6 women=8 chile=16man=7 women=6 chile=17man=8 women=4 chile=18man=9 women=2 chile=192728概念概念一个循环体内又包含另一个完整的循环结构,称为循环嵌套。一个循环体内又包含另一个完整的循环结构,称为循环嵌套。 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16举例举例打印乘法口诀表。打印乘法口诀表。 #include void ma

23、in() int i,j; for (i=1;i=4;i+) for (j=1;j=4;j+) printf(%4d,i*j); printf(n); i=1,j=1 1*1 j=2 1*2 j=3 1*3 j=4 1*4i=2,j=1 2*1 j=2 i=3i=4for i=1 to 4输出输出i*jfor j=1 to 4换行换行5.5循环嵌套循环嵌套第六章第六章 循环循环结构程序设计结构程序设计29 1 2 4 3 6 9 4 8 12 16#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j=i;j+) printf(%4d

24、,i*j); printf(n); 5.5循环嵌套循环嵌套思考思考1第六章第六章 循环循环结构程序设计结构程序设计30#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j=5-i;j+) printf(%4d,i*j); printf(n); 5.5循环嵌套循环嵌套思考思考2 1 2 3 4 2 4 6 3 6 4第六章第六章 循环循环结构程序设计结构程序设计31#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j=4-i;j+) printf(“%4d”, ); for

25、 (j=5-i;j=4;j+) printf(“%4d”,i*j); printf(“n”); 5.5循环嵌套循环嵌套思考思考3 4 6 8 6 9 12 4 8 12 16第六章第六章 循环循环结构程序设计结构程序设计32#include void main() int i,j; for (i=1;i=4;i+) for (j=1;j=i-1;j+) printf(“%4d”, ); for (j=i;j=4;j+) printf(“%4d”,i*j); printf(“n”); 5.5循环嵌套循环嵌套思考思考4 1 2 3 4 4 6 8 9 12 16第六章第六章 循环循环结构程序设计结

26、构程序设计33举例举例例例5.16 打印乘法口诀表。打印乘法口诀表。 P95#include stdio.hint main( ) int i,j,result; for(i=1;i=9;i+) for(j=1;j=9;j+) result=i*j; /计算计算i行行j列上的元素值列上的元素值 printf(%d*%d=%-3dt,i,j,result); printf(n); return 0; resulti=1, j=1 1*1 j=2 1*2 j=3 1*3 j=9 1*9i=2, j=1 2*1 j=2 2*2 j=9 2*9i=9, j=1 9*1 j=2 9*2 j=9 9*9

27、1*1=1 1*2=2 1*9=9 2*1=2 2*2=4 2*9=18 9*1=9 9*2=18 9*9=8134#include stdio.hint main( ) int i,j,result; for(i=1;i=9;i+) for(j=1;j=9;j+) result=i*j; /计算计算i行行j列上的元素值列上的元素值 printf(%d*%d=%-3dt,i,j,result); printf(n); return 0; resulti=1, j=1 1*1 j=2 1*2 j=3 1*3 j=9 1*9i=2, j=1 2*1 j=2 2*2 j=9 2*9i=9, j=1

28、9*1 j=2 9*2 j=9 9*935举例举例例例5.17 求求Fibonacci数列的数列的前前40个数。个数。按每行按每行4个进行输出。个进行输出。#include stdio.hint main( ) int n; long f1,f2; f1=1; f2=1; printf(%10d%10d,f1,f2); for(n=1;n=3)P96 1 1 2 3 5 8 13 21 34 55 89 144 5.6 程序举例程序举例36输出下列图形:11 21 2 31 2 3 41 2 3 4 51 2 3 4 5 61 2 3 4 5 6 71 2 3 4 5 6 7 81 2 3 4

29、 5 6 7 8 9#include stdio.hint main( ) int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%3d,j); printf(n); return 0;37举例举例例例5.4 从键盘输入一个非负整数,判断从键盘输入一个非负整数,判断m是否是素数。是否是素数。 P82素数(质数)素数(质数): 只能被只能被1和它本身整除的数。和它本身整除的数。判别方法:判别方法:57:若若256之间的每一个数都不能整除之间的每一个数都不能整除57,则,则57为素数,否则为素数,否则57不是素数。不是素数。m, k=m-1,i=2k :若

30、每一个若每一个 i 的值都不能整除的值都不能整除m,则则m为素数,否则为素数,否则m不是素数。不是素数。k=m-1;k=m/2;(m+1)/2;k=sqrt(m);sqrt(m+1)flag=1;k=m-1;for (i=2;i=k;i+) if (m%i=0) flag=0; break; if (flag=1) printf(yes! );else printf(no! );k=m-1;for (i=2;i=k+1) printf(yes! );else printf(no! );38#include # include int main()int m,k,i,n=0;scanf(%d,&

31、amp;m);k=sqrt(m+1);for (i=2;i=k+1)printf(%d是素数是素数,m);elseprintf(%d不是素数不是素数,m);return 0; 39#include math.h#include stdio.hint main() int m,flag=0,i=2;printf(请输入一个非负整数:请输入一个非负整数:n);scanf(%d,&m);while(i=sqrt(m) & flag=0) if(m%i=0) flag=1; /m不是素数,修改不是素数,修改flag的值的值else i+;if(flag=0) printf(%d是素数。

32、是素数。n,m);else printf(%d不是素数。不是素数。n,m);return 0;P8240第六章第六章 顺序结构程序设计顺序结构程序设计举例:举例:求求100200之间的全部素数。之间的全部素数。for m=101 to 200判断判断m是否为素数是否为素数若若m是素数,则输是素数,则输出并统计个数出并统计个数n.每输出每输出10个个素数,素数,换行换行#include # include int main()int m,k,i,n=0;for (m=101;m=200;m+) k=sqrt(m+1); for (i=2;i=k+1) printf(%4d,m); n=n+1;

33、if (n%10=0) printf(n); return 0; if (i=k+1) printf(%4d,m); n=n+1; if (n%10=0) printf(n);?41#include /输出输出100到到200之间的素数之间的素数#include void main()int i,k,m,flag=1;for(m=100;m200;m+)k=sqrt(m);for (i=2;i=10-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出输出pi#include #include void 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=%1

温馨提示

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

评论

0/150

提交评论