C语言程序设计 教学课件 ppt 作者 解晨光 葛竹春 第5章

上传人:E**** 文档编号:89344962 上传时间:2019-05-23 格式:PPT 页数:106 大小:324.50KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者  解晨光 葛竹春 第5章_第1页
第1页 / 共106页
C语言程序设计 教学课件 ppt 作者  解晨光 葛竹春 第5章_第2页
第2页 / 共106页
C语言程序设计 教学课件 ppt 作者  解晨光 葛竹春 第5章_第3页
第3页 / 共106页
C语言程序设计 教学课件 ppt 作者  解晨光 葛竹春 第5章_第4页
第4页 / 共106页
C语言程序设计 教学课件 ppt 作者  解晨光 葛竹春 第5章_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 解晨光 葛竹春 第5章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 解晨光 葛竹春 第5章(106页珍藏版)》请在金锄头文库上搜索。

1、,第5章 循环结构程序设计,教学目标 掌握循环结构的构成; 掌握循环控制变量的使用; 熟练掌握3种基本的循环控制语句; 熟练掌握一重循环的构建方法,学会构建二重循环; 理解含有多重循环的程序。,5.1 循环结构程序设计的概念,在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 C语言提供了while语句、dowhile语句和for语句实现循环结构。,5.2 while语句,5.2.1 while语句的一般格式 形式为 while(表达式)循环体;,说明: (1)while是C语言的关键字。 (2)while后一对圆括号中的表达式,可以

2、是C语言中任意合法的表达式,由它来控制循环体是否执行。 (3)在语法上,要求循环体可以是一条简单的可执行语句;若循环体内需要多个语句,应该用大括号括起来,组成复合语句。,5.2.2 while语句的执行过程 while语句的流程图如图5-1所示,其特点是先判断、后执行,若条件不成立,有可能一次也不执行。其具体执行过程如下。,(1)计算while后一对圆括号中表达式的值。当值为非零时,执行步骤(2);当值为零时,执行步骤(4)。 (2)执行循环体中语句。 (3)转去执行步骤(1)。 (4)退出while循环。,图5-1 while语句的流程图,【例5-1】编写求1+2+3+100的值的程序。 分

3、析:这是一个求100个数的累加和问题。,所加的加数从1变化到100,可以看到加数是有规律变化的,后一个加数比前一个加数增1,第一个加数为1,最后一个加数为100,因此可以在循环中使用一个整型变量i,每循环一次使i增1,一直循环到i的值超过100,用这个办法就解决了所需的加数问题;但是要特别注意的是,变量i需要有一个正确的初值,在这里它的初值应当设定为0。,图5-2 求1100和的流程图,下一个要解决的是求累加和。设用一个变量sum来存放这100个数的和值,可以先求0+1的和并将其放在sum中,然后把sum中的数加上2再存放在sum中,依次类推,这和人们心算的过程没有什么区别,sum代表着人们脑

4、中累加的那个和数,不同的是心算的过程由人们自己控制。,在这里,sum累加的过程要放在循环中,由计算机来判断所加的数是否已经超过100,加数则放在变量i中,并在循环过程中一次次增1。具体流程图如图5-2所示。,图5-2 求1100和的流程图,以下就是求累加和的典型算法。 main() int i, sum=0; /*sum的初值为0*/ i=1; while(i=100) /*当i小于或等于100时执行循环体*/ ,sum=sum+i; i+; /*在循环体中累加一次,i增1*/ printf(“sum=%dn“, sum); 运行结果为 sum=5050,注意: (1)如果在第一次进入循环时,

5、while后圆括号内表达式的值为0,循环一次也不执行。在本程序中,如果i的初值大于100,将使表达式i=100的值为0,循环体也不执行。,(2) 在循环体中一定要有使循环趋向结束的操作,以上循环体内的语句i+使i不断增1,当i100时,循环结束。如果没有i+;这一语句,则i的值始终不变,循环将无限进行。,(3)在循环体中,语句的先后位置必须符合逻辑,否则将会影响运算结果,例如,若将上例中的while循环体改写成: while(i=100) i+; /*先计算i+,后计算sum的值*/ sum=sum+i;,运行后,将输出: sum=5150 在运行的过程中,少加了第一项的值1,而多加了最后一项

6、的值101。,5.3 dowhile语句,5.3.1 dowhile语句的一般格式 形式为 do 语句 while(表达式); 其中语句通常为复合语句,称为循环体。,dowhile语句的语义是:先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。因此,循环体至少被执行一次。,说明: (1)do是C语言的关键字,必须和while联合使用。 (2)dowhile循环由do开始,用while结束;必须注意的是,在while(表达式)后的“;”不可丢,它表示dowhile语句的结束。,(3)while后一对圆括号中的表达式,可以是C语言中任意合法的表达式,由它控制循环是否执

7、行。 (4)按语法,在do和while之间的循环体只能是一条可执行语句;若循环体内需要多个语句,应该用大括号括起来,组成复合语句。,图5-3 dowhile语句的流程图,5.3.2 dowhile语句的执行过程 dowhile语句的流程图如图5-3所示,其特点是:先执行后判断,循环体至少被执行一次。其具体执行过程如下。,(1)执行do后面循环体中的语句。 (2)计算while后一对圆括号中表达式的值。当值为非零时,转去执行步骤(1);当值为0时,执行步骤(3)。 (3)退出dowhile循环。,dowhile与while循环区别是:while循环的控制,出现在循环体之前,只有当while后面表

8、达式的值为真时,才可能执行循环体;在dowhile构成的循环中,总是先执行一次循环体,然后再求表达式的值,当条件为真时循环,一旦条件为假,立即结束循环。,因此,无论表达式的值是0还是非0,循环体至少要被执行一次。 和while循环一样,在dowhile循环体中,一定要有能使while后表达式的值变为0的操作;否则,循环将会无限制地进行下去。,【例5-2】用dowhile语句编写求1+2+3+100的值的程序。 main() int i, sum=0; i=1; do ,sum=sum+i; i+; while(i=100); printf(“sum=%dn“, sum); ,5.4 for语句

9、,5.4.1 for语句的一般格式 形式为 for(表达式1;表达式2;表达式3 语句 for(循环变量赋初值;循环条件;循环变量增值)语句,5.4.2 for语句的执行过程 for语句的流程图如图5-4所示,for语句的执行过程如下。,(1)先求解表达式1。 (2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行步骤(3);若为假(0),则结束循环,转到步骤(5)。,(3)若表达式为真,在执行指定的语句后,求解表达式3。 (4)转回步骤(2)继续执行。 (5)执行for语句下面的一个语句。,【例5-3】用for语句编写求1+2+3+100的值的程序。 main()

10、 int i, sum=0; for(i=1;i=100;i+) sum=sum+i; printf(“sum=%dn“, sum); ,图5-4 for语句流程图,说明: (1)for语句一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。 (2)如果表达式2省略,认为表达式2始终为真。 例如: for(i=1;i+)sumsum+i;,它相当于: i=1; while(1) sumsum+i; i+;,(3)表达式3也可以省略。 例如: for(sum=0, i=1; i=100;) sum=sum+i; i+; ,(4)可以省略表达式1和表达式3,只有表达式2,即只

11、给循环条件。 例如: for(;i100;) sumsum+i; i+;,相当于: while(i100) sumsum+i; i+;,(5)3个表达式都可省略。 例如: for(; ;) 语句,(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。,(7) for(i0;(cgetchar()!n; i+=c); 在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于n(换行符),如果不等于n,就执行循环体。, for( ;(c=getchar()!=n;) printf(“%c“,c); 无表达式1和表达式3,其作用是每读入一个字符即输出

12、该字符,直到输入一个“回车换行”为止。注意:从终端键盘向计算机输入时,是在按Enter键以后才送到内存缓冲区中去的。,其运行结果为 Computer (输入) Computer (输出) 而不是 CCoommppuutteerr,5.5 循环结构嵌套,在一个循环体内又完整地包含了另一个循环,称为循环嵌套。 【例5-4】使用双层for循环打印如图5-5所示的图形。,程序如下:* * * main() int k, i, j; for(i=0;i=2;i+), for(k=1;k=i;k+) printf(“ “); for(j=0;j=3;j+) printf(“*“); printf(“n“)

13、; ,图5-5 显示图形,* * *,表5-1所示为以上双重循环中i,k和j值的变化规律。,表5-1 双重循环中i,k和j值的变化规律,【例5-5】输入6名学生5门课程的成绩,分别统计出每个学生5门课程的平均成绩。,分析:程序中需要用双重循环来处理。外层循环每循环一次输入一名学生的数据并求出该学生的平均分,然后输出该学生的全部数据。循环6次,可处理6名学生的数据。内层循环中读入第i位学生5门课的成绩,并进行累加。,程序如下: #define N 6 #define M 5 main() int i, j; float g, sum, ave;,for(i=1;i=N;i+) /*用i表示序号*

14、/ sum=0; /*sum存放每位学生成绩总和,初值为0*/ /*内循环体执行5次,读入一名学生的5门课程的成绩*/,for (j=1; j=M; j+) scanf(“%f“, /*累加5门课程的成绩*/ ,ave=sum/M; /*ave存放当前一名学生的平均分*/ printf(“No.%d ave=%5.2fn“, i, ave); /*输出序号和对应的平均分*/ ,以上程序的开始定义了两个符号常量N和M,如果处理的学生人数或课程门数有所改变,只需改变define行中与N和M对应的值而不必改动程序的其他部分。程序中内循环体和外循环体都由大括号括起来组成复合语句。,注意:sum=0;赋

15、初值语句不能放在外循环体外,例如: sum=0; for(i=1; i=N; i+) ,程序执行时按以下形式输入数据(注意:实型变量可以接受整型数,每行输入的最后按一下Enter键): 60 70 80 90 100 65 75 85 95 100 66 76 86 96 100 67 77 87 97 100 68 78 88 98 100 69 79 89 99 100,运行结果为 No.1 ave=80.00 No.2 ave=84.00 No.3 ave=84.80 No.4 ave=85.60 No.5 ave=86.40 No.6 ave=87.20,5.6 break语句和continue语句,5.6.1 break语句 break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句。 【例5-6】检查输入的一行中有无相邻两字符相同。,#include“stdio.h“ void main() char a, b; printf(“input a string:n“); b=getchar(); while(a=getchar()!=n), if(a=b) printf(“same charactern“);

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

当前位置:首页 > 高等教育 > 大学课件

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