ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:82.13KB ,
资源ID:11092378      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11092378.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言第6章.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言第6章.docx

1、C语言第6章第六章 循环结构程序设计本章要点循环结构是C语言的3种基本结构之一。当需要重复处理问题时,应该使用循环结构,因此,循环结构也称为重复结构。在C语言中,可以用for语句、dowhile语句和while语句实现循环结构,用break语句和continue语句控制循环执行的流程。有时,也用goto语句和if语句构成循环。了解循环结构的概念,掌握for语句、dowhile语句和while语句,理解循环的嵌套及嵌套的执行过程,掌握break语句和continue语句的用法和区别。本章的重点和难点是for语句和循环的嵌套。第一节 概述在现实生活中,许多问题常常需要重复处理。例如,求1100的累

2、加和。根据已有的知识,可以用“1+2+100”来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个变量sum,其初值为0,利用sum += i(sum=sum+i)来计算(i依次取1、2、100),只要解决以下3个问题即可:(1)将i的初值置为1;(2)每执行1次“sum += i”后,i增1;(3)当i增到101时,停止计算。此时,sum的值就是1100的累加和。根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3种循环语句来实现,以简化、并规范循环结构程序设计。在C语言中,可用以下语句实现循环:(1)for语句;(2)dowhile

3、语句;(3)while语句;(4)用goto语句和if语句构成循环。但在结构化程序设计中,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。要构成一个有效的循环,应当指定两个条件:(1)需要重复执行的操作,这称为循环体;(2)循环结束条件,即在什么情况下停止重复的操作。例如,用while循环语句求1100的累加和。i=1;sum=0; /*初始化循环控制变量i和累加器sum*/while( i=100 ) /*当i100时循环结束*/ /*循环体开始*/ sum += i; /*实现累加*/ i+; /*循环控制变量i增1*/ /*循环体结束*/通过该例可以看出

4、:用一个while循环语句,就把需要重复执行100次程序段的问题解决了。一个while语句实现了一个循环结构。第二节 while语句while语句用来实现“当型”循环结构。while语句的一般格式:while(表达式) 循环体;功能:首先求解表达式,如果其值为逻辑真(非0),则执行循环体语句,结束一轮循环后,再计算表达式,若值为真则执行循环体语句;重复以上过程,直到表达式的值为逻辑假(0),结束循环,执行while语句的下一条语句。执行过程如图6-1所示。说明: (1)表达式是循环控制的条件,可以是任意合法的表达式。(2)while语句中循环体可为任意类型语句。如果循环体包含一条以上的语句,应

5、该用花括号“”括起来,以复合语句形式出现。(3)while语句的特点是:先判断,后执行,即先判断表达式,若为真后执行循环体语句。因此,在while语句中循环体有可能一次也不执行。 (4)在while循环中,必须有使得循环趋于结束的语句。否则循环永远不能结束,称这种循环为死循环。例6.1 用while语句求1100的累加和。这是一个求100个数的累加和问题。根据传统流程图如图6-2编写程序。#include main() int i=1,sum=0; /*初始化循环控制变量i和累加器sum*/while( i=100 ) /*当循环条件i100时循环结束,因此应使i增值以最终导致i100,本例使

6、用“i+;”语句来达到此目的。如果无此语句,则i的值始终不改变,循环永不结束。例6.2 用公式求的近似值,直至最后一项的绝对值小于10-4为止。#include #include main()int n=1; /*初始化变量n,用n存放每项分母*/float s,t,pi;t=1.0; /*初始化变量t,用t存放每项的值*/pi=0; /*初始化变量pi,用pi存放所求的值*/s=1.0; /*初始化变量s,用s存放每项分子,其值在1和-1之间变化*/while(fabs(t)=1e-4)pi=pi+t; n=n+2; s=-s;t=s/n;pi=pi*4;printf(pi=%fn,pi);

7、程序运行结果:pi=3.141397本例中,根据公式可知,相加的加数正负号交替,当每加一项后,t的符号应当改变,这可用s交替乘1和-1来实现。而用最后一项t的绝对值小于10-4来作为循环结束条件。第三节 dowhile语句dowhile语句也是一种循环结构,可用来实现“直到型”循环。dowhile语句的一般格式: do 循环体; while(表达式); /*本行的分号不能缺省*/功能:首先执行循环体语句,再计算表达式。如果表达式的值为真(非 0),则返回重复执行循环体语句;否则,如果表达式的值为假(0),则结束循环,执行dowhile的下一条语句。执行过程如图6-3所示。说明:(1)dowhi

8、le语句中,do和while必须配对使用。在while(表达式)后的分号“;”不能缺省。(2)dowhile语句的表达式可以是任意合法的表达式,是循环控制的条件。(3)当循环体仅由一条语句构成时,可以不使用复合语句形式。(4)dowhile语句的特点是:先执行,后判断,即先执行循环体,然后再判断表达式。因此,dowhile语句至少执行一次循环体。例6.3 用dowhile语句求解1100的累加和。根据传统流程图如图6-4编写程序。#include main() int i=1, sum=0; /*定义并初始化循环控制变量i以及累加器sum*/do sum += i; /*累加*/ i+; wh

9、ile(i=100); /*循环条件:i=100*/printf(sum=%dn,sum); 程序运行结果:sum=5050dowhile语句比较适用于处理:不论条件是否成立,先执行1次循环体语句的情况。除此之外,dowhile语句能实现的,for语句也能实现,而且更简洁。例6.4 比较while 与dowhile。#include #include main() main () int i,sum=0; int i,sum=0; scanf(%d,&i); scanf(%d,&i); while(i=100) do sum=sum+i; sum=sum+i; i+; i+; while(i=

10、100) ; printf(%d,sum); printf(%d,sum); 程序运行结果: 程序运行结果:输入:100 输入:100输出:100 输出:100再次运行: 再次运行:输入:101 输入:101输出:0 输出:101可以看出while 语句与dowhile语句的区别:一般情况下,用while语句和dowhile语句处理同一个问题时,如果二者的循环体一样,那么结果也一样。但是当while后面表达式的值一开始就为假(0),那么两种循环的结果是不同的。因为while语句的特点是:先判断表达式,若为真后执行循环体语句。当表达式的值一开始就为假,则循环体语句一次也不执行;而dowhile语

11、句的特点是:先执行循环体语句,后判断表达式,所以至少执行一次循环体语句。第四节 for语句除了可以用while语句和dowhile语句实现循环外,C语言还提供for语句实现循环,而且for语句更灵活。for语句的一般格式: for(表达式1;表达式2;表达式3) 循环体;功能:首先求解表达式1,然后求解表达式2。如果表达式2的值为真(非0),则执行循环体语句,执行完毕后求解表达式3,然后判断表达式2,若值为真,继续执行循环体语句;重复以上过程,当表达式2的值为假(0),则结束循环,执行for语句后的下一条语句。执行过程如图6-5所示。for语句最简单的应用形式也就是最易理解的形式:for(循环

12、变量赋初值;循环条件;循环变量增值) 循环体;3说明:(1)表达式1、表达式2和表达式3三部分均可缺省,甚至全部缺省,但其间的分号不能省略。省略表达式1, 此时应在for语句前给循环变量赋值。例如,i=1;for( ; i=100 ; i+ ) sum=sum+i;省略表达式2,即不判断循环条件,循环无终止的进行下去,也就是认为表达式2始终为真。例如,for( i=1; ;i+) sum=sum+i;省略表达式3,此时应把改变循环变量值的语句放在循环体内。例如:for( i=1 ; i=100 ; ) sum=sum+i;i+ ; 省略表达式1、表达式3,例如, for( ; i=100 ;

13、) sum=sum+i; i+; 3个表达式都省略,例如:for( ; ; )语句即不设初值,不判断条件(认为表达式2为真),循环变量不增值。无终止地执行循环体。显然,while循环是for循环的一种简化形式。表达式1;while(表达式2) 语句 表达式3;(2)表达式2是一个逻辑值,一般是关系表达式或逻辑表达式,也允许是数值表达式或字符表达式,只要其值为非零,就执行循环体语句。例如,for ( ; (c=getchar()!=n ; ) printf(%c ,c );(3)表达式3,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。例如,for(sum=0

14、;i=100;i+) sum += i; for(sum=0,i=1;i=100;i+) sum += i; (4)循环体语句可以是一条语句,也可以是复合语句。(5)C 99允许在for语句的表达式1中定义变量并赋值。例如,for(int i=1; i=100 ; i+ ) sum=sum+i;注意:所定义的变量有效范围只限于for循环中,在循环外不能使用此变量。例6.5 求1100的累加和。根据传统流程图如图6-6编写程序。#include main() int i,sum=0; /*将累加器sum初始化为0*/for(i=1; i=100; i+) sum += i; /*实现累加*/pr

15、intf(sum=%dn,sum); 程序运行结果:sum=5050例6.6 求n的阶乘n!(n!=1*2*n)。这是一个求累积问题,与累加和算法类似。#include main() int i, n; long f=1; /*将累乘器f初始化为1*/ printf(Input n: ); scanf(%d, &n); for(i=1; i=n; i+) f*= i; /*实现累乘*/ printf(%d ! = %ldn, n, f); 程序运行结果:Input n: 55 ! = 120第五节 循环的嵌套循环结构的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。外层循环称为外循环,内

16、嵌的循环称为内循环。内循环中还可以嵌套循环,这就是多重循环。循环的嵌套必须完全嵌套,也就是内层循环结构必须完全包含在外层循环结构之中。for语句和while语句允许嵌套,dowhile语句也不例外。 例如,while()/*外循环*/ for( ) /*内循环*/ 说明:循环的嵌套其执行过程是,外循环每执行一次,内循环都要从头到尾执行一遍。例6.7 输出以下图案:*分析图形可知,图形分5行,第1行有1个“*”,第2行有2个“*”,第i行有i个“*”。可用循环的嵌套实现,外循环用于控制打印5行,内循环用于控制每行输出的“*”数。#include main()int i,j;for(i=1;i6;

17、i+) /*外循环*/ for(j=1;j1000的最小值n。根据传统流程图如图6-7编写程序。#include main() int n; long f=1; for(n=1; ; n+) f*= i; if(f1000) break; printf(%dn, n); 程序运行结果:7在该程序的循环体中用f1000进行条件判断,如果满足f1000,则执行break语句结束for循环,执行下一条语句“printf(%dn, n);”。二、continue语句continue语句的一般格式:continue;功能:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和

18、dowhile循环,跳过循环体其余语句,但转向循环条件的判定。break和continue语句的区别:continue 语句只结束本次循环,而不是终止整个循环的执行。 而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。说明:(1)continue只能用于循环语句中。(2)循环嵌套时,continue语句只影响包含它们的最内层循环,与外层循环无关。例6.9 把100200之间的不能被3整除的数输出。根据传统流程图如图6-8编写程序。#include main( ) int n; for(n=100;n=200;n+) if ( n%3= =0) continue; print

19、f(%5d,n); 在此例程序的循环体中用n%3= =0进行条件判断,如果满足n%3= =0,则执行continue语句结束本次循环,转而执行n+;语句进入下一次循环,但不结束整个for循环。三、goto语句goto语句的一般格式:goto 标号功能:使系统转向标号所在的语句行执行。例6.10 用goto语句实现1100的累加和。#include main() int n=1, sum=0; loop: sum += n; n+; if (n=3),即从第3个数开始,每个数等于前2个数之和。参考源程序如下:#include main() long int f1=1,f2=1; /*定义并初始化

20、数列的头2个数*/int i=1; /*定义并初始化循环控制变量i*/for( ; i=20; i+ ) /*1组2个,20组40个数*/ printf(%15ld%15ld, f1, f2); /*输出当前的2个数*/ if(i%2=0) printf(n); /*输出2次(4个数),换行*/ f1 += f2; f2 += f1; /*计算下2个数*/ 程序运行结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 31

21、7811 514229 832040 134* *309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155例6.12 输出10100之间的全部素数。所谓素数n是指,除1和n之外,不能被2(n-1)之间的任何整数整除。判断某数n是否是素数的方法:根据素数的定义,用2(n-1)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环指定求解10100之间的素数即可。参考源程序如下:#include main()int i=11, j,

22、counter=0; for( ; i=100; i+=2) /*外循环:为内循环提供一个整数i*/ for(j=2; j= i ) /*整数i是素数,则输出,计数器加1*/ printf(%6d,i); counter+; 程序运行结果:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997例6.13 求两个正整数m和n的最大公约数。求两个正数的最大公约数通常采用“辗转相除法”。(1)输入两个正数m和n;(2)用m除以n,得余数r(0 r n);(3)判断余数r是否为0,若为0,输出当前值即为最大公约数,算法结束;否则执行下一

23、步;(4)当余数r 0时,更新被除数和除数,再转到第2步。参考源程序如下:#include main() int m,n,a,b,r; scanf(%d,%d,&m,&n); if(mn) t=m;m=n;n=t;a=m; b=n;do r=a%b; a=b; b=r;while(r!=0);printf(%d和%d的最大公约数是:%dn,m,n,a); 程序运行结果:9,1212和9的最大公约数是:3例6.14 从键盘输入一组字符,统计和输出大写字母和小写字母的个数。统计大写字母和小写字母的个数,先判断输入的字符是大写字母还是小写字母,若是,则个数加1;否则,以回车换行结束统计。参考源程序如

24、下:#include main() int m=0,n=0;char c; while(c=getchar()!=n) if(c=A&c=a&c=z) n+;printf(大写字母个数:%dn,m);printf(小写字母个数:%dn, n);程序运行结果:C Program大写字母个数:2小写字母个数:6本章小结本章叙述了循环结构的概念以及在C语言中for语句、dowhile语句和while语句实现的方法,重点介绍了for语句、dowhile语句、while语句和循环的嵌套。注意理解break语句和continue语句的用法和区别。习 题一、选择题1设有程序段int k=10;while(k

25、=0) k=k-1;则下面描述中正确的是( )。A.while循环执行10次 B.循环是无限循环C.循环体语句一次也不执行 D.循环体语句执行一次2以下描述中正确的是( )。A.while,do-while,for循环中的循环体语句都至少被执行一次B.do-while循环中,在while(表达式)后面的分号可以省略C.while循环体中,一定要有能使while后面表达式的值变为零(假)的操作D.do-while循环中,根据情况可以省略while。3以下正确的描述是( )。A.continue语句的作用是结束整个循环的执行。B.只能在循环体内和switch语句体内使用break语句。C.在循环体

26、内使用break语句或continue语句的作用相同。D.从多层循环嵌套中退出时,只能使用goto语句。4若i为整型变量,则以下循环执行次数是( )。for (i=2;i= =0;) printf(%d,i- -);A.无限次 B.0次 C.1次 D.2次5执行语句for(i=1;i+4;);后变量的值为( )。A.3 B.4 C.5 D.不定6下面程序的功能是在输入一批正整数中求出最大者,输入0结束循环,请选择填空。#include stdio.hmain()int a,max=0;scanf(%d,&a);while( )if (maxa) max=a; scanf(%d,&a);printf(%d,max);A.a= =0 B.a C.!a= =1 D.!a 7下面程序的运行结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1