C语言程序设计__循环结构程序设计(精)_第1页
C语言程序设计__循环结构程序设计(精)_第2页
C语言程序设计__循环结构程序设计(精)_第3页
C语言程序设计__循环结构程序设计(精)_第4页
C语言程序设计__循环结构程序设计(精)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、 C语言程序设计(第3版)张磊编著, 2012年10月清华大学出版社出版。 该教材面向程序设计初学者编写, 适合将C语言作为第一门程序设计语言的高校学生。 该教材理论教学和实验教学合二为一, 在每章之后均设有实验指导。实验指导分为基础实验和综合实验两部分。 基础实验紧密结合教材中的例题程序设置,以“理解验证完善扩充提高”为实验教学线索,重在巩固课堂教学知识,提高调试程序及完善程序的能力; 综合实验以算法设计和程序实现为重点,训练运用所学知识解决实际问题的能力。 该教材同时配有程序资源和试题库。 Email:C语言程序设计(第3版)课件C语言程序设计第4章 循环结构程序设计 C语言程序设计(第3

2、版) 张 磊 编著 21世纪高等学校规划教材 清华大学出版社第4章 循环结构程序设计4.1 while循环结构程序 4.2 do-while循环结构程序 4.3 for循环结构程序 4.4 循环体中的控制命令 4.5 多重循环程序 4.6 循环结构应用举例4.1 while循环结构程序4.1.1 while循环程序示例 4.1.2 while语句4.1.3 自增、自减运算 4.1.1 while循环程序示例 例4-1计算1到n的自然数的累加和。#includevoid main()int n,i=1,s=0;printf(n=);scanf(%d,&n);while(i=n)s=s+i;i=i

3、+1;printf(Sum=%dn,s); 程序解析本例题程序与第1章的计算1到100的自然数累加和程序相似,不同之处是,本程序的自然数的累计范围是可变的,取决于每次运行程序时输入的变量n值。该程序的循环控制结构由while语句实现,while的循环控制条件是i=n,每次循环执行的语句是while之后花括号“”和“”的之间的语句,这一组语句称为while语句的循环体。4.1.2 while语句while语句的一般形式 while(表达式) 语句组 其中:“表达式”是循环条件,“语句组”是循环体。while语句执行过程 计算表达式的值,当值为真(非0)时,执行循环体语句; 重复过程,直到表达式的

4、值为0时结束while语句。4.1.2 while语句例4-2 输入一批自然数,求它们的累加和,当输入数值为-1时,结束求和过程。#includevoid main()int n,sum=0;printf(Data: );scanf(%d,&n);while(n!=-1) /* 当n不是-1时,执行循环体 */sum=sum+n; /* 将n累加到sum中 */ scanf(%d,&n);printf(Sum=%dn,sum);4.1.2 while语句例4-3 计算10!。 /* program e4-3.c */#includevoid main()int i,t=1;i=1;while(

5、i=10)t=t*i;i+;printf(Result: %dn,t); 4.1.3 自增、自减运算 自增运算和自减运算的运算符分别是+和-,该类运算只适用于整型变量,其功能是对参加运算的变量进行加1或减1操作。自增、自减运算的用法及功能用法功能+变量名变量先自增,然后再使用-变量名变量先自减,然后再使用变量名+变量先使用,然后再自增变量名-变量先使用,然后再自减 自增、自减运算实例用法功能表达式表达式的值表达式求值后x的值+xx先增1,然后再使用+x+5116-xx先减1,然后再使用-x+594x+先使用x,然后x增15+x+106x-先使用x,然后x减15+x-1044.2 do-whil

6、e循环结构程序4.2.1 do-while循环程序示例4.2.2 do-while 语句4.2.1 do-while循环程序示例程序#includevoid main() int n=0,sum=0; do sum=sum+n; printf(Data: ); scanf(%d,&n); while(n!=-1); printf(Sum=%dn,sum); 程序解析该程序使用do-while结构进行循环控制,do后面的“”和“”之间的语句是其循环体,while后面的“n!=-1”是循环控制条件。执行do-while语句时,先执行一次循环体语句,然后再判断循环条件n!=-1是否成立,若该条件成立

7、,则继续执行循环体;否则,结束do-while语句,执行其下的printf语句,输出累加结果。 例4-5 用do-while结构设计程序,处理不定数目的自然数累加问题。4.2.2 do-while语句一般形式do 循环体语句组 while(表达式);执行过程先执行循环体,然后再判断表达式是否为真(非0), 如果为真则继续循环;否则终止循环。do-while循环至少要执行一次循环体语句。4.2.2 do-while语句#includevoid main() int n=0,sum=0; do sum=sum+n; printf(Data: ); scanf(%d,&n); while(n!=-1

8、); printf(Sum=%dn,sum);补充:用do-while结构设计程序,处理不定数目的自然数累加问题。4.3 for循环结构程序4.3.1 for循环程序示例4.3.2 for语句4.3.3 逗号表达式 5.2.1 for循环程序示例例4-6 计算n!的程序。 /* program e6-6.c */#includevoid main()int t=1,i,n; printf(n=);scanf(%d,&n);for(i=1;i=n;i+)t=t*i;printf(%d!=%dn,n,t);4.3.2 for语句 一般形式for(表达式1;表达式2;表达式3) 循环体语句组for语

9、句执行过程 求解“表达式1”; 求解“表达式2”,若其值非0, 则执行; 否则,结束循环; 执行“循环体语句组”; 求解“表达式3”; 转继续执行;for循环语句的循环控制过程与下列结构等价。表达式1;while(表达式2) 循环体语句组 表达式3;4.3.2 for语句 下面的程序与程序完全等价,注意比较二者之间的区别。/* program e4-6-1.c */#includevoid main()int t,i,n; printf(请输入一个整数:);scanf(%d,&n);for(t=1,i=1;i=n;i+)t=t*i;printf(%d!=%dn,n,t);4.3.3 逗号表达式

10、 4.4 循环体中的控制命令4.4.1 break语句4.4.2 continue语句4.4.1 break语句只有两种情况可以使用break命令在switch结构中,用break命令终止正在执行的switch流程;在while、do-while和for语句的循环体中使用break命令,强制终止当前循环。 4.4.1 break语句例4-7 不定数目的自然数累加。/* program e4-7.c */#includevoid main()int n,sum=0;while(1)printf(Data: );scanf(%d,&n);if(n=-1)break;sum=sum+n;printf

11、(Sum=%dn,sum);4.4.2 continue命令continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用 。 continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。4.4.2 continue命令例4-8 把100200范围内不能被3整除的数输出。/* program e4-8.c */#includevoid main()int n;for(n=100;n=200;n+)if(n%3=0)continue; printf(%5d,n);4.5 多重循环4.5.1 多重循环程序示例4.5.2 多重循环的一般结构4.5.1

12、多重循环程序示例在循环结构中,如果在一个循环体内又包含了另一个完整的循环结构,就构成了多重循环,也称为循环的嵌套。嵌在循环体内的循环称为内循环,嵌有内循环的循环称为外循环。显然,在多重循环中,内循环和外循环的概念具有相对性,一个内循环的循环体中,还可以嵌入其他的循环结构。4.5.1 多重循环程序示例例4-9 输出如下&三角图形,共10行,&数目逐行加1。&/* program e4-9-1.c */#includevoid main() int row,col; for(row=1;row=10;row+) for(col=1;col=a&ch=z2.程序实现#includevoid main

13、()int count=0;char ch;printf(Input a string: );ch=getchar(); while(ch!=n)if(ch=a&ch=z)count+; ch=getchar(); printf(%d,count); 4.6.2 比赛评分例4-11 比赛评分问题。比赛有6位评委,每位评委按照百分制为选手打分,去掉一个最高分和一个最低分后,计算出的平均分为比赛选手得分。1问题分析与算法设计 输入数据,即输入评委对选手的打分; 找出一个最高分,找出一个最低分; 计算平均分。2. 程序实现/* program e4-11.c */#include#define N

14、6 void main() int i,max=0,min=100; int score,sum=0; for(i=1;i=N;i+) printf(Input score %d: ,i); scanf(%d,&score); if(maxscore) min=score; sum+=score; printf(Average score:%dn,(sum-max-min)/(N-2);4.6.3 学生成绩分等统计例4-12 一个班级有N名学生,每个学生有两门课程,实行百分制考核,要求分等级统计各个等级的人数。成绩分等的标准如下:优秀(excellence) 平均成绩90良好(all righ

15、t) 80平均成绩90中等(middling) 70平均成绩80及格(pass) 60平均成绩70不及格(fail) 平均成绩601问题分析与算法设计 输入一个学生的两门课成绩; 计算该学生的平均成绩; 按平均成绩分等统计; 重复以上三个步骤,直到这个班级的学生数据处理完为止; 输出统计结果。4.6.3 学生成绩分等统计算法的粗略流程图 “一个学生数据的输入和统计”框的流程图 2实现程序 4.6.3 学生成绩分等统计#include#define N 5 /* 班级人数为5 */void main()int a,b,ave,i;int s1,s2,s3,s4,s5; /* 定义各等级的统计变量

16、 */s1=s2=s3=s4=s5=0; /* 为统计变量赋初值 */for(i=1;i=N;i+)printf(Input data(a,b): );scanf(%d,%d,&a,&b); /* 输入一个学生的两门课成绩 */ave=(a+b)/2; switch(ave/10) case 10:case 9: s1+; break; case 8: s2+; break;case 7: s3+; break;case 6: s4+; break;default: s5+;printf(excellence: %dn,s1);printf(all right: %dn,s2);printf(

17、middling: %dn,s3);printf(pass: %dn,s4);printf(fail: %dn,s5);4.6.4 最大公约数 例4-13 求两个整数的最大公约数。问题分析与算法设计两个数相除,若余数为0,则除数就是这两个数的最大公约数;若余数不为0,则以除数作为新的被除数,以余数作为新的除数,继续相除,直到余数为0时,除数即为两数的最大公约数。/* program e4-13.c */#includevoid main()int a,b,t;printf(Input a,b: );scanf (%d,%d,&a,&b);if(a2递推的算法如下: 初始项:f1=1,f2=1;

18、 求一个新项: f1+f2f; 为求下一个新项作准备:f2f1,ff2; 重复、步骤,直到求出要求的项数为止。/* program e4-14.c */#include#define N 20void main ( )long int f,f1,f2;int i;f1=f2=1;printf(%10ld%10ld,f1,f2); for(i=3;i=N;i+)f=f1+f2; f1=f2; f2=f;printf(%10ld,f); if(i%5=0) printf(n);4.6.6 乘法表 例4-15 编写一个程序,输出如下所示的乘法表。1*1=11*2=2 2*2=41*3=3 2*3=6

19、 3*3=91*4=4 2*4=8 3*4=12 4*4=16 1*9=9 2*9=18 3*9=27 4*9=36 9*9=81问题分析与算法设计乘法表具有如下特点: 共有9行; 每行的式子个数很有规律,即:属于第几行,就有几个式子; 对于每一个式子,既与所在的行数有关,又与所在行上的具体位置有关。/* program e4-15.c */#includevoid main()int i,j;for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=%-3d ,j,i,i*j);printf(n); 4.6.7 搬砖问题例4-16 有36块砖,一次需要36人同

20、时搬运,男青年每人搬4块,女青年每人搬3块,儿童两人搬1块。要求编写程序,把可能的搬运方案都找出来。/* program e4-16.c */#includevoid main() int x,y,z; for(x=0;x=8;x+) for(y=0;y=11;y+) for(z=0;z=36;z=z+2) if(4*x+3*y+z/2=36)&(x+y+z=36) printf(men: %dn,x); printf(women: %dn,y); printf(children: %dn,z); 4.6.8 找素数例4-17 设计一个程序,将100200之间的所有素数都找出来。问题分析与算法

21、设计 一个自然数,若除了1和它本身外不能被其它整数整除,则该数为素数。对于自然数k,只要依次测试能否被2,3,k-1整除即可,在测试中,若遇到能够整除的情况,则k不是素数,测试过程即可停止,否则k是素数。/* program e4-17.c */#include#includevoid main()int i,k,sk,flag;for(k=100;k=200;k+)flag=1;sk=sqrt(k);for(i=2;i=sk;i+)if(k%i=0)flag=0;break;if(flag=1)printf(%5d,k);printf(n); 4.6.9 哥德巴赫猜想 #include#includevoid main()int i,j,k,n,p1,p2;while(1) /* 保证后续求解的数据是不小于6的一个偶数 */printf(Please enter a ev

温馨提示

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

评论

0/150

提交评论