计算机C语言-第六章.ppt_第1页
计算机C语言-第六章.ppt_第2页
计算机C语言-第六章.ppt_第3页
计算机C语言-第六章.ppt_第4页
计算机C语言-第六章.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 循环控制 6.1 概述 循环:同一程序段重复执行若干次 实现循环的语句:goto if while dowhile( ) for 6.2 goto语句及其构成的循环 一般形式:goto 语句标号 说明: (1)goto语句使控制无条件转到标号所指定的语句处开始 往下执行;,(2)语句标号必须是标识符而不是常量。 如:goto abc 合法, 而goto 35 则非法; (3)与循环语句配合使用时,可从循环体内跳到循环 体外; (4)goto语句转移的方向可前可后; (5)与if语句配合使用时可构成循环控制,例如: 求,问题的提出:若采取顺序结构程序设计方法,则 可描述如下:,例T6-1

2、.c main( ) int i=1, sum=0; loop: if(i=100) sum=sum+i; i+; /*把放在这里?*/ goto loop; printf (“sum=%d n”,sum); ,运行结果: sum=5050,友情提示,Sum为累加器 通常,做累加时初始值=0,做累乘时=1,6.3 while 语句 形式:while(表达式)语句 例:求 传统流程图和N-S结构流程图如下:,例T6-2.c 求 程序如下: main( ) int i=1,sum=0; while(i=100) sum=sum+i; i+; printf (“sum=%dn”,sum); 问题的提

3、出:(1)判断了多少次?循环体执行了多少次? (2)什么情况下会出现死循环?去掉 试试 (3)哪一句使循环趋于结束,运行结果: sum=5050,6.4 dowhile语句 形式:do 语句 while(表达式); 操作:先执行语句,再计算表达式,为真时,继续执行语句,为假时,退出循环。 例:求 传统流程图和N-S结构流程图如下:,例T6-3.c 求 main( ) int i=1;sum=0; do sum=sum+i; i+; while(i=100); printf (“sum=%d n”,sum); ,运行结果: sum=5050,问题的提出: (1)判断了多少次?语句执行了多少次?

4、(2)什么情况下出现死循环 (3)哪一句使循环趋于结束,求 以下是while和dowhile两种循环的比较 T6-4.c main( ) int sum=0, i; scanf(“%d”, ,输入: 输出: 1 sum=55 10 sum=10 11 sum=0,T6-4-1.c main( ) int sum=0, i; scanf (“%d”, ,输入: 输出: 1 sum=55 10 sum=10 11 sum=11,结论: (1)当条件表达式第一次为真时,两种循环得到的结果相同. (2)当条件表达式一开始为假时,两种循环结果是不同的.,说明: (1)while后的表达式第一次为真时,两

5、种循环结果相同; (2)while后的表达式第一次为假时,两种循环结果不同; (3)死循环:while(表达式) 当表达式的值为非0值, 如:0.2, -5.5, -100, 345.67; (4)do 后面若干语句是整体,必须用 括起。,6.5 for 语句 for语句是使用最为灵活的一种循环语句 形式:for (表达式1;表达式2;表达式3) 语句(循环体) 其中: 表达式1:循环变量赋初值 表达式2:循环判断条件,为真时继续 循环, 为假时,结束循环; 表达式3:循环变量的增量。 执行过程,请见右图:,例T6-4-2.c 求 main( ) int i,sum=0; for(i=1; i

6、=100; i+) sum=sum+i; printf (“sum=%d n”, sum); 思考,能把for(表达式1;表达式2;表达式3) 语句 )写成while形式吗?能写成do while吗?,运行结果: sum=5050,几点说明: 1.表达式1可省,“;”不能少,此前要对循环变量置初值。 如:i=1; s=0; for(; i=100; i+) s=s+i; 2.表达式2可省,此时循环判断条件恒为真,出现死循环。 如:for (i=1; ; i+) s=s+i;写成while怎么写? 3.表达式3可省,循环体内要有使循环趋于结束的语句 如:for(i=1 ; i=100 ; ) s

7、=s+i ; i+; 4.表达式1 、 3可同时省 ,先使变量有初值,后使变量增量 如:i=1; s=0; for( ; i=100 ; ) s=s+i; i+; 完全等同于while 5.表达式 1,2,3可全部省,如: for( ; ; ) 此时为死循环。 则相当于:while( 1 ); 循环无终止。,6、表达式1与循环变量可以有关也可无关; 还可以是逗号表达式。 如: for ( s=0 , i=1 ; i=100 ; i+ ) s=s+i; for ( i=0 , j=100 ; i=j ; i+ , j-) k=i+j;(常用,见书上流程图) 特别适用于上面这种有几个循环增量的情况

8、 见书上p64页标注 7.表达式2可以是关系、逻辑、算术、字符表达式,非0时,执行循环体,为0时退出循环。,例子(先一起看书上的例和例),#include “stdio.h” main( ) int i ; char c; for(i=0; (c=getchar ( ) ) != n ; i+=c) printf(“%c ”,c ); 输入:a b c d 输出:?,注:从键盘输入字符时,在输入回车后才把输入的一串字符送到内存缓冲区中的,此例中,表达式1的赋值和表达式3的增量均与表达式2的结束条件无关 。,例T6-4-3.c #include “stdio.h” main( ) int i ;

9、 char c; for(i=0; (c=getchar ( ) ) != n ; i+=c) printf(“i=%d n”, i ); 输入:a b c d 97 98 99 100 n,6.6 循环的嵌套 在C语言中,三种循环可以相互嵌套(如矩阵常用嵌套),(4) while( ) (5) for( ; ;) (6) do do while( ) for( ; ;) . . .while( ); . . . . . . while( );,T6-4-4.c计算3组14累加求和。 main( ) int i,j,s=0; for(i=1;i=3;i+) for(j=1;j=4;j+) s=

10、s+j; printf(“s=%d”,s); ,结果:s=30,6.7 几种循环的比较 1.四种循环通常可以用来解决同一问题,但不提倡使用goto语句,因为它是非结构化语句; 2.while和dowhile的循环体中要有使循环趋于结束的语句。for中使循环趋于结束的操作在表达式3中,也可将循环体中的操作放在表达式3中,凡while能完成的都能for代替。 3.while , do while 的循环变量初始化在该语句之前完成,而for是在表达式1中; 4.while, for先判断表达式,然后再执行语句,而do while先执行语句,再判表达式; 5.while , do while , fo

11、r 可用break 跳出循环,continue是结束本次循环,而 if - goto 中不能使用break 和 continue语句,6.8 break 和 continue 语句 6.8.1 break 语句 一般形式: break; 功能:结束循环语句,转向循环语句的下一语句,在多层循环结构中,只退出包含它的那层循环语句。 本语句属控制语句类,仅限 while, do while , for(循环) switch (多分支选择)语句中使用,不能单独使用及用于其他地方。,例T6-4-5.c 已知半径 r , 计算圆面积area , 当area 100时结束程序的运行。 main( ) int

12、 r ; float pi=3.14159, area; for( r=1 ; r 100) break ; printf( “r=%d , area=%5. 2f n”, r, area); ,输出: r=1, area=3.14 r=2, area=12.57 r=3, area=28.27 r=4, area=50.27 r=5, area=78.85 / * 当 r=6时, area=113.10 故此值没有被 输出 */,6.8.2 continue语句 一般形式:continue; 功能:跳过循环体中后面的语句,仅结束本次循环!进入本循环结构的下次循环 在while 和 do wh

13、ile中立即转到表达式进行判断。 在for语句中,转到表达式3进行增量,再转到表达式2进行判断。 思考:上面的例子,把break换成continue,则相关判断语句各执行了多少次? continue 也属控制类语句,只能出现在while,dowhile,for循环语句中。,例T6-5.c 把100 - 120之间不能被3整除的数输出。 main( ) int n; for(n=100; n=120; n+) if(n%3=0) printf (“ n” ); continue; printf( “%d,” , n); 思考,换成break呢?,运行结果: 100,101, 103,104, 1

14、06,107, 109,110, 112,113, 115,116, 118,119,,总结continue,continue语句仅能在循环语句中使用。 它的作用不是结束循环,而是开始一次新的循环。 对于for语句,将控制转到执行增量和条件测试部分。 对于while和do-while语句,将控制转到条件测试部分。,6.9 程序举例(请同学们自己思考) 例T6-6.c #include “math.h” 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;

15、 t=s/n; pi=pi*4; printf(“pi=%10.6f n”, pi ); ,运行结果: pi=3.141397,例T6-7.c 求Finonacci 数列: 1, 1, 2, 3, 5, 8, 13, 的前40个数,即 f1=1 (n=1) f2=1 (n=2) fn=fn-1+fn-2 (n=3) 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; ,例

16、T6-8.c 判 m 是否是素数 #include “ math.h” main( ) int m, i, k; scanf(“%d”, ,运行:19 输出: 19 is a prime number,例T6-9.c 求100 200 间的全部素数。 #include “ math.h” main( ) int m, k, i, n=0; for(m=101; m = k+1) printf (“%d ”, m); n=n+1; ,运行结果: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193

17、197 199,例T6-10.c 译密码, #include “stdio.h” main( ) char c; while(c=getchar( ) != n ) i f (c = a ,A B C D E F G 65 66 67 68 69 70 71 H I J K L M N 72 73 74 75 76 77 78 O P Q R S T U 79 80 81 82 83 84 85 V W X Y Z 87 88 89 90 91 92 _ 93 94 95 96 a b c d e f g 97 98 99 100 101 102 103 h i j k l m n 104 105 106 107 108 109 110 o p q r s t 111 112 113 114 115 116 u v w x y z 117 118 119 120 121 122,输入:China! 输出:Glmre!,作业,书后全部习题6.1-6.15,例题,菲波那契算法fibonacci 0、(i+)+(i+)+(i+); i+,i+,i+; 1、动漫例题P25 2、a=1;b=2;c=2; while(abc) t=a;a=b;b

温馨提示

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

评论

0/150

提交评论