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

下载本文档

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

文档简介

1、5.1 概述概述 循环结构是高级语言中一个重要的基本结 构,它可以利用很少的语句简单方便地重复 执行一些操作,因此应用很广。 1、基本概念 (1)循环条件:控制循环的条件。 (2)循环变量:确定循环条件的变量。 (3)循环体:程序中需要重复执行的语句。 第第5章章 循环结构程序设计循环结构程序设计 2、循环的种类 (1)当型循环:先判断条件,当条件成立时执行循环 体,条件不成立循环体一次也不执行。 (2)直到型循环:先执行循环体,后判断条件,当条 件成立时继续循环,条件不成立结束循环(至少执行 循环体一次)。 3、C语言中实现循环结构的四种语句: while 语句 (当型) dowhile 语

2、句 (直到型) for 语句 (当型) goto语句和if 语句结合形成循环结构(容易形成非结 构化,可以不用) 5.2 goto语句以及用goto语句构成循环 一、自由转向语句goto 1、一般形式 或: 标号:语句 goto 标号 goto 标号 标号: 语句 (形成循环结构) (不形成循环结构) 2、说明 (1)标号为合法的标识符,不能是数字等。可加在任 何语句的前面。 (2)goto语句是造成程序非结构化的重要原因,因此 尽量不用(C语言中完全可以不用)。 二、用goto语句构成循环:在上面第一种形式中,将 “goto 标号”改为: if(条件) goto 标号; 例 用if 和got

3、o语句构成循环,求 100 1n n main() int i,sum=0; i=1; loop: if(i=100) sum+=i; i+; goto loop; printf(%d,sum); sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050 循环初值 循环终值 循环变量增值 循环条件 循环体 5.3 while 5.3 while 语句语句 1、while 语句的一般形式 while (条件) 循环体语句 2、说明 (1)while 是关键字,“while (条件)”的意 思 为“当条件成立时执行”; (2)“条件”为关系表达式、

4、逻辑表达式和任 意 合法的表达式,其两端的圆括号不能少; (3)循环体为一条语句或复合语句,可执行多 次,也可能一次也不执行。 3、while循环的执行过程: 计算表达式(条件) 值为假(0) 值为真 (非0) 执行循环体 例例 计算计算1100之间所有之间所有3的倍数的数的和。的倍数的数的和。 main() int i,s; i=1;s=0; while(i=100) if (i%3=0) s=s+i; i+; printf(“s=%dn”,s); 5.4 dowhile 5.4 dowhile 语句语句 1、dowhile 语句的一般形式 do 循环体语句 while (条件); 2、说明

5、 (1)do、while是C语言的关键字; (2)循环体是一条语句或复合语句; (3)“条件”为关系表达式、逻辑表达式和任 意合法的表达式,两端的圆括号不能少,其 后的“;”表示dowhile语句的结束,也不 能少。 3、do-while循环的执行过程: 执行循环体 计算表达式(条件) 值为假(0) 值为真 (非0) 例例 求两个整数求两个整数m和和n最大公约数最大公约数 main() int m,n,a,b,r; scanf(“%d%d”, a=m;b=n; dor=a%b; a=b; b=r;while(r!=0); printf(“the greatest common divide o

6、f”); printf(“%d,%d is %dn”,m,n,a); 5.5 for 5.5 for 语句语句 1、for语句的一般形式 for(初始化表达式;条件表达式;修正表达式) 循环体语句 2、说明 (1)for为C语言的关键字; (2)for后圆括号中的三个表达式可以是任意表达式,它们的作 用如下: 初始化表达式:对循环变量等赋初值。可省,此时初始化在 for语句前进行; 条件表达式:控制循环的条件,为关系表达式、逻辑表达式 或任意合法的表达式。一般不能省,若省,可能产生死循环; 修正表达式:对循环变量进行修正。可省,此时对循环变量 的修正在循环体中或在条件表达式中进行。 (3)循环

7、体语句为一条语句或复合语句 3、for循环结构的执行过程,可用下图表示: 假 (0) for(初始化表达式; 条件(表达式); 修正表达式) 真 (非0 ) 循环体语句 例1:求sum=1+2+3+100 sum=0; for(i=1;i=100;i+)sum+=i; 其中i为循环变量。此程序段可改写成很多形式,例如: (1) for(sum=0,i=1;i=100;sum+=i,i+); /*无循环体,含在修正表达式中*/ (2) sum=0; i=1; /*初始化放在for语句之前*/ for(;i=100;i+)sum+=i; (3) sum=0;i=0; for(;+i=100;)su

8、m+=i; /*条件表达式同时起到修正表达式的作用*/ (4) sum=0; i=1; for(;i=100;)sum+=i;i+; /*对循环变量的修正放在循环体中*/ 可见for语句的用法相当灵活,功能很强,用途很广。 例例2:2:写出下面程序的运行结果写出下面程序的运行结果 main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); 例例3 打印所有的打印所有的“水仙花数水仙花数“。所谓。所谓” 水仙花数水仙花数”是指一个是指一个3位数,其各位位数,其各位 数字的立方和等于该数本身。例如,数字的立方

9、和等于该数本身。例如, 153是一个是一个“水仙花数水仙花数“,因为,因为 153=13+53+33 main() int i,j,k,n; printf(“水仙花水仙花“数是数是:”); for (n=100;n1000;n+) i=n/100; j=n/10-i*10; k=n%10; if (n=i*i*i+j*j*j+k*k*k) printf(“%4d”,n); printf(“n”); 5.6 5.6 循环结构的嵌套循环结构的嵌套 由于循环体可以是任意语句,因此也可以是循环 语句,这就构成循环结构的嵌套。既可以是同种循环 语句嵌套,也可以是不同循环语句相互嵌套。 嵌套循环的特点:外

10、循环变量每取一个值,内循环要 循环一周。 例:百鸡问题:百钱买百鸡,公鸡三块钱一只,母鸡 两块钱一只,小鸡一块钱买三只,问共买公鸡、母 鸡和小鸡各多少只? 分析:可用穷举算法,公鸡不超过33只,母鸡不超过 49只,小鸡=100-公鸡-母鸡。可用嵌套的while或 do-while或for循环编程。嵌套的while循环如下: main( ) int cock=0,hen,chick; while(cock=33) hen=0; while(hen=49) chick=100-cock-hen; if(3*cock+2*hen+chick/3=100 hen+; cock+; 5.7 流程限定转向

11、语句:流程限定转向语句:break和和continue 5.7.1 break(中断)语句。前面学过它的作用有: 1、跳出当层switch结构 2、循环体中的break语句,使流程跳出当层循环 语句。 注意:循环体中的break语句应作为 if 语句的一 个分支,即是在一定条件下才跳出循环。 例例1 1:对于整数半径的圆,求面积大于:对于整数半径的圆,求面积大于100100的最小的面的最小的面 积。积。 #define PI 3.14159 main( ) int r; float area; for(r=1;r100) break; printf(“area=%fn, area); 5.7.

12、2 continue(继续)语句 1、一般形式 continue; 2、放置位置:循环体中,一般也是作为if语句 的一个分支,以防出现死语句。 3、作用:(结束本次循环)跳过循环体中余下 的语句,然后: 对while循环和dowhile循环:继续计 算(条件)表达式以确定是否继续循环; 对for循环:计算修正表达式,然后计算 条件表达式以确定是否继续循环。 例1 写出下面程序的运行结果 main( ) int k=0, s=0, i; for(i=1;i5)printf(*i=%d,s=%d,k=%dn,i,s,k); continue; k=k+s; printf(i=%d,s=%d,k=%

13、dn,i,s,k); 当s5时,由于continue语句的作用,for循环中循环体的 最后两条语句不再执行。程序输出四行信息: i=1, s=1, k=1 i=2, s=3, k=4 * i=3, s=6, k=4 * i=4, s=10, k=4 4、continue语句与break语句比较。 实验五实验五 1、利用公式求、利用公式求cosx的近似值(精度为的近似值(精度为0.01) 2、每个苹果、每个苹果 0.8元,第一天买元,第一天买2个苹果,第二个苹果,第二 天开始,每天买前一天的天开始,每天买前一天的2倍,直到购买的苹倍,直到购买的苹 果个数达到不超过果个数达到不超过100的最大值。

14、编写程序求的最大值。编写程序求 每天平均花多少钱?每天平均花多少钱? )!2( ) 1(. ! 6! 4! 2 1cos 2 0 642 n xxxx x n n n 3、编写程序,从键盘输入、编写程序,从键盘输入6名学生的名学生的5门成绩,门成绩, 分别统计出每个学生的平均成绩。分别统计出每个学生的平均成绩。 4、试编写程序,找出、试编写程序,找出1至至99之间的全部同构数。之间的全部同构数。 同构数是这样一组数:它出现在平方数的右同构数是这样一组数:它出现在平方数的右 边。例如:边。例如:5是是25右边的数,右边的数,25是是625右边的右边的 数,数,5和和25都是同构数。都是同构数。

15、5、打印形状为直角三角形的九九乘法表。、打印形状为直角三角形的九九乘法表。 习题课习题课 例例1 已知正弦值近似计算公式为:已知正弦值近似计算公式为: 输入输入x和和eps,按上述公式计算,按上述公式计算sinx的近似的近似 值,要求计算误差小于给定的值,要求计算误差小于给定的eps. . )!12 ( ) 1(. ! 7! 5! 3 sin 12753 n xxxx xx n n #include main() float x,eps,s,m=0.0,mo; int n=0,i=1,j,t; printf(“enter float x scanf(“%f%f”, do t=s=1; mo=m

16、; for (j=1;jeps); printf(“%d,sin(%f)=%fn”,n,x,m); 例例2 打印输出下列图案打印输出下列图案 * * * * * * * main() int i,j; for (i=1;i=4;i+) for (j=1;j=4-i;j+) printf(“ “); for (j=1;j=2*i-1;j+) printf(“*”); printf(“n”); for (i=1;i=3;i+) for (j=1;j=i;j+) printf(“ “); for (j=1;j=7-2*i;j+) printf(“*”); printf(“n”); 例例3 一个正整数如果恰好等于它的因子之和(除一个正整数如果恰好等于它的因子之和(除 自身外),则称该数为完全数,例如:自身外),则称该数为完全数,例如: 6=1+2+3,6为完全数。编程求为完全数。编程求1000以内的所以内的所 有完全数。有完全数。 main() int a,i,m; for (a=1;a=1000;a+) for (m=0,i=1 ;i=a/2;i+) if (!(

温馨提示

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

评论

0/150

提交评论