c语言循环结构

上传人:正** 文档编号:50380598 上传时间:2018-08-07 格式:PPT 页数:83 大小:764KB
返回 下载 相关 举报
c语言循环结构_第1页
第1页 / 共83页
c语言循环结构_第2页
第2页 / 共83页
c语言循环结构_第3页
第3页 / 共83页
c语言循环结构_第4页
第4页 / 共83页
c语言循环结构_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《c语言循环结构》由会员分享,可在线阅读,更多相关《c语言循环结构(83页珍藏版)》请在金锄头文库上搜索。

1、第五章l 本章要点n n循环的基本概念循环的基本概念n n不同形式的循环控制不同形式的循环控制n n多重循环问题多重循环问题 5.1 程序中需要用循环结构 5.2 用while语句和do-while语句实现循环 5.3 用for 语句实现循环 5.4 循环的嵌套 5.5 用break语句和continue语句改变循环状态 5.6 几种循环的比较 5.7 程序举例 5.8 提高部分l 主要内容5.1 程序中需要用循环结构什么是循环? 为什么要使用循环?问题1:问题2:求学生平均成绩求学生平均成绩 分数相加后除以课数 在许多问题中需要用到循环控制。循环结构就 是用来处理需要重复处理的问题的,所以又

2、称 重复结构。它和顺序结构、选择结构共同作为 各种复杂程序的基本构造单元。 循环分为两种:无休止循环和有终止循环 构成有效循环的条件:循环体和循环结束条件5.2 用while语句和do-while语句实现循环 5.2.1 用while语句实现循环while语句用来实现“当型”循环结 构 一般形式:while (表达式) 语句当表达式为非0值时,执行while 语句中的内嵌语句。其特点是:先 判断表达式,后执行循环体,即内 嵌语句。例题 5.1求1+2+3+100的和解题思路(1)开始时使sum的值为0,被加数i第一次取值为1。开始进入循环结构。 (2)判别“i100”条件是否满足,由于i小于1

3、00,因此“i100”的值为真。 所以应当执行其下面矩形框中的操作。 (3)执行sum=sum+i,此时sum的值变为1了,然后使i的值加1,i的值变为2了, 这是为下一次加2作准备。流程返回菱形框。 (4)再次检查“i100”条件是否满足,由于i的值为2,小于100,因此 “i100”的值仍为真,所以应执行其下面矩形框中的操作。 (5)执行sum=sum+i,由于sum的值已变为1,i的值已变为2,因此执行sum=sum+i 后sum的值变为3。再使i的值加1,i的值变为3。流程再返回菱形框。 (6)再次检查“i100”条件是否满足,如此反复执行矩形框中的操作,直 到i的值变成了100,把i

4、加到sum中,然后i又加1变成101了。当再次返回菱 形框检查“i100”条件时,由于I已是101,大于100,“i100” 的值为 假,不再执行矩形框中的操作,循环结构结束。5.2 用while语句和do-while语句实现循环 #include void main()int i,sum=0;/* sum是用来存放累加和的变量 */ /* 初值为0 */i=1;while (i void main() int i,sum=0;i=1;do /* 在循环开始时不检查条件,先执行一次循环体 */ sum=sum+i;i+;while(i void main()float amount,sum=0

5、; /*变量sum用来存放累加和*/do scanf(“%f“,/*输入一个捐款金额*/sum=sum+amount; /*求出当前的累加和*/while(sumVoid main()int n=0;printf(“input a string:n”);while(getchar()!=n)n+;printf(“%d”,n);void main()int a=0,n=3;while (n-)printf(“%d “,a+);While和 do while循环比较(1)void main() int sum=0,i;scanf(“%d”,while(i void main() double p=

6、1, t=1, v;int i;for(i=1; i void main() double p=1.30756e9,r=0.01;int y;for(y=2006; p=1;x-)if(x%17=0) break; printf(“x=%dn“,x); 找到满足条件的最 大数,结束循环统计各班级的学生的平均成绩。已知各班人数 不等,但都不超过30人。编一个程序能处理人数不 等的各班学生的平均成绩。例题 5.6解题思路如果各班人数相同,问题比较简单,只需用一 个for语句控制即可:for(i=1;i void main() float score,sum=0,average;int i,n;fo

7、r(i=1; i void main() float score,sum=0,average;int i,n=0;for(i=1; i=10) break;if(b%3=1)b+=3; continue;printf(“%dn“,a); 【例】 分析以下程序的运行结果。 程序运行结果:4 5.6 几种循环的比较(1)三种循环都可以用来处理同一问题,一般情况下它们可以互相代替。 (2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i+,或i=i+1等)。5.6 几种循环的比较for循环可以在表达

8、式3中包含使循环趋于结 束的操作,甚至可以将循环体中的操作全部 放到表达式3中。因此for语句的功能更强, 凡用while循环能完成的,用for循环都能实 现。 (3)用while和do-while循环时,循环变量初 始化的操作应在while和do-while语句之前完 成。而for语句可以在表达式1中实现循环变 量的初始化。5.6 几种循环的比较(4) while循环、dowhile循环和for循环,都可以用break语句跳出循环,用continue语句结束本次循环 。有一对兔子,出生后第3个月起每个月都生一对兔 子。小兔子长到第3个月后每个月又生一对兔子。假 设所有兔子都不死,问40个月的

9、兔子总数为多少?例题 5.8解题思路5.7 程序举例 第几个月小兔子对数中兔子对数老兔子对数兔子总数110012010131012411135212563238753513可以看到每个月的兔子总数依次为 1,1,2,3,5,8,13这就是有名的费波那西(Fibonacci)数列。5.7 程序举例 void main() long int f1,f2; int i; f1=1;f2=1; for (i=1;i void main() long int f1,f2;int i;f1=1;f2=1;for(i=1; i #include void main()int m,i,k;printf(“pl

10、ease enter a integer number:”);scanf(“%d”, /* 输入一个整数m */k=(int)sqrt(m); /* 对m求平方根,再取整 */for (i=2;ik) printf(“%d is a prime number.n“,m);else printf(“%d is not a prime number.n“,m); 编写程序5.7 程序举例 运行结果: please enter a integer number: 17 17 is a prime number.译密码。为使电文保密,往往按一定规律将 其转换成密码,收报人再按约定的规律将其译回 原文。

11、例题 5.10解题思路5.7 程序举例 可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。#include void main()char c;while(c=getchar()!=n)/* 判定c是否字母 */ if(c=a printf(“%c“,c);printf(“n“); 编写程序5.7 程序举例 运行结果: China! Glmre! 说明:说明: 内嵌的if语句不能写成:if( cZ| cz) /* 请和程序笫7行比较 */c=c-26;因为如果所有小写字毋都满足“cZ”的条件,从而也都执行“c=c-26;

12、”语句,这就会出错。因此必须限制其范围为“cZ for (i=1; i #include void main ( ) void main( )int sum=0,i; int sum=0,i;scanf(“%d, scanf(”%d,while (i=10) dosum=sum+I; sum=sum+i;i+; i+; while (i=10);printf(“sum=%dn”, printf(“sum=%dn”, sum); sum); 运行结果: 1 sum=55 再运行一次: 11 sum=0运行结果: 1 sum=55 再运行一次: 11 sum=11 说明:说明:当while后面的表

13、达式的第一 次的值为“真”时,两种循环得 到的结果相同。否则,二者结果 不相同。5.8 提高部分5.8 提高部分 5.8.2 for语句的各种形式 for语句相当灵活,形式变化多样: (1) for语句的一般形式中的“表达式1”可以省略 ,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如:for(;i=100;i+) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变 。(2) 如果表达式2省略,即不判断循环条件,循 环无终止地进行下去。也就是认为表达式2始终 为真。如:for(i=1; ;i+) sum=sum+i; 表达式1是一个赋值表达式

14、,表达式2空缺。 它相当于:i=1;while(1)sum=sum+1;i+;5.8 提高部分 5.8.2 for语句的各种形式(3) 表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:for(i=1;i=100;)sum=sum+i;i+; 在上面的for语句中只有表达式1和表达式2,而没有表达式3。i+的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。5.8 提高部分 5.8.2 for语句的各种形式(4) 可以省略表达式1和表达式3,只有表达式2,即只给循环条件。如:for(;i=100;) while(i=100) sum=sum+i; 相当于 sum=sum+i;i+; i+; 在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。5.8 提高部分 5.8.2 for语句的各种形式(5) 3个表达式都可省略,如:for(; ;) 语句相当于while(1) 语句即不设初值,不判断条件

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号