C-语言-第五章-循环结构1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1循环结构程序设计C语言程序设计Lecture52循环结构循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。在C语言中可以用以下语句来实现循环:1、用while语句;(“当”循环)2、用do--while语句;(“直到”循环)3、用for语句;(计数循环)4、用goto语句和if语句构成循环。35.1while语句1、while语句常称为“当型”循环语句。循环体非零零表达式42、while语句的形式:while(表达式)循环体;特点:先判断表达式,后执行语句。说明:–循环体有可能一次也不执行–循环体可为任意类型语句–下列情况,退出while循环•条件表达式不成立(为零)•循环体内遇break,return,goto–无限循环:while(1)循环体;5例(ch5_01.c)求1+2+3+4+5+···+100。#includestdio.hmain(){inti=1,sum=0;while(i=100){sum+=i;i++;}printf(%d,sum);}循环初值循环终值循环变量增值循环条件循环体6•break语句•一般形式:break;•功能:•跳出所在的多分支switch语句•跳出所在的while、do-while、for循环语句(提前结束循环)。•continue语句•一般形式:continue;•功能:•提前结束本次(本轮)循环体的执行,接着进行下一次循环条件的判别。7for(e1;e2;e3){…if(e)continue;…}break与continue的区别for(e1;e2;e3){…if(e)break;…}计算e1e2语句…非00e非0语句…计算e30break语句0计算e1e2语句…非00e非0语句…计算e3continue语句循环体8例(ch5_02.c)显示1~10的平方#includestdio.hmain(){inti=1;while(i=10){printf(%d*%d=%d\n,i,i,i*i);i++;}}(total.c;totalb.c;total5w.c;fib.c;calc3.c)运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=10095.2do--while语句1、do--while语句常称为“直到型”循环语句。循环体非00表达式102、do--while的形式:do循环体;while(表达式);特点:先执行,后判断。说明:–至少执行一次循环体–do~while可转化成while结构例:用do~while求1+2+3+4+5+···+100。(ch5_03.c)#includestdio.hmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i=100);printf(%d,sum);}111.循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。2.循环体中应有使循环趋于结束的语句。例:分析下列三个程序段使用循环结构要注意:i=1;while(i=100){putchar(‘*’);i++;}i=1;putchar(‘*’);i++;i=1;while(i=100);putchar(‘*’);i++;12当循环结构:main(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(“%d\n”,sum);}直到循环结构:main(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i=100);printf(“%d\n”,sum);}135.3for语句1、C语言中最灵活、最复杂的循环语句;表达式1表达式2循环体语句表达式3可以用于循环次数确定的情况;可以用于循环次数不确定的情况;可实现while和do--while语句所有功能。非00142、for的形式:for(表达式1;表达式2;表达式3)循环体说明:–for语句中expr1,expr2,expr3类型任意,都可省略,但分号不可省.–无限循环:for(;;)–for语句可以转换成while结构循环变量赋初值循环终止条件循环变量控制15sum=0;for(i=1;i=100;i++)sum=sum+i;它相当于以下语句:i=1;while(i=100){sum=sum+i;i++;}表达式1;while(表达式2){语句;表达式3;}163、for语句中表达式的省略(1)for语句一般形式中的“表达式1”可以省略;如:sum=0;i=1;for(;i=100;i++)sum=sum+i;(2)表达式2省略,即不判断循环条件,循环无终止地进行下去;如:for(sum=0,i=1;;i++){sum=sum+i;}if(i100)break;17(3)表达式3也可以省略,但此时保证循环能正常结束。如:for(sum=0,i=1;i=100;){sum=sum+i;i++;}(4)可以省略表达式1和表达式3,只有表达式2。如:i=1;sum=0;i=1;sum=0;for(;i=100;)while(i=100){sum=sum+i;{sum=sum+i;i++;i++;}}18(5)三个表达式都可省略,如:for(;;)循环体;相当于while(1)循环体;即不设初值,不判断条件,循环变量不增值。无终止地执行循环体。如:sum=0,i=1;for(;;){if(i100)break;sum=sum+i;i++;}19(6)循环体为空语句对for语句,循环体为空语句的一般形式为:for(表达式1;表达式2;表达式3);如:for(sum=0,i=1;i=100;sum+=i,i++);又如:要在显示器上复制输入的字符,输入的字符为‘.’时,结束循环。while(putchar(getchar())!=’.’);输入abcdefg.输出abcdefg.20例:#includestdio.hmain(){inti=0;for(;i10;putchar(‘a’+i),i++);}例:#includestdio.hmain(){inti=0;for(;i10;)putchar(‘a’+(i++));}例:#includestdio.hmain(){inti;for(i=0;i10;i++)putchar(‘a’+i);}运行结果:abcdefghij例:#includestdio.hmain(){inti=0;for(;i10;i++)putchar(‘a’+i);}21#includestdio.hmain(){charc;for(;(c=getchar())!='\n';)printf(%c,c);}main(){inti,j,k;for(i=1,j=100;i=j;i++,j--){k=i+j;printf(%d+%d=%d\n,i,j,k);}}22循环终止条件的种类:1.关系表达式:如前几例2.逻辑表达式:for(;ab&&xy;)3.字符表达式:for(;(c=getchar())!=‘\n’;)printf(“%c”,c);(cal8.c;totl5f.c;cent.c)23解题思路1.每当我们读入一张选票,只有6种情况,将它们加到相应的人选上。2.-1结束循环3.case语句作为开关。[例]统计选票。现有选票如下3,1,2,1,1,3,3,2,1,2,3,3,2,1,1,3,2,0,1,4,-1.-1是结束标志。设1选李,2选张,3选王,0和4为废票,谁会当选?24main(){intvote,l_vote,z_vote,w_vote,invalidvote;l_vote=0;z_vote=0;w_vote=0;invalidvote=0;scanf(“%d”,&vote);while(vote!=-1){switch(vote){case1:l_vote++;break;case2:z_vote++;break;case3:w_vote++;break;case0:case4:invalidvote++;break;}scanf(“%d”,&vote);}printf('Li%2d,zhang%d2d,wang%2d,invalid%2d”,l_vote,z_vote,w_vote,invalidvote);}25[例]输入一个整数,计算它的位数.并反向输出.分析:设一个数13579,一位一位地切下末位循环结束条件:num==0;同时计数count=count+1;1351357135797bitbit95bit13bit1bitbit=num%10num=num/10135791357135count=0;输入numnum!=0输出num%10count++num=num/10输出count31326main(){longintnum;intcount=0;printf(“Pleaseenteraninteger:\n”);scanf(“%ld”,&num);do{printf(“%d”,num%10);num=num/10;count++;}while(num!=0);printf(“%ddigits.”,count);}Pleaseenteraninteger:382992834digits.275.4goto语句1、无条件转移语句;形式:goto标号;2、有标号的语句称为标号语句;形式:标号:语句;3、goto语句在使用时只能转移到goto所在的函数内的标号处,不能转移到该函数外;4、可以从多重循环的内层转移到最外层,而break只能跳出一层循环。满足标识符的规定28main(){inti=1,sum=0;loop:if(i101){sum=sum+i;i++;gotoloop;}printf(“SUM=%f\n”,sum);}loop:sum=sum+i;i++;if(i101)gotoloop;29(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}5.6循环的嵌套三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环嵌套循环的执行流程嵌套循环的跳转禁止:–从外层跳入内层–跳入同层的另一循环(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环30(1)当外层循环结构每执行一次循环时,内层循环结构在一般情况下要从循环的开始到循环的正常结束从头到尾执行一遍。例1(2)在内层循环结构中使用break语句可以提前结束本次内层循环结构的执行,而不影响外层循环结构的继续执行。例2(3)如果程序因某种原因需要从内层循环体跳出整个循环结构,此时才可考虑使用goto语句。例3(4)对于并列的循环结构,控制循环执行的变量名字可以相同。在嵌套循环结构中,内、外层控制循环执行的变量名字不能相同。例4(nestfor.c)对于嵌套循环结构的几点说明:31例1:main(){inti,j;for(i=0;i3;i++){for(j=1;j=4;j++)printf(%d,j);printf(\n);}}运行后输出:123412341234例2:main(){inti,j;for(i=0;i3;i++){for(j=1;j=4;j++){printf(%d,j);if(!(j%3))break;}printf(\n);}}运行后输出:12312312332例4:main(){inti,j;for(i=0;i3;i++)printf(%d,i);printf(\n);for(i=1;i=4;i++)printf(%d,i);}运行后输出:例3:main(){inti,j;for

1 / 76
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功