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

下载本文档

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

文档简介

1,第六章 循环结构程序设计,6.1 概述 循环结构主要有: (1)用goto语句和if语句构成循环; (2)用while语句; (3)用do-while语句; (4)用for语句。,2,6.2 goto语句以及用goto语句构成循环 goto语句为无条件转向语句,它的一般形式为: goto 语句标号; (1)语句标号用标识符表示。标识符的命名规则和变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线,不能用整数来作标号; (2)goto语句通常有两种用途: 1. 与if语句一起构成循环结构; 2. 从循环体中跳转到循环体外; (3)goto语句的使用不符合结构化程序的原则,一般尽量不用,除非万不得已。,3,例6.1 用if语句和goto语句构成循环,求 main( ) int i,sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%d”,sum); ,4,6.3 while语句,一般形式: while(表达式) 内嵌语句 特点:先判断表达式,当它为真(非0 )时,再执行内嵌语句;若为假(0),则不执行内嵌语句。这样的循环结构我们称为“当型”循环结构。 流程图:,表达式,内嵌语句,非0,0,5,例6.2 求 main( ) int i,sum=0; i=1; while (i=100) sum=sum+i; i+; printf(“%d”,sum); ,说明: 1) 如果循环体不只包含一条语句,则应用花括号括起来形成一个复合语句。 2) 在循环体中应有使循环趋于结束的语句,避免出现死循环。在本例中,设置循环条件为i=100,然后有 i+ 使循环趋于结束,这样就不会出现死循环。,6,main ( ) int n = 0 ; while ( n + + = 1 ) printf (“ %d n ” , n ) ; printf (“ %d n ” , n ) ; 运行结果:,说明:(补充内容) 3) 用作循环条件的表达式可以是各种类型的表达式或数值类型。如: while(1)、while (2)、while(a) 等。 4) 小心循环变量的“边界值”,注意循环次数。对条件表达式的计算次数要比循环体的执行次数多一次。如右例:,7,main ( ) int i , sum = 0 ; i = 1 ; while ( i = 100 ) ; sum = sum + i ; i + + ; printf ( “%d” , sum ) ; 则程序将出现“死” 循环,无法得到正确结果。,此分号使 while 的循环体为空,说明: 5) 不要在 while (表达式) 后加分号。如例6.2若误写成:,8,6.4 do-while语句,一般形式: do 循环体语句 while (表达式);,循环体语句,表达式,非0,0,流程图:,9,例 6.3 用do-while语句求 main( ) int i,sum=0; i=1; do sum=sum+i; i+; while ( i=100 ); /* 别忘了,这里有分号 */ printf(“%d”,sum); ,10,讨论:while语句与do-while语句之间的异同点 1)对同一问题可以用while语句处理,也可以用do-while语句处理。do-while结构和while结构可以相互转换。我们可以认为do-while结构是由一个复合语句(while结构的循环体)加一个while结构构成。比如:,do sum=sum+i; i+; while ( i=100 );,sum=sum+i; i+; while ( i=100 ) sum=sum+i; i+; ,11,2)在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分一样,则它们的结果也一样。但是,对于while后面的表达式一开始就为0值时,两种循环结构的执行结果是不同的。 对于while语句,循环体可能一次也不执行;而do-while语句,循环体至少要执行一次。 对于while语句,循环体的执行次数要比循环条件的判断次数少一次;而do-while语句,循环体的执行次数和循环条件的判断次数是相同的。,12,6.5 for语句,一般形式: for (表达式1; 表达式2; 表达式3) 语句,for (表达式1; 表达式2; 表达式3) 语句,执行过程:,13,求解表达式1,求解表达式2,真,语句,求解表达式3,假,for语句的 下一语句,流程图:,14,例:for(i=1;i=100;i+) sum=sum+i;,i=1,i=100,真,sum=sum+i,i+,假,15,说明: (1)表达式1可以省略,此时应在for语句之前给循环变量赋初值(设定循环初始条件)。比如: for(i=1;i=100) break; ,16,(3)表达式3可以省略,但此时应另外设法修改循环变量,保证循环能正常结束。比如: for(i=1;i100) break; ,17,(5)表达式1、2、3都可以为任何表达式。比如:表达式1和表达式3可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。 例1:for(i=1,sum=0; i=100; i+) sum=sum+i ;,例2:for(i=0; (c=getchar()!=n; i+) ; /* 分号不能少*/ 请问:此语句的作用是什么?,此语句的作用是不断读入字符,并统计所输入字符的个数,直到输入一个“换行符”为止。,18,请问:int i, j, k=0; for(i=1,j=100; i=j; i+,j - -) k=i+j ; printf(“%d,%d,%d”,i, j, k); 输出结果是什么?循环体可以被执行多少次?,19,例如:int i, j, k=0; for(i=0,j=100; i=j; i+,j - -) k+=i+j ; printf(“%d,%d,%d”,i, j, k); 输出结果是什么?循环体可以被执行多少次?,20,讨论:for语句与while语句之间的异同点 1)for语句简单、方便,使用灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以取代while语句。在使用上,for语句更灵活,功能更强。 2)for语句和while语句之间是可以相互转换的。当省略for语句的表达式1、3,而只给出表达式2时,就等同于一个while语句。比如:,for ( ; i =100; ) sum=sum+i ; i+ ; ,while ( i =100 ) sum=sum+i ; i+ ; ,21,6.6 循环的嵌套,C语言中,允许三种循环结构(while循环、do-while循环和for循环)相互嵌套和进行多层嵌套。 例如: for( i=0; i10; i+) for( j=0; j10; j+) for( k=0; k10; k+) printf(“i=%d, j=%d, k=%dn”,i,j,k); 此程序运行后,屏幕上将输出多少行信息? 这些信息分别是什么?,22,6.7 四种循环结构之间的比较(前已提及),6.8 break语句和continue语句,6.8.1 break语句 一般形式: break; 作用:只能用于循环结构和switch结构,使执行流程从相应结构中跳出,程序继续往后执行。,例:for(r=1;r100) break; printf(“%f”,area); ,23,6.8.2 continue语句 一般形式: continue; 作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环体的判断。 contiune语句和break语句的区别是: contiune语句只是结束本次循环,即跳过本次循环体中下面尚未执行的部分;而break语句是终止整个循环,即退出循环结构。 详细的流程图分析,可参见教科书P115之图6.10和图6.11. 例如:,24,例6.5 输出100200之间的不能被3整除的所有数; main ( ) int n; for (n=100;n=200;n+) if (n%3=0) continue; printf(“%d ”,n); ,25,6.9 程序举例,例 6.6 用 求 的近似值,直到最后一项的绝对值小于10-6为止。N-S流程图见左下方。,变量说明: s为分子,也用来切换正负号; n为分母; t为相加项;,26,源程序如下:,#include 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); ,注意几点: 1、s 和n 可同时定义为int 或者float 型吗?为什么? (P116.c) 2、若将n、t、pi 定义为double 型,精度提高到1e 8 ,会有什么效果? (P116_2.c),27,例6.7 求Fibonacci数列的前40个数。 Fibonacci数列通式为:,例如,前面几项分别为: 1, 1, 2, 3, 5, 8, 13, 这是一个古典的数学问题,比较简单。在P116117和P124均有论述。 请同学们掌握。,N-S 流程图为:,28,源程序为:,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; /* 后一个数 */ ,29,例6.8 判断m是否为素数。,定义:m 是素数的条件是不能被2,3, , m-1整除。这也是素数的原始定义。据此,有如下判断素数的算法:,算法1:直接采用定义,用m去除以2 到m-1 。但是,当m很大时此算法的运算量也很大,效率不高。,30,源程序如下:,#include main( ) int m,i,k; scanf(“%d”, ,31,例6.10 译密码。对字符的处理办法为: 先判定它是大写字符还是小写字符,然后再将其值加4,变成其后的第四个字母。如果加4后字符值大于Z或z,则在加4的基础上减去26,转换为字母表前面的字母。 (参见P119图6.15),#include main (

温馨提示

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

评论

0/150

提交评论