C程序设计-第五章.ppt_第1页
C程序设计-第五章.ppt_第2页
C程序设计-第五章.ppt_第3页
C程序设计-第五章.ppt_第4页
C程序设计-第五章.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第4章 循环结构程序设计,C 语言程序设计,主讲:王广正,,2019/9/10,2,程序的三种基本结构,顺序结构,选择结构,循环结构,直到型循环,当型循环,2019/9/10,3,本章主要内容,用goto语句实现循环控制 while循环控制 do-while循环控制 for循环控制 循环的嵌套 break语句和continue语句 循环结构程序设计举例,2019/9/10,4,用goto语句实现循环,【例】用if语句和goto语句实现循环,求 #include void main() int I,sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%dn”,sum); ,goto语句为无条件转向语句,一般形式为: goto 语句标号;,2019/9/10,5,用goto语句实现循环(续),有兴趣的同学自学 不提倡使用goto语句,注意: goto语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破坏程序的结构化程度。因此应限制使用。,2019/9/10,6,5.2 while循环,语句一般格式 while (表达式) 语句,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式 用来控制循环体是否执行,称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句 是循环重复执行的部分,2019/9/10,7,功能:,计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行while后面的语句。,循环控制条件,循环体,2019/9/10,8,例如:,【例5.1】编写程序,求100个自然数的和 即: s=1+2+3+ +100,思路:寻找加数与求和的规律,加数i从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。 求和设变量 sum 存放和,sum的初值设为0,循环求sum=sum+i,直至i超过100。,2019/9/10,9,算法和程序:,main( ) int i,sum; i=1; sum=0; while (i=100) sum=sum+i; i+; printf(“sum=%dn“,sum); ,程序输出结果: sum=5050,i: 循环控制变量 sum: 累加器,2019/9/10,10,注意:,如果while的 (表达式) 值为0,则循环体一次也不执行 (例如当i的初值=101) 。 在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。 在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,思考程序段的输出? while (i=100) i+; sum=sum+i; ,运行后,输出: sum=5150 原因是什么?,2019/9/10,11,注意(续):,循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。如果不加花括号,则while语句的范围只到while后面的一个分号处。,思考程序段的输出? while (i=100) sum=sum+i; i+; ,2019/9/10,12,5.3 do-while循环,语句一般格式 do 语句 while (表达式); 功能: 先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。,2019/9/10,13,do-while循环举例,main( ) int i=1,s=0; do s+=i;i+; while(i=5) printf(“%d,%dn”,i,s) ,i=5?,s=s+i,i=i+1,否,结束,i=1,s=0,循环体,i=1,s=0,s=1,i=2,s=3,i=3,s=6,i=4,s=10,i=5,s=15,i=6,引例:求15累加和程序的执行过程如下:,2019/9/10,14,do-while循环的算法,引例:求15累加和程序的执行过程如下:,i=1,s=0,s=1,i=2,s=3,i=3,s=6,i=4,s=10,i=5,s=15,i=6,main( ),int i,s;,while(i=5),s+=i;i+;,printf(“%d,%dn”,i,s);,i=1,s=0;,i=1,s=0,i=5?,s=s+i,i=i+1,是,否,结束,循环体,2019/9/10,15,说明:,while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构,区别: do- while 语句先执行循环体再判断条件,循环体至少执行一次; while 语句先判断条件再执行循环体,循环体有可能一次也不执行 dowhile循环体中也一定要有能否则会出现使表达式值趋于0的操作(如i+),死循环。,2019/9/10,16,5.4 for循环,语句一般格式 for (表达式1;表达式2;表达式3) 语句,功能: 计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。,循环初始条件,循环控制条件,循环体,2019/9/10,17,例如:求15的累加和.,main( ) int i,s=0; for(i=1;i=5;i+ +) s+=i; printf(“%d,%dn”,i,s) ,i=5?,s=s+i,i=i+1,是,否,结束,s=0,i=1,表达式1,表达式2,循环体,表达式3,s=0,i=1,s=1,i=2,s=3,i=3,s=6,i=4,s=10,i=5,s=15,i=6,for (循环变量赋初值;循环条件;循环变量增值) 语句,更为通俗的表示:,2019/9/10,18,说明:,所有用 while 语句实现的循环都可以用for 语句实现。,等价于:,for(表达式1;表达式2 ;表达式3) 语句;,表达式1; while (表达式2) 语句; 表达式3; ,2019/9/10,19,举例:,main( ) int i,sum; sum=0; for ( i=1; i=100; i+) sum=sum+i; printf(“sum=%dn“,sum); ,【例】将如下的for循环转换成while循环?,2019/9/10,20,几种for语句中表达式的省略情况, 表达式1、2、3全省略,即: for ( ; ; ) 就等同于:while (1),会无限循环(死循环),注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行, 省略表达式1和表达式3,即: for(;表达式2;) 就等同于:while( 表达式2 ) 省略表达式2,即: for(表达式1; ;表达式3) 就等同于:表达式1; while(1)表达式3;,2019/9/10,21,例如:用for 语句编程序求n 1=n=100的整数. main() /*ep5_3.c*/ int i,sum=0; for (i=1;i=100;i+) sum+=i; printf(“%dn“,sum); 或者,main() /*求n 1=n=100的整数ep5_3.c*/ int i=0,sum=0; for (;i100;sum+=+i); printf(“%dn“,sum); 或者:,main() /*求n 1=n=100的整数ep5_3.c*/ int i=1,sum=0; for (;i=100; sum+=i+); printf(“%dn“,sum); ,2019/9/10,22,例如:求100以内的奇数,并输出; main( ) int x=1; for (;x100;x+,x+) printf(“x=%3d”,x); if(x%5=0) printf(“n”);/*每打印5个数换一行*/ ,或者 main( ) int x=1; for (;x100;x=x+2) printf(“x=%3d”,x); if(x%5=0) printf(“n”);/*每打印5个数换一行*/ ,2019/9/10,23,熟悉几个循环语句,while (!x) x+; 当 x=0 时,执行循环体x+;,while (c=getchar( ) != n) n=n+1; n 称为计数器,作用是统计输入字符的个数 while (num+5); 先执行循环体x*=-3,再判断条件(x5) for (n=0; n26; n+) printf(“%c “, n+A); 作用是输出26个大写字母 for (sum=0, i=1; i=100; sum=sum+i, i+=2) ; 作用是计算100以内的奇数和,2019/9/10,24,几种循环语句的比较,while和do-while语句的表达式只有一个,for语句有三个。 while 和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。,while语句多用于循环次数不定的情况 do-while语句多用于至少要运行一次的情况 for语句多用于要赋初值或循环次数固定的情况,2019/9/10,25,5.6循环结构中的跳转语句,有如下三种语句实现跳转: continue语句 break语句 在循环语句的循环体中使用,可以进行循环的流程控制,2019/9/10,26,continue语句及应用,功能: 中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。,while语句,do-while语句,for语句,2019/9/10,27,例如:, int x,n=0,s=0; while (n10) scanf(“%d“, int x,n=0,s=0; do scanf(“%d“, for (n=0,s=0; n10; n+) scanf(“%d“, ,2019/9/10,28,应用举例,【例】把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。,2019/9/10,29,算法和程序,main( ) int n,j=0; for(n=100;n=200;n+) if (n%7!=0) continue; printf(“%6d“,n); j+; if (j%10=0) printf(“n“); printf(“ n j=%dn“,j); ,2019/9/10,30,循环中break的应用,功能: 利用break语句能够强迫终止本层循环,转到后续语句执行。,while语句,do-while语句,for语句,2019/9/10,31,例如:, int x,n=0,s=0; while (n10) scanf(“%d“, int x,n=0,s=0; do scanf(“%d“, for (n=0,s=0; n10; n+ ) scanf(“%d“, ,2019/9/10,32,5.7 程序举例,【例1】按每行输出5个数的形式输出Fibonacci数列的前20项 。,思路:Fibonacci数列的前几项是:1、1、2、3、5、8、13、21、34、。此数列的变化规律是:,设变量f1、f2和f3,并为f1和f2赋初值1,令f3=f1+f2得到第3项; 将f1f2, f2f3,再求f3=f1+f2得到第4项; 依此类推求第5项、第6项,这是一种递推算法 应采用循环实现,2019/9/10,33,算法和程序,#define N 20 main( ) int i,f1,f2,f3; f1=f2=1; printf(“n%8d%8d“,f1,f2); for (i=3; i=N; i+) f3=f1+f2; f1=f2; f2=f3; printf(“%8d“,f3); if (i%5=0) printf(“n“); ,2019/9/10,34,举例2,【例2】判断输入的某个数m是否为素数。若是素数,输出“YES”,若不是,输出“NO”。,思路:素数是指只能被1和它本身整除的数,如5、7、11、17、等。,分别用2、3、,m-1尝试能否整除整数m。如果m能被某个数整除,则m就不是素数。,这是一种穷举算法 设除数为j,从2循环到m-1,2019/9/10,35,算法和程序:,#include “math.h“ main( ) int j,m,k; printf(“Enter an integer number: “); scanf(“%d“, ,2019/9/10,36,课堂练习:,1.下列程序的输出结果是: A)x=4 B)x=8 C)x=6 D)x=12 main( ) int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if (j%2) continue; x+; x+; printf(“x=%dn”,x); ,2.下列程序的输出结果是: main( ) int i,j,k=0,m=0; for(i=0;i2;i+) for(j=0;j3;j+) k+; k-=j; m=i+j; printf(“k=%d,=%dn”,k,m); ,3.下列程序的输出结果是: main( ) int k=10; while(k - -); printf(“k=%dn”,k); ,4.下

温馨提示

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

评论

0/150

提交评论