C语言循环结构一章ppt课件_第1页
C语言循环结构一章ppt课件_第2页
C语言循环结构一章ppt课件_第3页
C语言循环结构一章ppt课件_第4页
C语言循环结构一章ppt课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 循环结构,1、用goto语句和if语句构成循环。 2、用while语句。 3、用do-while语句。 4、用for语句。,If语句和goto语句构成的循环,一般形式:goto 语句标号; 作用:无条件转向语句标号处执行 语句标号:合法的标识符后面加个冒号”:” 语句标号必须于此goto语句在同一个函数中 goto语句不符合结构化程序设计准则,因为无条件转向使程序结构无规律、可读性差。一般应避免使用goto语句,但如果能大大提高程序的执行效率,也可以使用。,Example 5_1,#include main() int x; x = 3; ab: x+=2; /* ab: 语句标号 只

2、能写在语句行的最左边*/ if( x20 ) goto ab; printf(%dn,x); ,while 语句,一般形式:while(表达式) 语句 作用:实现“当型”循环。当“表达式”非0(真)时,执行“语句”。“语句”是被循环执行的程序,称为“循环体”。 特点:先判“表达式(条件)”。,注意事项,while后面的”()”不能少 表达式的可以使任意合法的表达式 语句的位置上只能有一条语句, while语句范围只到while后面第一个分号处。超过一条用“”括起来 while语句的循环体可能一次都不执行 循环体中必须有使循环趋于结束的语句,否则程序进入“死循环”(不结束)。,求1100的累计和

3、。 根据已有的知识,可以用“1+2+100”来求解,但显然很繁琐。现在换个思路来考虑: 首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次取1、2、100),只要解决以下3个问题即可: (1)将n的初值置为1; (2)每执行1次“sum += n”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1100的累计和。,Example 5_2 计算,#include main() int i,sum=0; i = 1; while (i = 100) sum = sum + i; i+; printf(%d,sum); ,Example 5_3 输入两个整数

4、x和y,计算x和y之间所有的偶数之和 main() int x,y,sun,t; printf(”请输入两个整数(前大后小):” ); scanf(”%d%d”, ,do while语句,一般格式:do语句(循环体)while(表达式); 特点: “直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达式”非0,再执行“语句”,直到“表达式”为0,循环结束。,do while 注意点,do后面没有分号; 语句的位置上只能到第一个分号处,也就是只能有一条语句,超过用构成复合语句 表达式可以是任意表达式,Example 5_4 计算n以内所有能被3整除或者能被7整除的自然数之和 /*从3开始

5、,各个自然数i逐个进行比较,直到自然数i不小于n则循环结束*/ #include stdio.h main() int n,i,s; printf(请输入一个整数:); scanf(%d, ,while和do-while循环的比较,main( ) int i,s=0; scanf(“%d”, 运行情况如下:,main( )int i,s=0;scanf(“%d”, 运行情况如下:,说明,在一般情况下,用while和do-while语句解决同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但当while后面的“表达式”一开始就为“假”时,两种循环的结果不同。这是因为此时while循环的循

6、环不被执行,而do-while循环的循环体被执行一次。,for语句,一般格式for(表达式1;表达式2;表达式3) 语句,循环变量赋初值,循环条件,循环变量增量,循环体部分,执行过程: (1)求表达式1; (2)求表达式2,若为“真”,执行“语句”;若为假,转第(5)步。 (3)求表达式3。 (4)转第(2)步。 (5)执行for语句下面的语句。,Example 5_5 计算n以内所有自然数之和 #include stdio.h main() int n,i,s; printf(请输入一个整数:); scanf(%d, ,for语句说明,(1)for 语句中条件测试总是在循环开始时进行;如果循

7、环体部分是多个语句组成的,则必须用左、右花括号括起来,使其成为一个复合语句。,(2) for语句中的表达式1和表达式3即可以是一个简单的表达式,也可以是逗号连接的多个表达式,此时的逗号作为运算符使用。 如:for(s=0,i=1;i=100;i+) s=s+i; 或:for(i=1,j=100;i=j;i+,j-) k=i+j; 在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如: for(i=1;i=100;i+,i+) s=s+i; 相当于: for(i=1;i=100;i=i+2) s=s+i;,(3)for语句的一般形式中的“表达式1”可以省略,此时应在f

8、or语句之前给循环变量同赋初值。注意省略表达式1时,其后的分号不能省略。 如: for(;i=100;i+) s=s+i; 执行时,跳过“解表达式1”这一步,其它不变。,(4)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。 例如: for(i=1; ;i+) s=s+i; 相当于: i=1; while(1) s=s+I; i+;,(5) 表达式3也可以省略,但此时程序设计应另外设法保证循环能正常结束。如: for(i=1;i=100;) s=s+I; i+; ,(6) 可以省略表达式1和表达式3,只有表达式2,即只给循环条件。 例: for(;i=10

9、0;) s=s+i; i+; 相当于: while(i=100) s=s+i; i+;,(7)3个表达式都可以省略,如: for(; ; ) 语句 相当于: while(1) 语句 即不设初值,不判断条件(认为表达式2为真值),循环变量不增值,无终止地执行循环体。,(8)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其它表达式。如: for(s=0;i=100;i+) s=s+i; 表达式3也可以是与循环控制无关的任意表达式。 (9) 表达式2一般是关系表达式(如i=100)或逻辑表达式(如ab ,while (表达式1) if (表达式2) break; ,for(r=

10、1;r 100) break; printf(%f,aera); ,几种循环的比较,1、四种循环(while、do-while、for、goto)可以互相替换,但应尽量少用goto。 2、循环条件:while、do-while在while后面指定;for循环在“表达式2”中指定。 3、循环初始条件:while、do-while在循环前指定;for循环在“表达式1”中指定。 4、判循环条件的时机:while、for循环先判循环条件,后执行;do-while循环先执行,后判循环条件。 5、while、do-while、for循环均可用break语句跳出循环(结束循环),用continue语句提前结

11、束本次循环体的执行。,Example 5_6 输入一个整数x,判断该数是否是合数 质数(素数):只能被1和它本身整除的自然数 合数:除了1和它本身外,还存在能整除它的数,#include stdio.h main() int x,i; printf(请输入一个整数:); scanf(%d, ,Example 5_7输入一个整数,计算该数的因子(不包括自己的因数)之和 #include stdio.h main() int x,i,s; printf(请输入一个整数:); scanf(%d, ,Example5_8/*输出所有的“水仙花数”,所谓的水仙花数是指一个三位数,该数各个位数上的立方和等

12、于它本身*/ /*方法:穷举法 列举法 对所有有可能满足条件的数据逐个进行判断,找出符合题目意思的数据 确定有可能满足条件的范围*/ #include stdio.h main() int i,g,s,b; for(i=100; i1000; i+) /*对所有的三位数逐个进行判断*/ /*计算出i的个位数,十位数,百位数*/ g=i%10; /*i的个位数*/ s=i/10%10; /* i的十位数 */ b=i/100%10; /* i的百位数 */ /* 判断i与个位数的立方+十位数的立方+百位数的立方是否相等*/ if( i=g*g*g+s*s*s+b*b*b ) printf(%d是

13、个水仙花数n,i); ,Example 5_9 输出九九乘法表 #include stdio.h main() int i,j; for(i=1;i10;i+) /*总共有9行,第i行*/ /* 第i行有i列 */ for(j=1;j=i; j+) printf(%2d*%d=%-2d,j,i,i*j); printf(n); /*输出换行*/ ,Example 5_10输入一个n,输出n行*,其中第几行就有几个图形如下 main() int i,j,n; printf(请输入一个数:); scanf(%d, ,输入一个n,输出n行,每行有若干个.和若干个*,如下图 #include stdi

14、o.h main() int i,j,n; printf(请输入一个数:); scanf(%d, ,以下程序运行结果是_ #include main() int i = 5; do if(i%3=1) if(i%5=2) printf(“*%d”,i); break; i+; while(i!=0); printf(“n”) A)*7B)*3*5C)*5D)*2*6,以下不构成无限循环的语句或语句组是,A) n=0; do+n;while(n=0),B) n=0; while(1)n+;,C) n=10; while(n);n-;,D) for(n=0,i=1; ;i+)n+=1,以下程序运行

15、结果是_ #include main() int i,j; for(i=3,i=1;i-) for(j=1;j=2;j+) printf(”%d”,i+j ); printf(”n” ); ,A)2 3 4 3 4 5,B)4 3 2 5 4 3,C)2 3 3 4 4 5,D)4 5 3 4 2 3,有以下程序运行后的结果是_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); A) x=4 B) x=8 C) x=6 D) x=12,有以下程序运行后的结果是_

16、#include main()int i;for(i=0;i3;i+)switch(i)case 0:printf(“%d”,i);case 2:printf(“%d”,i);default:printf(“%d”,i); A) 02111 B) 021021 C)000122 D)012,以下程序的输出结果是_#include main() int k=0,m=0;int i,j;for(i=0;i2;i+)for(j=0;j3;j+) k+;k-=j; m = i+j; printf(“k=%d,m=%d”,k,m); A)k=0,m=3 B)k=0,m=5 C)k=1,m=3 D)k=1,m=5,以下程序运行后输出的结果是_ main() int i,j;for(i=1;i4;i+)for(j=i;j4;j+) printf(“%d*%d=%d”,i,j,i*j);printf(“

温馨提示

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

评论

0/150

提交评论