第6章循环结构程序设计学习资料

上传人:yuzo****123 文档编号:137405175 上传时间:2020-07-08 格式:PPT 页数:35 大小:194KB
返回 下载 相关 举报
第6章循环结构程序设计学习资料_第1页
第1页 / 共35页
第6章循环结构程序设计学习资料_第2页
第2页 / 共35页
第6章循环结构程序设计学习资料_第3页
第3页 / 共35页
第6章循环结构程序设计学习资料_第4页
第4页 / 共35页
第6章循环结构程序设计学习资料_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《第6章循环结构程序设计学习资料》由会员分享,可在线阅读,更多相关《第6章循环结构程序设计学习资料(35页珍藏版)》请在金锄头文库上搜索。

1、第6章 循环结构程序设计,循环结构可以完成重复性、规律性的操作.在人们所需处理的运算任务中,常常需要用到循环,例如:1100的累加和等。在语言中有三种循环语句:while、dowhile、for。用goto语句和if语句也能构成循环。 6.1 goto语句 goto语句 为无条件转向语句。 格式:goto ; 功能:程序执行到goto语句时,转到语句标号指定的语句去执行。,说明: (1)语句标号必须用标识符表示,不能整数作为标号。 (2)与if语句一起构成循环结构。 例题6.1 求s=1+2+3+100 main() int i=1,s=0; loop: if(i=100) /* loop是一

2、个语句标号*/ s=s+i; i+; goto loop; printf(“s=%dn”,s); ,6.2 for语句,注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。 6.2 for语句 1for语句的一般格式 for(变量赋初值;循环继续条件;循环变量增值) 循环体语句组;,2for语句的执行过程,(1)求解“变量赋初值”表达式。 (2)求解“循环继续条件”表达式。如果其值非0,执(3) ;否则,转至(5)。 (3)执行循环体语句组, (4)求解“循环变量增值”表达式,然后转向(2)。 (5)执行for语句的下一条语句。 例如:f

3、or (n=1;n=20;n+) s=s+n;,3说明,(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。 i=1; for(;i=100;i+) s=s+i; for中缺省变量赋初值,但是在for前面要有i=1; for(i=1; ;i+) s=s+i; for中缺省“循环继续条件”,相当于条件永远为真,无限循环。 for( ; ; ) 语句; 全部缺省即不设初值,不判断条件,循环变量不增值。无终止地执行循环体。,3说明,(2)当循环体语句组仅由一条语句构成时,可以不使用 号括,但是当循环体语句组由多条语句构成时必须用 号括起来。 (3

4、)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。 例如: for(sum=0,i=1;i=100;i+) sum += i; (4)“循环继续条件”部分是一个逻辑量,除一般的关系表达式(如 n=20)或逻辑表达式(ab (c=getchar()!=n; n+=c); 在循环继续条件中先从键盘接收一个字符给c,然后判断值是否不等于n(换行符),如果不等于,就执行循环体,此语句最后有“;”说明循环体为空语句,所以执行n+=c即把字符的ASCII码累加存入n变量。 此语句的作用是:不断输入字符,将它们的码相加,直到输入一个“换行”符为止

5、,例题,例题6.2 求1100的累计和。 /*程序功能:求1100的累计和*/ main() int i,sum=0; /*将累加器sum初始化为0*/ for(i=1; i=100; i+) sum += i; /*实现累加*/ printf(sum=%dn,sum); ,程序运行情况如下: sum=5050,例题,例题6.3 求t=1*2*3*4*5*n main() int n, i; double t=1.0; /*所求累乘值很大,所以用double型且初始化为1 */ printf(“input n:”); scanf(“%d”, /*用指数形式输出双精度类型的t变量的值*/ ,运行

6、结果: input n: 5 t=1.200000e+02 此程序t 放的是n!,当n较大时阶乘数会很大,所以定义为double型。,例题,例6.4 求s=1+1/2+1/3+1/n main() int i,n; float s=1; printf(“input n:”); scanf(“%d”, ,此程序注意求1/2、1/3时,如果两个操作数都是int型,完成的是整除得0,则最后s的是1,这是错误的。应使除数和被除数其中有一个为实型才可以,如:s=s+1.0/i;或i定义为float,则 s=s+1/i。,运行结果: input n:4 s=2.083333,6.3 while语句,(1)

7、一般格式 while(循环继续条件) 循环体语句组; (2)执行过程,例题,例题6.5用while语句求1100的累计和。 main() int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i=100 ) sum += i;/*实现累加*/ i+;/*循环控制变量i增1*/ printf(“sum=%dn”,sum); ,此程序while 语句的循环体有两个语句sum += i; i+;所以要用 号括起来以复合语句形式出现。,程序运行情况如下: sum=5050,6.4 do while 语句,1一般格式 do 循环体语句组; while(循环继续条件);

8、/*本行的分号不能缺省*/,例题,例题6.6 用do-while语句求解1100的累计和。 main() int i=1, sum=0; /*定义并初始化循环控制变量i,以及累计器sum*/ do sum += i; /*累加*/ i+; while(i=100);/*循环继续条件:i=100*/ printf(“sum=%dn”,sum); ,程序运行情况如下: sum=5050,例题,例题6.7统计从键盘上输入整数的个数(输入0时结束,0不计在内) main( ) int n,x=0; do scanf(“%d”, ,运行结果及分析,运行情况: 2 4 6 34 0 x=4 此程序用do

9、while语句一开始不做判断进入循环,用scanf()输入整数,输入一个整数,x加一次1,然后判断是否输入的是表示结束的0,一直重复直到输入0停止循环。由于do while语句是后判断循环继续条件,最后输入的0也计算在个数内,所以输出时,要输出x-1的值。,例题,例题 6.8 while和 dowhile循环的比较 (1) (2) main() main() int s=0,i; int s=0,i; scanf (“%d”, 运行情况: 运行情况: 1 1 s=55 s=55 再运行一次 再运行一次 11 11 s=0 s=11,例6.8解析,可以看到:当输入i的值小于或等于10时,二者得到

10、结果相同。而当i10时,二者结果就不同了。这是因为此时对while 循环来说,一次也不执行循环体,而对dowhile循环语句来说则要执行一次循环体。while 循环是前判断,而dowhile循环是后判断。,6.5 循环的嵌套,3种循环(while、dowhile、for) 可以互相嵌套。 (1) while( ) (2)while( ) do while( ) while( ); (3) do (4) for( ; ; ) do while( ) while( ); while( ); ,6.5 循环的嵌套,(5) for( ; ; ) (6) do for( ; ; ) for( ; ;)

11、while( );,双重循环,2两层for组成的双循环的执行过程: 当外循环控制变量每确定一个值时,内循环的控制变量就要从头至尾的循环一遍。 例题6.9 双循环程序举例。 main() int x,y; for (x=1;x=2;x+) for(y=1;y=3;y+) printf (“x=%d,y=%dn”,x,y); ,运行结果: x=1,y=1 x=1,y=2 x=1,y=3 x=2,y=1 x=2,y=2 x=2,y=3,例题,例题6.10下面程序的输出结果是什么?(训练阅读程序能力) main( ) int k=0,m=0; int x,y; for(x=0;x2;x+) for(y

12、=0;y3;y+) k+; k-=y; m=x+y; printf(“k=%d,m=%dn”,k,m); ,运行结果: k=0,m=5,本程序是双循环嵌套,注意内循环体只有 一个语句k+;因为没有大花括号。不要将 k-=y;语句也认为是内循环体语句。当x=0 时,内循环执行3次(y=0,1,2)k+执行 3次故循环结束时k=3。注意当内循环结束 时循环控制变量y的值是3,接着执行 k-=y; 语句,即k=k-y=3-3=0。当x=1时,内循环 仍执行原操作。使y=3,k=0。当x=2外循 环结束,执行m=x+y=2+3=5。所以输出 结果为k=0,m=5。,6.6 break语句和contin

13、ue语句,为了使循环控制更加灵活,语言提供了break语句和continue语句。 1 break语句 一般格式: break;(本语句必须在循环中使用) 功能: 在循环中当满足特定条件时,使用break语句强行结束循环,转向执行循环语句的下一条语句。,例题,例题6.11 break语句应用 main() int r; float pi=3.14159,s; for (r=1;r100) break; printf(“r=%d,s=%fn”,r,s); ,运行结果: r=1,s=3.141590 r=2,s=12.566360 r=3,s=28.274311 r=4,s=50.265442 r

14、=5,s=78.539749,continue语句:,2continue语句: 功能:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。 例题6.12将100200之间的不能被3整除的数输出。(continue应用举例。) main() int n; for(n=100; n=200; n+) if (n%3= =0) continue; printf(“%d”,n); ,例题,当n能被3整除时,执行contonue语句,结束本次循环,向前转到for执行n+,进行下一次循环,当n不能被3整除时才

15、执行printf函数输出n的值后,再进行下一次循环,直到n200停止循环。 例题6.13分析下面程序的运行结果。(continue应用举例。) /*例题源代码文件名:LT6_13.C*/ main() int i=0,s=0;,例题,do if (i%2) i+; continue; i+; s+=i; while (i7); printf(“s=%dn”,s); 分析: 当i%2为0时,表示假跳过 i+; continue;语句,执行i+; s+=i; 当i%2为1时,表示真执行 i+; continue;语句,所以本程序s的和是1+3+5+7。,运行结果: s=16,6.7 循环程序举例,例题6.14 输出10100之间的全部素数。所谓素数n是指,除1和n之外,不能被2(n-1)之间的任何整数整除。 算法设计要点: (1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。 (2)判断某数n是否是素数的算法:根据素数的定义,用2(n-1)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。 判断一个数是否能被另一个数整除

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号