第4章 循环结构程序设计_第1页
第4章 循环结构程序设计_第2页
第4章 循环结构程序设计_第3页
第4章 循环结构程序设计_第4页
第4章 循环结构程序设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计-理论、方法与实践 张磊编著 清华大学出版社,C语言程序设计 第4章 循环结构程序设计,第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的自然数的累加和。 #include int main() int n,i=1,s=0; printf(n=); sca

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

3、le语句。,4.1.2 while语句,例4-2 输入一批自然数,求它们的累加和,当输入数值为-1时,结束求和过程。 #include int main() int n,sum=0; printf(Data: ); scanf(%d, ,4.1.2 while语句,例4-3 计算10!。,#include int main() int i,t=1; i=1; while(i=10) t=t*i; i+; printf(Result: %dn,t); return 0; ,4.1.3 自增、自减运算,自增运算和自减运算的运算符分别是+和-,该类运算只适用于整型变量,其功能是对参加运算的变量进行加

4、1或减1操作。,自增、自减运算的用法及功能,自增、自减运算实例,4.2 do-while循环结构程序,4.2.1 do-while循环程序示例 4.2.2 do-while 语句,4.2.1 do-while循环程序示例,#include int main() int n=0,sum=0; do sum=sum+n; printf(Data: ); scanf(%d, ,程序解析 该程序使用do-while结构进行循环控制,do后面的“”和“”之间的语句是其循环体,while后面的“n!=-1”是循环控制条件。 执行do-while语句时,先执行一次循环体语句,然后再判断循环条件n!=-1是否

5、成立,若该条件成立,则继续执行循环体;否则,结束do-while语句,执行其下的printf语句,输出累加结果。,例4-5 用do-while结构设计程序,处理不定数目的自然数累加问题。,4.2.2 do-while语句,一般形式 do 循环体语句组 while(表达式); 执行过程 先执行循环体,然后再判断表达式是否为真(非0), 如果为真则继续循环;否则终止循环。 do-while循环至少要执行一次循环体语句。,4.3 for循环结构程序,4.3.1 for循环程序示例 4.3.2 for语句 4.3.3 逗号表达式,5.2.1 for循环程序示例,例4-6 计算n!的程序。 #inclu

6、de int main() int t=1,i,n; printf(n=); scanf(%d, ,4.3.2 for语句,一般形式 for(表达式1;表达式2;表达式3) 循环体语句组 for语句执行过程 求解“表达式1”; 求解“表达式2”,若其值非0, 则执行; 否则,结束循环; 执行“循环体语句组”; 求解“表达式3”; 转继续执行;,for循环语句的循环控制过程与下列结构等价。 表达式1; while(表达式2) 循环体语句组 表达式3; ,4.3.2 for语句,下面的程序与程序e4-6.c完全等价,注意比较二者之间的区别。 #include int main(void) int

7、t,i,n; printf(请输入一个小于12的整数:); scanf(%d, ,4.3.3 逗号表达式,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 不定数目的自然数累加。 #include int main(void) int n,sum=0; while(1) printf(Data

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

9、.5.1 多重循环程序示例,在循环结构中,如果在一个循环体内又包含了另一个完整的循环结构,就构成了多重循环,也称为循环的嵌套。嵌在循环体内的循环称为内循环,嵌有内循环的循环称为外循环。显然,在多重循环中,内循环和外循环的概念具有相对性,一个内循环的循环体中,还可以嵌入其他的循环结构。,4.5.1 多重循环程序示例,例4-9 输出如下 for(row=1;row=10;row+) for(col=1;col=row;col+) printf( ,4.5.2多重循环的一般结构,正确嵌套结构,错误嵌套结构,4.6 循环结构程序设计举例,4.6.1 字符统计 4.6.2 比赛评分 4.6.3 学生成绩

10、分等统计 4.6.4 最大公约数 4.6.5 Fibonacci数列 4.6.6 乘法表 4.6.7 搬砖问题 4.6.8 找素数 4.6.9 哥德巴赫猜想,4.6.1 字符统计,例4-10 从键盘输入一个字符串,统计其中小写字母的个数。 问题分析与算法设计 连续执行getchar()函数,读入的字符串,当读入字符是回车符时,读入过程结束。 若ch为字符存储变量,则ch满足下面的表达式时,相应字符为小写字母。 ch=a char ch; printf(Input a string: ); ch=getchar(); while(ch!=n) if(ch=a ,4.6.2 比赛评分,例4-11

11、比赛评分问题。 比赛有6位评委,每位评委按照百分制为选手打分,去掉一个最高分和一个最低分后,计算出的平均分为比赛选手得分。 1问题分析与算法设计 输入数据,即输入评委对选手的打分; 找出一个最高分,找出一个最低分; 计算平均分。,程序实现 #include #define N 6 int main() int i,max=0,min=100; int score,sum=0; for(i=1;iscore) min=score; sum+=score; printf(Average score:%dn,(sum-max-min)/(N-2); return 0; ,4.6.3 学生成绩分等统计

12、,例4-12 一个班级有N名学生,每个学生有两门课程,实行百分制考核,要求分等级统计各个等级的人数。成绩分等的标准如下: 优秀(excellence) 平均成绩90 良好(all right) 80平均成绩90 中等(middling) 70平均成绩80 及格(pass) 60平均成绩70 不及格(fail) 平均成绩60 1问题分析与算法设计 输入一个学生的两门课成绩; 计算该学生的平均成绩; 按平均成绩分等统计; 重复以上三个步骤,直到这个班级的学生数据处理完为止; 输出统计结果。,4.6.3 学生成绩分等统计,算法的粗略流程图,“一个学生数据的输入和统计”框的流程图,2实现程序e4-12

13、.c,4.6.3 学生成绩分等统计,#include #define N 5 /* 班级人数为5 */ int main() int a,b,ave,i; int s1,s2,s3,s4,s5; /* 定义各等级的统计变量 */ s1=s2=s3=s4=s5=0; /* 为统计变量赋初值 */ for(i=1;i=N;i+) printf(Input data(a,b): ); scanf(%d,%d, ,4.6.4 最大公约数,例4-13 求两个整数的最大公约数。 问题分析与算法设计 两个数相除,若余数为0,则除数就是这两个数的最大公约数;若余数不为0,则以除数作为新的被除数,以余数作为新的

14、除数,继续相除,直到余数为0时,除数即为两数的最大公约数。,#include int main(void) int a,b,t; printf(Input a,b: ); scanf (%d,%d, ,4.6.5 Fibonacci数列,例4-14 将Fibonacci数列的前20项求出来,并以每行5个数的形式显示输出。 问题分析: Fibonacci数列: 1,1,2,3,5,8,13,21,34, Fibonacci数列第n项的一般表示: f1=1 f2=2 fn=fn-1+fn-2 n2 递推的算法如下: 初始项:f1=1,f2=1; 求一个新项: f1+f2f; 为求下一个新项作准备:

15、f2f1,ff2; 重复、步骤,直到求出要求的项数为止。,#include #define N 20 int 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); return 0; ,4.6.6 乘法表,例4-15 编写一个程序,输出如下所示的乘法表。 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12

16、 4*4=16 1*9=9 2*9=18 3*9=27 4*9=36 9*9=81,问题分析与算法设计 乘法表具有如下特点: 共有9行; 每行的式子个数很有规律,即:属于第几行,就有几个式子; 对于每一个式子,既与所在的行数有关,又与所在行上的具体位置有关。,#include int 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); return 0; ,4.6.7 搬砖问题,例4-16 有36块砖,一次需要36人同时搬运,男青年每人搬4块,女青年每人搬3块,儿童两人搬

17、1块。要求编写程序,把可能的搬运方案都找出来。,#include int main(void) 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) ,4.6.8 找素数,例4-17 设计一个程序,将100200之间的所有素数都找出来。 问题分析与算法设计 一个自然数,若除了1和它本身外不能被其它整数整除,则该数为素数。 对于自然数k,只要依次测试能否被2,3,k-1整除即可,在测试中,若遇到能够整除的情况,则k不是素数,测试过程即可停止,否则k是素数。,#include #incl

18、ude int 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) printf(%5d,k); printf(n); return 0; ,4.6.9 哥德巴赫猜想,#include #include int main() int i,j,k,n,p1,p2; while(1) printf(Please enter a even number:); scanf(%d, ,小 结,(1) 循环控制结构是C语言程序的三种控制结构之一,它由循环控制语句实现。常用的循环控制语句有while、do-while和for。 (2) while和do-while语句通常用于循环次数未知的循环控制,while语句先判断

温馨提示

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

评论

0/150

提交评论