C语言第5章循环结构程序设计课件

上传人:我*** 文档编号:144901149 上传时间:2020-09-14 格式:PPT 页数:90 大小:301.50KB
返回 下载 相关 举报
C语言第5章循环结构程序设计课件_第1页
第1页 / 共90页
C语言第5章循环结构程序设计课件_第2页
第2页 / 共90页
C语言第5章循环结构程序设计课件_第3页
第3页 / 共90页
C语言第5章循环结构程序设计课件_第4页
第4页 / 共90页
C语言第5章循环结构程序设计课件_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《C语言第5章循环结构程序设计课件》由会员分享,可在线阅读,更多相关《C语言第5章循环结构程序设计课件(90页珍藏版)》请在金锄头文库上搜索。

1、第五章 循环结构程序设计,5.1 概述,前面已介绍了顺序结构,选择结构,本章介绍循环结构。,如:,sum=1+2+3+100;,实际问题: 一组重复执行的语句。,则用循环结构解决。,C语言用四种形式循环,2. do-while 语句,3. For 语句,4. break、continue和goto语句,1. While 语句,5.2 while语句,while语句在C语言中用得比较多,它是通过判断循环控制条件是否满足来决定是否继续循环,又称“当型”循环 。,形式: while (表达式) 循环体语句,2. 执行过程: 先判断表达式的值。若0.则执行其后面的语句,否则while执行完毕。,专门的

2、当型循环语句while语句,3. 流程图:,将上述例子用while语句写出 while (i=100) sum+ =i; i+; , 语句中应有使表达式=0的语句。 否则会出现无限循环死循环。,注: while后面的语句一般为复合语句, 即:加 ,我们来看下面的例子 例5.1 写一个程序,输入一个班学生的成绩,求全班的平均成绩。 分析:输入成绩、计算平均成绩都是一个重复性过程,因此可以用循环语句来实现。在这里,我们并不知有多少个学生,也就是说不知循环到底有多少次,但考虑到成绩没有负数,这样就可以把循环条件定为:每当输入的分数大于等于0时就继续输入成绩;输入的分数小于0时就停止输入。,解题步骤如

3、下: (1)输入一个分数 (2)当“分数=0”时,做下列工作: 累计总分; 人数加一; 输入下一分数; (3)重复第(2)步,直到“分数0”。 程序: #include main() float score, average=0; /*average存放平均成绩,初值为0*/,int n=0;/*n用来存放学生数,初值为0*/ scanf(%f, /*输入下一个学生的分数*/ ,if (n!=0) average=average/n; /*求平均成绩,average*/ printf(%6.2f,average); /*输出平均成绩average,保留两位小数*/ 在使用while语句的时候,

4、我们要注意以下两个问题: (1)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现。如果不加花括号,则while语句的范围只到while后面的第一个分号处。比如上例中,while语句中如无花括号,则while语句范围只到“average+=score;”。,(2)在循环体中应有使循环趋向于结束的语句。比如上例中,循环结束的条件是“score=0”,那么当我们把这个班的成绩全部输入完后,一定要输入一个负数,才能使程序往下执行。 (3)循环体语句有可能一次也不执行。比如说上例中,当第一次输入的分数就为负数时,则循环体一次也不执行。,5.3 do while语句,do-while

5、语句的特点是: 先执行循环体中的语句,再通过判断表达式的值来决定是否继续循环,循环条件的测试是在循环的尾部进行的。 它是一种专门的“ 直到型” 循环语句。,它的一般形式为: do循环体语句 while(表达式);,3. 流程:,对于例5.1用do-while语句编写程序如下: #include main() float score,average=0; int n=0; do /*不进行判断,先进入循环*/ scanf(%f,/*输入学生的分数*/,if (score=0) average+=score; n+; while (score=0); /*表达式为非0,则继续*/ if(n!=0)

6、 average/=n; /*求平均成绩,average*/ printf(%6.2f,average); /*输出平均成绩average,保留两位小数*/ ,例5.2 编程序求1+3+5+7+9+这样的数之和。如果累加数大于750时, 则程序终止并输出结果。 main() int i=1,sum=0; while(sum=750) sum=sum+i; i=i+2; printf(n%d,sum); ,例5.3 用do-while语句求1至1000之间满足“用3除余2,用5除余3,用7除余2”的数,且一行只打印五个数。 分析:判断一个数被另一个数除,用取模运算%。三个条件是“与”的关系。一行

7、打印五个数,可以通过计数到5再回车换行。 程序代码如下: #include main() int i=1,j=0; do ,if (i%3=2 注意: 1、do-while语句的循环体语句至少要被执行一次,因为它是进入循环后再判别表达式。而while语句却是首先判别表达式,如果表达式值为0,则一次循环也不执行。,2、循环控制变量必须在循环体内有所改变,才能使while和do-while语句的循环控制条件表达式的值不断改变,直至循环结束。否则会造成死循环。例如: i=1; while(i=100) putchar(*); i+; 这个循环永远不会结束,因为“i+;”语句不属于循环体中的语句,循环

8、控制变量i没有在循环体内被改变。 程序应该作如下改变:,i=1; while(i=100) putchar(*); i+; 这条循环语句执行的结果是输出100个“*”。还可以将它改成do-while语句: i=1; do putchar(*); i+; while(i=100);,大家可以看到,对于同一个问题,既可以用while语句处理,也可以用do-while语句处理。那么,它们到底有什么区别呢? while语句与dowhile语句的区别: 当第一次执行时,若表达式=0时,则while语句与do while有所不同,do while 执行一次后面的语句,而while不执行。,5.3 for语

9、句,1. 一般形式,首先计算表达式1,接着执行表达式2,若表达式2的值0,则执行语句,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。,for语句是C语言中最有特色的循环语句,使用最为灵活方便。,for(表达式1; 表达式2; 表达式3) 循环体语句,2. 流程:,计算表达式1,求表达式2值,语句,计算表达式3,=0(假),0(真),2.执行过程 (1)先求解表达式1。 (2)求解表达式2,若其值为真(值非0),则执行for语句中指定的循环体语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。 (3)求解表达式3。 (4)转回上面第(2)

10、步继续执行。 (5)循环结束,执行for语句下面的一个语句。,用for语句写出上述例子,for用while代替的流程 表达式1; while(表达式2) 语句 表达式3; ,for ( i=1; i=100; i+) sum+=i;,for语句完全可以用while代替,但for直观、简单、方便,for语句中的各表达式含义 (1)表达式1:初值表达式,用于在循环开始前,为循环变量设置初始值。 (2) 表达式2:循环控制逻辑表达式,它控制循环执行的条件,决定循环次数。 (3)表达式3:循环控制变量修改表达式,定义了循环一次,循环控制变量的变化情况。 注意: 表达式1,表达式2,表达式3必须用分号隔

11、开 只要条件为真,for循环就一直执行,一旦条件变为假,程序就从紧跟在for循环后面的语句重新开始执行。 循环体语句:被重复执行的语句。,下面通过一个例子来看for语句的执行过程。 例5.4 在屏幕上打印1到100的数字。 当然解决这个问题我们可以用100个printf语句实现,但当要打印的数字量很大时,采用这种方式显然是不合适的,我们可以用for循环语句来实现。程序如下: #include main() int x; for (x=1;x=100;x+) printf(%d,x); ,在这个程序中,x经初始化置为1,因为x小于100,调用printf语句x+1,并且测试x,看其是否仍然小于或

12、等于100。重复进行这个过程,直到x大于100,循环结束。在这个例子中,x是循环控制变量:循环每重复一次x发生变化 ,并对x进行检查。,例5.5 写程序计算s=1+2+3+100 分析:此题可用循环语句来编写程序,循环控制变量i从1增加到100。设s的初值为0,则循环体为: s=s+i; /*i=l,2,,100*/ 程序: #include main() int s0, i; for(il; i100; i+) s=s+i;/*循环体语句*/ printf(s%d, s); ,上面程序中,for语句的执行过程为: 计算表达式1“il;”,得到循环控制变量的初值; 求解表达式2,若表达式2的值

13、为零(当x100),则结束for循环; 执行循环体语句“ss+i;”; 求解表达式3,“i+;”,然后转向步骤。,对于for循环,有一点非常重要,即条件测试永远是在循环开始时进行,如果在循环开始时条件为假,那么循环体语句就不会被执行。如: int i=10; for (k=10;k!=i;k+) printf(%d,k); printf(%d,k); 在这个循环程序段中,循环开始时,由于i=k,所以根本不会执行,正是由于条件表达式取值为假,循环体语句和循环的增量部分都不执行,因此,k一直为10,最后屏幕上输出的数字也是10。,例5.6 写程序计算s=1-3+5-7-99+101。 这个例子也可

14、看成是数的累加,但与上面的例子稍有差别,就是相加的数一个为正数,一个为负数。程序代码如下: #include main() int i,t=1,s=0; for (i=1;i=101;i+=2) t=t*i;,s=s+t; t=(-t)/i; /*正1,负1交叉*/ printf(%dn,s); ,for语句与while语句的比较 for语句等价于下列语句序列: 表达式1; while(表达式2) 语句; 表达式3; 相比之下,for语句显得结构整齐、紧凑、清晰。,for语句的变形 1.表达式的省略 如果在for语句之前给循环变量赋了初值,则表达式1可以省略,但其后的分号不可省略。 对于例5.

15、2,其循环语句可以写成如下形式: i=1; /*在for语句之前给循环变量赋初值*/ for( ; i100; i+) s=s+i; 如果省略表达式3,则应在for语句的循环体内修改循环控制变量。,例如: for(i1;i100; ) ss+i; i+;/*修改循环控制变量*/ ,如果表达式1和表达式3都省略,则for语句就相当于while语句。例如: il; /*for语句之前给循环变量赋初值*/ for(; i100 ; ) ss+i; i+; /*修改循环控制变量*/ ,就相当于: i=1; while(i=100) s=s+i; i+; ,如果三个表达式都省略,则for是无循环终止条件

16、的循环,因此有可能形成无限循环,如下例所示: for( ; ;) printf(I will run forever.n); 实际上,for( ; ;)语句也不能保证一个循环无限进行,当在循环体中遇到break语句时,将立即引起循环退出。例如:,il; for ( ; ; ) ss+i; i+; if(i100) break; /*如果i100,则退出循环*/ ,2. for语句中的逗号表达式 逗号运算符的主要应用就是在for语句中。for语句中的表达式l和表达式3可以是逗号表达式,特别是在有两个循环变量参与对循环控制的情况下。若表达式1和表达式3为逗号表达式,将使程序显得非常清晰。,例如: #include main() int i,j; for(i1,j10;ij; i+,j-) printf(i=%d,j=%dn,i,j); ,运行结果是: i1,jl0 i2,j9 i3,j8 i4,j7 i5,j6 以上程序中,i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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