教学课件PPT循环结构程序设计.ppt_第1页
教学课件PPT循环结构程序设计.ppt_第2页
教学课件PPT循环结构程序设计.ppt_第3页
教学课件PPT循环结构程序设计.ppt_第4页
教学课件PPT循环结构程序设计.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第6章 循环结构程序设计,follow me!,6.1 概述 循环结构是程序中一种很重要的结构。其特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 语言提供了多种循环语句,可以组成各种不同形式的循环结构。 1goto语句与if语句构成的循环 2while循环 3dowhile循环 4for循环,6.2 goto语句和gotoif循环,1. goto语句(无条件转向语句) 格式:goto 语句标号; 例: goto label1; 说明(1)goto语句使程序的执行方向转到语句标号所在的语句。 (2)语句标号的命名规则同变量 2.goto语句的用途 (1)与if构成循环; (2)从循环体内跳出; 注意:使用goto语句跳转不符合结构化的编程思想,应尽量限制使用。,#include void main() int x; scanf(“%d”, ,求和的一般方法: 设置存放和的变量sum,初始置0; 输入要加的数x; sum=sum+x; 是否继续?是,转;否,转 打印sum 求积的一般方法: 设置存放和的变量sum,初始置1; 输入要加的数x; sum=sum*x; 是否继续?是,转;否,转 打印sum,例:用if和goto求 #include void main() int i,sum=0; i=1; loop:if(i=100) sum=sum+i; i+; goto loop; printf(“n%dn”,sum);,1.语法:while(表达式)循环体语句 2.执行过程:计算表达式的值,当值为真(非0)时, 执行循环体语句。 也叫前测试循环或当型循环。,6.3 while语句,3. 注意 (1)如果循环体中有多个语句,一定要用花括号括起,否则循环只到第一个分号处,即到while后面的第一个语句。 (2)循环体中的语句必须能够使条件表达式由“真”变“假”,否则循环为死循环。 (3)允许while语句的循环体又是while语句,从而形成双重循环。,练习: 选择下列程序的运行结果: #include main() int n=4; while (n-) printf(“%d”,-n); a)2 0 b)3 1 c)3 2 1 d)2 1 0,#include void main() int i, sum=0; i = 1; while (i=100) sum+=i; i+; printf(“n%d”, sum); 如果求100!呢?如果求n!呢?求任意个数的和?,计算1100之间数 的累加和,循环条件,内复合语句构成循环体,求n! #include void main() int i=1,n, sum=1; scanf(“%d”, ,求任意个数的和 #include void main() int i, sum=0,n,x; i = 1; scanf(“%d”,求1100内能被5整除的整数的个数。 #include void main() int i, count=0; i = 1; while (i=100) if (i%5=0) count+=1; i+; printf(“n%d”, count); ,1.语法: do 循环体语句 while(表达式); 2.执行过程:先执行循环体语句一次, 再判别表达式的值,若为真(非0)则继续循环,否则终止循环。 也叫后测试循环或直到型循环。,表达式?,语句,真,假,6.4 do-while语句,3. 注意: (1)在if语句、while语句中, 表达式后面都不能加分号, 而在 do-while语句的表达式后面则必须加分号。 (2)do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。 (3)在do和while之间的循环体由多个语句组成时,必须用括起来组成一个复合语句。 (4)do-while和while语句相互替换时,但要注意修改循环控制条件。,求1100的整数和 main() int i=1,sum=0; while(i=100) sum+=i; i+; printf(“%dn”,sum); ,main() int i=1,sum=0; do sum+=i; i+; while(i=100); printf(“%dn”,sum);,无论条件满足否,都先执行一次循环体,2.执行过程: (1)计算表达式1的值。 (2)计算表达式2的值,若值为真(非0),则执行循环体一次, 否则跳出循环。 (3)计算表达式3的值,转回第2步重复执行。 在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能多次执行,也可能一次都不执行。,6.5 for语句,1.语法:for(表达式1;表达式2;表达式3)语句,说明: (1)最简单的应用形式: for(循环变量赋初值;循环条件;循环变量增值) 例如:for(i=1;i=10;i+) sum=sum+i; (2)三个表达式均可缺省,但起分割作用的两个分号不可省略。 例如:for( ; ; ) i=1;for(;i=10;i+) sum=sum+i; 或 for(i=1;i=10;) sum=sum+i;i+; 表达式1省略,应在for之前对循环变量赋初值 表达式2省略,则不判断条件,循环无终止进行下去 表达式3省略,则应另设法保证循环的结束,(3)表达式1和表达式3可为逗号表达式 例如:for(i=1,j=10;i=j;i+,j-) k=i+j; 执行结果见6-1.c,练习:阅读程序,选择正确答案。 #include main() int i; for (i=4;i=10;i+) if (i%3=0) continue; printf(“%d”,i); a)45 b.)457810 c)69 d)678910,练习:阅读程序,选择正确答案。 #include main() int i=0,j=0,k=0,m=4; for (m=0;m4;m+) switch (m) case 0:i=m+; case 1:j=m+; case 2:k=m+; case 3:m+; printf(“n%d,%d,%d,%d”,i,j,k,m); a)0,0,2,4 b)0,1,2,3 c)0,1,2,4 d.)0,1,2,5,例题1:求和s=1-1/2+1/3-1/4+1/n,n由键盘输入。,这个级数的各项正负不相同。 解题方法:让变量t的初值等于1,然后反复执行语句t=-t,则t的值就在1和-1之间交替变化。 main( ) int i ; double s, t; scanf(“%d”, ,6.6 循环的嵌套 一个循环体内又包含另一个完整的循环结构,叫循环的嵌套。不同语句构成的循环也可以相互嵌套。 (1)while ( ) . while ( ) . ,(2) for (; ;) . while ( ) . ,for 语句的循环体还可为另一个循环语句 例如:,for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d”,i+j); printf(“n”); output: 2 3 3 4,for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d”,i+j); printf(“n”); output: 2 3 3 4,6.7 几种循环的比较 1. 不提倡使用goto循环。 2.for循环比while、do-while循环功能更强。 3.while、do-while语句中,循环变量初始化应在循环语句之前完成。for循环可以在其中完成。 4.while、do-while和for循环,可以用break语句跳出循环,用continue语句结束本次循环。而goto和if构成的循环不能。,6.8 break语句和continue语句 break语句:强制结束循环,转向循环语句下面的语句。 break可以跳出switch结构,break语句还可以跳出最近的一层循环。 for (r=1; r100) break; printf(“%f”, area); 注意:break语句不能用于循环语句和switch语句以外的任何其它语句。,continue语句 对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,转向循环继续条件的判定语句。 continue语句和break语句的区别:continue只结束本次循环,而不是终止整个循环;break是结束本层循环,不再进行条件判断。 while (表达式 1) . if (表达式 2) break; . ,while (表达式1) . if (表达式 2) continue; ,例1: 公式求pi的近似值,直到最后一项的绝对值小于10-6为止。 #include #include void main() int s; float n, t, pi; t=1; pi=0; n=1.0;s=1;,while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(“pi=%10.6fn“,pi); ,6.9 程序举例,例2: 求fibonacci数列的前40个数,即 f1=1 (n=1) f2=1 (n=2) fn=fn-1+fn-2 (n=3) #include void main() long int f1, f2; int i; f1=1; f2=1;,for ( i=1; i=20; i+) printf(“%12ld %12ld “,f1,f2); if (i%2=0) printf(“n“); f1=f1+f2; f2=f2+f1; ,说明: (1)i每取一个值打两个数,220=40; (2)每打两个数换行。,例3:译码。字母转换为其后第4个字母,非字母不变。 #include void main() char c; while (c=getchar()!=n) if (c=a ,按回车停止译码,如果是后四个字母,例4:求100200之间全部素数。 判断m是否素数的规则是:m不能被2到根号2之间所有整数整除。 #include #include main() int m,k, i,n=0; for (m=101;m=200;m=m+2) k=sqrt(m);,for (i=2; i=k+1) printf(“%d”,m);n=n+1; if (n%10=0)printf(“n”); printf(“n”); ,例5:求10个数中的最大数。 #include void main() int i=1,x, max; scanf(“%d”, ,输入第一个数,第一个数送max,依次输入第二到第10个数,每输入一个数,与max比较,使max中始终存放大的数,例6-1:打印图形(矩形) #include void main() int i, j; for (i=1;i=4;i+) for (j=1;j=10;j+) printf(“*”); printf(“n”) ,打几行,每行打几列,打完一行换行,* * * *,i=,1 2 3 4,j,12345678910,例6-2:打印图形(平行四边形) #include void main() int i, j,k; for (i=1;i=4;i+) for (k=1;k=i;k+) printf(“ ”); for (j=1;j=10;j+) printf(“*”); printf(“n”) ,打几行,每行打几列,打完一行换行,每行前空多少,* * * *,例6-3:打印图形(三角形) #include void main() int i, j,k; for (i=0;i=3;i+) f

温馨提示

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

评论

0/150

提交评论