您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第06章 循环结构程序设计新
1计算机学院鄢莉2008.3第六章循环结构本章要点:第一节:概述(了解)第二节:goto语句(自学)第三节:while语句(掌握)第四节:do-while语句(掌握)第五节:for语句(掌握)第六节:循环的嵌套(掌握)第七节:循环的比较(理解)第八节:break语句和continue语句(掌握)第九节:程序举例(实验)2计算机学院鄢莉2008.3第一节概述在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。用C语言实现循环共有四种方式:1、用goto语句和if语句构成循环;2、用while语句构成循环;3、用do-while语句构成循环;4、用for语句构成循环。3计算机学院鄢莉2008.3一般形式:while(表达式)循环体语句;执行流程:第三节while语句expr循环体假(0)真(非0)while4计算机学院鄢莉2008.3特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,goto无限循环:while(1)循环体;5计算机学院鄢莉2008.3例1:求1到100的累加和。i=1当i=100sum=sum+ii=i+1#includestdio.hmain(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(%d,sum);}循环初值循环终值循环变量增值循环条件循环体6计算机学院鄢莉2008.3例2:显示1~10的平方main(){inti=1;while(i=10){printf(%d*%d=%d\n,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=1007计算机学院鄢莉2008.3例3:统计从键盘输入一行字符的个数。#includestdio.hmain(){intn=0;printf(“Pleaseinputastring:\n”);while(getchar()!='\n')n++;printf(“%d\n”,n);}8计算机学院鄢莉2008.3第四节do-while语句用来实现直到型循环;先执行语句,后判断表达式。一般形式:do语句while(表达式);一般情况下,do-while结构和while结构完全相同。但如果判断条件在最初为假时,则前者多执行一次。9计算机学院鄢莉2008.3执行流程:说明:至少执行一次循环体do~while可转化成while结构expr循环体假(0)真(非0)循环体While循环do循环体expr假(0)真(非0)while10计算机学院鄢莉2008.3例:求1到100的累加和。main(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i=100);printf(“%d”,sum);}i=1sum=sum+ii=i+1当i=100(或直到i100);不能少11计算机学院鄢莉2008.3注意:1.在if语句,while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号。2.do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。3.在do和while之间的循环体由多个语句组成时,也必须用{}括起来组成一个复合语句。4.do-while和while语句相互替换时,要注意修改循环控制条件。12计算机学院鄢莉2008.3一般形式:for([expr1];[expr2];[expr3])循环体语句;执行流程:expr2循环体假(0)真(非0)forexpr1expr3第五节for语句13计算机学院鄢莉2008.3for语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值){循环体语句;}说明:for语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省无限循环:for(;;)for语句可以转换成while结构expr1;while(expr2){循环体语句;expr3;}例用for循环求#includestdio.hmain(){inti,sum=0;for(i=1;i=100;i++)sum+=i;printf(%d,sum);}14计算机学院鄢莉2008.3例:#includestdio.hmain(){inti=0;for(i=0;i10;i++)putchar(‘a’+i);}运行结果:abcdefghij例:#includestdio.hmain(){inti=0;for(;i10;i++)putchar(‘a’+i);}例:#includestdio.hmain(){inti=0;for(;i10;)putchar(‘a’+(i++));}例:#includestdio.hmain(){inti=0;for(;i10;putchar(‘a’+i),i++);}省略exp1循环体内语句15计算机学院鄢莉2008.3main(){inti,j,k;for(i=0,j=100;i=j;i++,j--){k=i+j;printf(%d+%d=%d\n,i,j,k);}}#includestdio.hmain(){charc;for(;(c=getchar())!='\n';)printf(%c,c);}Exp1,exp3:逗号表达式#includestdio.hmain(){charc;for(;putchar(getchar())!='\n';);}#includestdio.hmain(){inti;for(i=0;(getchar())!='\n';i+=3)printf(%c,i);}并非循环控制量16计算机学院鄢莉2008.3例4:从2开始,输出n个连续的偶数。voidmain(){inta=1,n,i;printf(“\ninputn:”);scanf(“%d”,&n);for(i=1;i=n;i++)printf(“%d”,i*2);printf(“\n”);}17计算机学院鄢莉2008.3第六节循环的嵌套一、循环的嵌套:一个循环体内又包含另一个完整的循环结构。可多层嵌套。二、嵌套的种类:三种循环都可以互相嵌套。1、while–while2、do-while---do–whilewhile()do{…{…while()do{….}{…}}while();}while();18计算机学院鄢莉2008.33、for—for4、for—whilefor(;;)for(;;){…{…for(;;)while(){…}{…}}}5、while—do-while6、do-while—forwhile()do{…{do…{…}for(;;)while();{…}}}while();19计算机学院鄢莉2008.3例5:打印如右图图形。*********main(){inti,j,k;for(i=1;i=3;i++){for(j=1;j=3-i;j++)printf(“”);/*打印前导空格*/for(k=1;k=2*i-1;k++)printf(“*”);/*打印‘*’符号*/printf(“\n”);}}问:输出5行呢,9行呢?输出n行程序怎样修改?20计算机学院鄢莉2008.3程序中的语句通常总是按顺序方向,或按语句功能所定义的方向执行的。如果需要改变程序的正常流向,可以使用转移语句。在C语言中提供了4种转移语句:goto,break,continue和return。1.goto语句goto语句也称为无条件转移语句,其一般格式如下:goto语句标号;其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。第七节转移语句21计算机学院鄢莉2008.32、break语句break语句只能用在switch语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。break语句的一般形式为:break;使用break语句可以使循环语句有多个出口,在一些场合下使编程更加灵活、方便。3、continue语句continue语句只能用在循环体中,其一般形式是:continue;其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。4、return语句22计算机学院鄢莉2008.3expr……break;……假(0)真(非0)whilebreak、continue的流程图expr……continue;……假(0)真(非0)while23计算机学院鄢莉2008.3例6:输出100—200之间的不能被3整除的数。main(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(“%d”,n);}printf(“\n”);}若n能被3整除则终止本次循环,继续执行“n++”24计算机学院鄢莉2008.3例7:输出100以内的素数。素数是只能被1和本身整除的数。可用穷举法来判断一个数是否是素数。P127例6.9main(){intn,i;for(n=2;n=100;n++){for(i=2;in;i++)if(n%i==0)break;if(i=n)printf(“\t%d”,n);}}若n能被i整除则跳出内循环,执行下条语句。25计算机学院鄢莉2008.3第八节几种循环的比较(1)for语句主要用于给定循环变量初值,步长增量以及循环次数的循环结构。(2)循环次数及控制条件要在循环过程中才能确定的循环可用while或do-while语句。(3)三种循环语句可以相互嵌套组成多重循环。循环之间可以并列但不能交叉。(4)可用转移语句把流程转出循环体外,但不能从外面转向循环体内。(5)在循环程序中应避免出现死循环。26计算机学院鄢莉2008.3例6.6用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于10-6为止。(穷举)pi∏;t项;s项的符号;n项的分母N-S结构化流程图表示算法第九节程序举例掌握几种常用算法(如穷举、迭代、递推等)t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi27计算机学院鄢莉2008.3例6.6求pi的近似值#includestdio.h#includemath.hvoidmain(){ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf(″pi=%10.6f\n″,pi);}运行结果:pi=3.14159428计算机学院鄢莉2008.3§6.9程序举例(迭代)例6.7求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)(n≥3)算法如图所示:1Ff1=1,f2=1fori=1to20输出f1,f2f1=f1+f2f2=f2+f129计算机学院鄢莉2008.3例6.7求Fibonacci数列前40个数。#includestdio.hvoidmain(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i=20;i++){printf(″%12ld%12ld″,f1,f2);if(i%2==0)printf(″\n″);f1=f1+f2;f2=f2+f1;}}1001nn运行结果:153
本文标题:第06章 循环结构程序设计新
链接地址:https://www.777doc.com/doc-4021668 .html