《第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 5.1 循环结构的程序设计循环结构的程序设计 l说明:循环体有可能一次也不执行循环体如包括有一个以上的语句,则必须用 括起来,组成复合语句。下列情况,退出while循环条件表达式不成立(为零)循环体内遇br
2、eak,return,goto无限循环:while(1)循环体;注意:注意:循环要赋初值,初值要放在循环体外。main()int a=1,n;printf(n input n:);scanf(%d,&n);while(n-)printf(%d ,a+*2);输入:n=2n-=2a+a=1a+*2 输出:2n=1 a=2n=1 a=2a+a=2a+*2 输出:4n-=0 a=3 空复合词句作为循环体空复合词句作为循环体 dowhile();空语句作为循环体空语句作为循环体 do;while();死循环死循环 do while(1);例例5.3 while和和dowhile比较比较#include
3、 main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);输入:输入:1输出:输出:55输出:输出:55输入:输入:11输出:输出:11输出:输出:0Do while语句先执行循环体语句先执行循环体i+,sum=0+11.再判断表达式再判断表达式i=10,不满足,退出。,不满足,退出。While语句先判断表达式语句先判断表达式i=10,不满足,退出,不,不满足,退出,不执行循环
4、体执行循环体当当while后面的表达式的第一次的值为后面的表达式的第一次的值为“真真”时,两种循环得到的结果相同;否则不相同时,两种循环得到的结果相同;否则不相同FT main()int i,j,k;for(i=0,j=10;i=j;i+,j-)k=i+j;printf(%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依然被赋值依然被赋值。expr1;while(expr2)循环体语句
5、;expr3;例 用for循环求 1001nn#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=1;while(i=100)sum=sum+i;i+;例1:(用for循环实现)计算s=1+2+3+n (n1)例2:说明以下循环语句的循环次数。(1)for(i=0;i=0;i-);答:(3)i=1;while(in)+i;答:(4)i=4;do i-;while(i0);答:(5)m=5;while(mj;i+,j-);答:n-1次n+1次n-1
6、次1次0次0次for(k=1;k=0);答:(2)s=0;for(i=0,j=100;i=j;i+,j-)s+=i+j;printf(“%d”,s);答:2,1,0,-15100显然,i+j100,i从0到50,共循环51次例3:分析以下程序的输出结果练习练习例例1:计算:计算s=1+2+3+n (n1)#include“stdio.h”main()int s,k,n;printf(“Input n=“);scanf(“%d”,&n);s=0;k=1;/*L1*/while(k=n)s+=k;k+;/*L2*/printf(“s=%dn”,s);程序中,程序中,/*L2*/行可以简化为行可以简
7、化为 while(k=n)s+=k+;则可省去复合词句。则可省去复合词句。练习练习问题与思考:问题与思考:(1)/*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-1s=1+2+ns=0+1+2+nk=0 k+=1k=
8、-1 k+=0 例 循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.ij#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=9)?%4dn:%4d,i*j);1.i=1,j=1 i*j=1*1=12.i=1 j=2 i*j=1*2=23.i=1 j=9 i*j=9 换行4.i=1,j=10 内循环结束 i=2,j=1外循环赋初值,先做内循环,
9、内循环结束,跳转到外循环,外循环改变初值,再做内循环。依次类推,直到外循环也不被满足,则跳出整个循环1.i=1,j=1 i*j=1*1=12.i=1 j=2 i*j=1*2=23.i=1 j=9 i*j=9 换行换行4.i=1,j=10 内循环结束内循环结束 i=2,j=1几种循环的比较四种循环都可以用来处理同一个问题,一般可以互相代四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用替。但一般不提倡用goto型循环。型循环。while和和do-while循环,循环体中应包括使循环趋于循环,循环体中应包括使循环趋于结束的语句。结束的语句。for语句功能最强。语句功能最强。用用wh
10、ile和和do-while循环时,循环变量初始化的操作循环时,循环变量初始化的操作应在应在while和和do-while语句之前完成,而语句之前完成,而for语句可语句可以在表达式以在表达式1中实现循环变量的初始化。中实现循环变量的初始化。例例5.4 在全系在全系1000学生中,征集慈善学生中,征集慈善募捐,当总数达到募捐,当总数达到10万元时就结束,万元时就结束,统计此时捐款的人数,以及平均每人统计此时捐款的人数,以及平均每人捐款的数目。捐款的数目。编程思路:编程思路:u循环次数不确定,循环次数不确定,但最多循环但最多循环1000次次l在循环体中累计捐款总数在循环体中累计捐款总数l用用if语
11、句检查是否达到语句检查是否达到10万元万元l如果达到就不再继续执行循环,终止累加如果达到就不再继续执行循环,终止累加u计算计算人均捐款数人均捐款数编程思路:编程思路:u变量变量amount,用来存放捐款数,用来存放捐款数u变量变量total,用来存放累加后的总捐款数,用来存放累加后的总捐款数u变量变量aver,用来存放人均捐款数,用来存放人均捐款数u定义符号常量定义符号常量SUM代表代表100000#include#define SUM 100000int main()float amount,aver,total;int i;for(i=1,total=0;i=SUM)break;aver=
12、total/i;printf(“num=%dnaver=%10.2fn“,i,aver);return 0;指定符号常量指定符号常量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;应该执行应该执行1000次次#include#define SUM 100000int main()float amount,aver,
13、total;int i;for(i=1,total=0;i=SUM)break;aver=total/i;printf(“num=%dnaver=%10.2fn“,i,aver);return 0;达到达到10万,万,提前结束循环提前结束循环#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;实际捐款人数实际捐款人数exprbreak;假(0)
14、真(非0)whiledobreak;.expr假(0)真(非0)while break和和continue的区别的区别(1)break能用于循环语句和能用于循环语句和switch语句中,语句中,continue只能用于循环语句中。只能用于循环语句中。(2)continue语句的作用是跳过循环本中剩余的语句而语句的作用是跳过循环本中剩余的语句而强行执行下一次循环强行执行下一次循环,break结束整结束整 个循环,不再判定个循环,不再判定循环条件是否满足。循环条件是否满足。(3)循环嵌套时,)循环嵌套时,break和和continue只影响包含它们的只影响包含它们的最内层循环,与外层循环无关。最内
15、层循环,与外层循环无关。N表达式表达式1Y表达式表达式2NYN表达式表达式1Y表达式表达式2NYbreak语句语句continue语句语句强行退出循环强行退出循环只结束本次循环只结束本次循环 例例5.5 要求输出要求输出100200之间的不能之间的不能被被3整除的数。整除的数。编程思路:编程思路:u对对100到到200之间的每一个整数进行检查之间的每一个整数进行检查u如果不能被如果不能被3整除,输出,整除,输出,否则否则不输出不输出u无论是否输出此数,都要接着检查下一个无论是否输出此数,都要接着检查下一个数数(直到直到200为止为止)。Nn=100n200Yn能被能被3整除整除Nn=n+1输出
16、输出nYfor(n=100;n=200;n+)if(n%3=0)continue;printf(%d ,n);例例5.6 输出以下输出以下4*5的矩阵。的矩阵。1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20解题思路:解题思路:u可以用循环的嵌套来处理此问题可以用循环的嵌套来处理此问题u用外循环来输出一行数据用外循环来输出一行数据u用内循环来输出一列数据用内循环来输出一列数据u按按矩阵的格式矩阵的格式(每行每行5个数据个数据)输出输出#include int main()int i,j,n=0;for(i=1;i=4;i+)for(j=1;j=5;j+,n+)if(n%5=0)printf(“n”);printf(%dt,i*j);printf(n);return 0;累计输出数据的个数累计输出数据的个数控制控制一行内一行内输输出出5个数据个数据#include int main()int i,j,n=0;for(i=1;i=4;i+)for(j=1;j=5;j+,n+)if(n%5=0)printf(“n”);printf(%dt,i*j);