第5章循环结构程序设计C语言程序.ppt
《第5章循环结构程序设计C语言程序.ppt》由会员分享,可在线阅读,更多相关《第5章循环结构程序设计C语言程序.ppt(92页珍藏版)》请在三一办公上搜索。
1、While、do-while、for语句 循环嵌套 Break、continue、goto语句 exit()函数 循环结构类型的选择及转换 循环结构程序设计举例 本章小结,学习目标,理解循环结构的含义;掌握C语言三种循环结构的特点;掌握while、do-while、for、goto、break、continue语句的使用方法;掌握不同循环结构的选择及其转换方法;掌握混合控制结构程序设计的方法。,学习内容,5.1 循环结构的程序设计,1.while语句,一般形式:,while(表达式)循环体语句;,执行流程:,其中:while后面的括号()不能省。while后面的表达式可以是任意类型的表达式,但
2、一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,特点:先判断表达式,再执行循环体,说明:循环体有可能一次也不执行循环体如包括有一个以上的语句,则必须用 括起来,组成复合语句。下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;,【例5-1】用while语句求1100的累计和。,#include void main()int i=1,sum=0;while(i=100)sum+=i;i+;printf(sum=%dn,sum);,循环初值,循环终值
3、,循环条件,循环体,循环变量增值,运行结果:sum=5050,注意:循环要赋初值,初值要放在循环体外。,【例6-1p】显示110的平方,#include void main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;,运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100,(1)如果while后的表达式的值一开始就为假,循环体将一次也不执行。(2)循环体中的语句可为任意类型的C语句。(3)遇到下列情况,退出while循环:表达式为假(为0)。循环体内遇到break
4、、return或goto语句(break和goto语句将在随后介绍)。,while语句注意事项:,int a=0,b=0;while(a 0)/a 0为假,b+不可能执行 b+;,(4)在执行while语句之前,循环控制变量必须初始化,否则执行的结果将是不可预知的。(5)要在while语句的某处(表达式或循环体内)改变循环控制变量,否则极易构成死循环。(6)允许while语句的循环体又是while语句,从而形成双重循环。,while语句注意事项:,例:计算10!#include void main()int i;/i应赋初始值10 long s=1;while(i=1)s*=i-;printf
5、(10!=%ldn,s);,i=1;while(i 100)/死循环,因为i的值没变化,永远小于100 sum+=i;printf(sum=%dn,sum);,i=1;while(i=9)j=1;while(j=9)printf(%d*%d=%dn,i,j,i*j);j+;i+;,while(1)循环体;,【例6-2】求两个正整数的最大公因子。我们采用Euclid(欧几里德)算法来求最大公因子,其算法是:(1)输入两个正整数m和n。(2)用m除以n,余数为r,如果r等于0,则n是最大公因子,算法结束,否则(3)。(3)把n赋给m,把r赋给n,转(2)。,#include void main()
6、int m,n,r;printf(Please input two positive integer:);scanf(%d%d,运行结果:Please input two positive integer:24 56Their greatest common divisor is 8,main()int a=1,n;printf(n input n:);scanf(%d,输入:n=2,n-=2a+a=1a+*2 输出:2n=1 a=2,n=1 a=2a+a=2a+*2 输出:4n-=0 a=3,2.do_while语句,一般形式:,do 循环体语句;while(表达式);,执行流程:,其中:w
7、hile后面的括号()不能省。while最后面的分号;不能省。while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,特点:先执行循环体,再判断表达式,【例5.2】用do_while语句求1100的累计和。,#include void main()int i=1,sum=0;do sum+=i;i+;while(i=100);printf(sum=%dn,sum);,运行结果:sum=5050,空复合词句作为循环体 dowhile();空语句作为循环体 do;while();死循环
8、do while(1);,do_while语句注意事项:,int a=0,b=0;do b+;while(a 0);,(1)如果do-while后的表达式的值一开始就为假,循环体还是要执行一次。(2)在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号,否则将产生语法错误。(3)循环体中的语句可为任意类型的C语句。(4)和while语句一样,在使用do-while语句时,不要忘记初始化循环控制变量,否则执行的结果将是不可预知的。(5)要在do-while语句的某处(表达式或循环体内)改变循环控制变量的值,否则极易构成死循环。(6)do-whil
9、e语句也可以组成多重循环,而且也可以和while语句相互嵌套。,例5.3 while和dowhile比较,#include main()int i,sum=0;scanf(%d,main()int i,sum=0;scanf(%d,输入:1,输出:55,输出:55,输入:11,输出:11,输出:0,Do while语句先执行循环体i+,sum=0+11.再判断表达式i=10,不满足,退出。While语句先判断表达式i=10,不满足,退出,不执行循环体,当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则不相同,3.for语句,一般形式:,for(表达式1;表达式2;表达
10、式3)循环体语句;,执行流程:,其中:for后面的括号()不能省。表达式1:一般为赋值表达式,给控制变量赋初值。表达式2:关系表达式或逻辑表达式,循环控制条件。表达式3:一般为赋值表达式,给控制变量增量或减量。表达式之间用分号分隔。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,for语句很好地体现了正确表达循环结构应注意的三个问题:控制变量的初始化。循环的条件。循环控制变量的更新。,【例5-4】用for语句求1100的累计和。,#include void main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(sum=%dn,sum);,
11、运行结果:sum=5050,for语句注意事项:,例:计算1*2+3*4+5*6+99*100。int i,j;long sum=0;for(i=1,j=2;i=99;i=i+2,j=j+2)sum+=i*j;printf(sum=%ldn,sum);,(1)表达式1、表达式2、和表达式3可以是任何类型的表达式。比方说,这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。,逗号表达式,逗号表达式,#include void main()int i,sum=0;i=1;for(;i=100;i+)sum+=i;printf(sum=%dn,sum);,#include void m
12、ain()int i,sum=0;i=1;for(;i=100;)sum+=i+;printf(sum=%dn,sum);,for语句注意事项:,省掉表达式1,3,省掉表达式1,(2)表达式1、表达式2、和表达式3都是任选项,可以省掉其中的一个、两个或全部,但其用于间隔的分号是一个也不能省的。,#include void main()int i,sum=0;i=1;for(;)if(i 100)break;sum+=i+;printf(sum=%dn,sum);,省掉表达式1,2,3,;不能省,main()int i,j,k;for(i=0,j=10;i=j;i+,j-)k=i+j;print
13、f(%d+%d=%dn,i,j,k);,表达式1和表达式3可以是逗号表达式,逗号表达式按从左到右原则,取最右边表达式的值,0+10=101+9=102+8=103+7=104+6=105+5=10,注意:i=0,j=10表达式值:10但i=0 j=10依然被赋值,for语句注意事项:,for(a=1;a+)printf(,(3)表达式2如果为空则相当于表达式2的值是真。,死循环!,(4)循环体中的语句可为任意类型的C语句。(5)for语句也可以组成多重循环,而且也可以和while语句和do-while语句相互嵌套。(6)循环体可以是空语句。,例:计算用户输入的字符数(当输入是回车符时统计结束)
14、。#include void main()int n=0;printf(input a string:n);for(;getchar()!=n;n+);printf(%d,n);,表示循环体为空语句,并非表示for语句结束,(7)无限循环:for(;)相当于:while(1)语句(8)for语句可以转换成while结构,expr1;while(expr2)循环体语句;expr3;,例 用for循环求,#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);,for(i=1;i=100;i+)sum=sum+i;等同于i
15、=1;while(i=100)sum=sum+i;i+;,例1:(用for循环实现)计算s=1+2+3+n(n1)例2:说明以下循环语句的循环次数。for(i=0;i=0;i-);答:(3)i=1;while(ij;i+,j-);答:,n-1次,n+1次,n-1次,1次,0次,0次,for(k=1;k=n;k+)s+=k;,练习,x=3;do x-;printf(“%d,”,x);while(x=0);答:(2)s=0;for(i=0,j=100;i=j;i+,j-)s+=i+j;printf(“%d”,s);答:,2,1,0,-1,5100,显然,i+j100,i从0到50,共循环51次,例
16、3:分析以下程序的输出结果,练习,例1:计算s=1+2+3+n(n1)#include“stdio.h”main()int s,k,n;printf(“Input n=“);scanf(“%d”,则可省去复合词句。,练习,问题与思考:/*L1*/行中,若令k的初值为0,请填空:s=0;k=0;while()s+=k+;答:(2)将/*L2*/行进行如下改动,请填空:s=0;k=;while()k+;s+=k;答:,s=0;k=1;/*L1*/while(k=n)s+=k;k+;/*L2*/,练习,应填入 k=n或kn+1,第一空应填入 0,或-1第二空应填入kn或k=n-1,s=1+2+n,s
17、=0+1+2+n,k=0 k+=1k=-1 k+=0,三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程,(1)while()while().,(2)do do while();.while();,(3)while()do while();.,嵌套循环的跳转禁止:从外层跳入内层 跳入同层的另一循环 向上跳转,4.循环嵌套,例 循环嵌套,输出九九表,#include main()int i,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=
18、9)?%4dn:%4d,i*j);,1.i=1,j=1 i*j=1*1=1,2.i=1 j=2 i*j=1*2=2,3.i=1 j=9 i*j=9 换行,4.i=1,j=10 内循环结束 i=2,j=1,外循环赋初值,先做内循环,内循环结束,跳转到外循环,外循环改变初值,再做内循环。依次类推,直到外循环也不被满足,则跳出整个循环,for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);,1.i=1,j=1 i*j=1*1=1,2.i=1 j=2 i*j=1*2=2,3.i=1 j=9 i*j=9 换行,4.i=1,j=10 内循环结束 i
19、=2,j=1,几种循环的比较,四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用goto型循环。while和do-while循环,循环体中应包括使循环趋于结束的语句。for语句功能最强。用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。,5.break与continue语句,break语句功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:(1)break不能用于循环语句和switch语句之外的任何其它语句之中。(2)break只能终止并跳出最近一层的结构。(
20、3)break语句对if-else的条件语句不起作用。,while(表达式1)if(表达式2)break;语句,do if(表达式2)break;while(表达式1);语句,for(;表达式1;)if(表达式2)break;语句,5.7.1 用break语句提前终止循环,例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。,5.7.1 用break语句提前终止循环,编程思路:循环次数不确定,但最多循环1000次在循环体中累计捐款总数用if语句检查是否达到10万元如果达到就不再继续执行循环,终止累加计算人均捐款数,5.7.1 用
21、break语句提前终止循环,编程思路:变量amount,用来存放捐款数变量total,用来存放累加后的总捐款数变量aver,用来存放人均捐款数定义符号常量SUM代表100000,#include#define SUM 100000int main()float amount,aver,total;int i;for(i=1,total=0;i=SUM)break;aver=total/i;printf(“num=%dnaver=%10.2fn“,i,aver);return 0;,指定符号常量SUM代表100000,#include#define SUM 100000int main()flo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 结构 程序设计 语言 程序
链接地址:https://www.31ppt.com/p-6618504.html