《C语言编程教程 第6章 循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言编程教程 第6章 循环结构程序设计.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1一、一、概概 述述二二、gotogoto语句语句三、循环三、循环whilewhile循环循环直到型循环直到型循环forfor循环循环循环的嵌套循环的嵌套各种循环的比较各种循环的比较四、四、breakbreak语句语句和和continuecontinue语句语句的作用的作用五、五、综合举例综合举例教学要点教学要点2C程序设计程序设计3/27概概 述述什么是循环?什么是循环?为什么要使用循环?为什么要使用循环?问题问题1 1:在许多问题中需要用到循环控制。循环结构是结构化程序设在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂计的基本结构
2、之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。程序的基本构造单元。问题问题2:2:求学生平均成绩求学生平均成绩 分数相加后除以课分数相加后除以课程程数数重复执行某一种动作(代码)若干次。重复执行某一种动作(代码)若干次。3C程序设计程序设计4/27gotogoto 语句语句1、作用:无条件转移、作用:无条件转移2、格式、格式:gotogotogotogoto 语句标号(标识符)语句标号(标识符)语句标号(标识符)语句标号(标识符);例:例:100#include 求求 n main()n=1 int i,sum=0;i=1;运行结果为运行结果为:5050 loop:if(i=
3、100)sum=sum+i;i+;goto loop;printf(“%d”,sum);3、说明:目前说明:目前goto语句很少使用语句很少使用,过多的使用过多的使用goto语句会降低程语句会降低程序的可读性。序的可读性。41 1、功能:功能:whilewhile语句一般完成当型循环。语句一般完成当型循环。2 2、格式:、格式:while while while while(表达式表达式表达式表达式p p p p)循环体循环体循环体循环体 3 3、执行过程:当表达式、执行过程:当表达式P P为非零时,反复执行语句为非零时,反复执行语句S S,直到,直到P P为为假时才停止假时才停止。while
4、while循环循环S P T F 当当P为真为真 S 5 100例如例如例如例如:求求求求 n n n n n=1n=1main()main()intint i,sumi,sum=0;=0;i=1;i=1;while(i=100)while(i=100)sum=sum+i;sum=sum+i;i+;i+;printf(printf(“%d%d”,sum,sum););i=1当当i=100Sum=sum+ii+要点要点:若循环体不止包含一条语句时,若循环体不止包含一条语句时,应用应用括起来。括起来。在循环体中应有使循环趋于结束在循环体中应有使循环趋于结束的语句,以避免的语句,以避免“死循环死循环
5、”。61 1、说明:、说明:C C中一般用中一般用dodowhilewhile语句实现直到型循环。语句实现直到型循环。2 2、格式:、格式:do do do do 循环体语句循环体语句循环体语句循环体语句 while while while while(表达式表达式表达式表达式p p p p););););3 3、执行过程:先执行循环体语句,后判定表达式,当表达式的执行过程:先执行循环体语句,后判定表达式,当表达式的值为值为“假假”时,循环结束。时,循环结束。直到型循环直到型循环7 100100例如例如例如例如:求求求求 n n n n n=1n=1mainmain()()intint i i
6、,sum=0sum=0;i=1;i=1;do do sum=sum=sum+isum+i;i+i+;while while(i=100);i100Sum=sum+ii+8(1 1)注意)注意whilewhile与与do_while do_while 循环最后的循环最后的“;”。(2 2)whilewhile与与do_whiledo_while执行循环体与判断的顺序不同,当执行循环体与判断的顺序不同,当表达式初值为表达式初值为0 0时结果不同。时结果不同。(3 3)各自的应用场合不同。)各自的应用场合不同。(4 4)forfor语句使用最为灵活,完全可以替代语句使用最为灵活,完全可以替代whil
7、ewhile语句。语句。(5 5)各种形式的循环都可以用来处理同一问题,一般情况)各种形式的循环都可以用来处理同一问题,一般情况下它们可以互相替代。下它们可以互相替代。各种循环的比较各种循环的比较91 1、功能:、功能:用于循环次数已确定或仅给定循环结束条件的循环,用于循环次数已确定或仅给定循环结束条件的循环,适合于描述一个事物从初始态到终止态的变化过程。适合于描述一个事物从初始态到终止态的变化过程。2 2、格式:、格式:forforforfor(表达式表达式表达式表达式1;1;1;1;表达式表达式表达式表达式2;2;2;2;表达式表达式表达式表达式3)3)3)3)循环体循环体循环体循环体;3
8、 3、执行过程执行过程:(1)(1)求解表达式求解表达式1 1(初值)(初值);(2)(2)求解表达式求解表达式2,2,为真为真,执行循环体执行循环体;否则执行步骤否则执行步骤4;4;(3)(3)求解表达式求解表达式3;3;转步骤转步骤2 2(4)(4)执行执行forfor下面的语句下面的语句.4 4、使用要点使用要点forfor循环循环10 100例如:求例如:求例如:求例如:求 n n n=1for(i=1;i=100;i+)sum=sum+i;forfor循环执行过程循环执行过程11(1)(1)表达式表达式1 1可以省略可以省略,但在但在forfor循环之前应给循环变量赋值循环之前应给循
9、环变量赋值.例如例如:i=1;i=1;for(;ifor(;i=100;i+)=100;i+)sum=sum=sum+isum+i;(2)(2)表达式表达式3 3也可以省略也可以省略,但循环体中应用改变循环变量值的语句但循环体中应用改变循环变量值的语句.例如例如:for(sumfor(sum=0,i=0;i=100;)=0,i=0;i=100;)sum=sum=sum+isum+i;i+;i+;(3)(3)表达式表达式1 1和表达式和表达式3 3可同时省略(等同于可同时省略(等同于whilewhile循环)循环)例如例如:i=1;sum=0;i=1;sum=0;for(;ifor(;i=100
10、;)=100;)sum=sum=sum+isum+i;i+;i+;forfor循环使用要点循环使用要点12(4)(4)三个表达式都可以省略三个表达式都可以省略,但但“;”不能省略。不能省略。例如例如:for(;)sum=sum+i;for(;)sum=sum+i;(5)(5)表达式表达式1 1和表达式和表达式3 3可以是循环变量的赋初值可以是循环变量的赋初值,也可以是与赋初也可以是与赋初 值根本无关的其他表达式值根本无关的其他表达式,或者两者兼而有之或者两者兼而有之.例如例如:for(sumfor(sum=0,i=1;i=100;i+)=0,i=1;i=100;i+)sum=sum=sum+i
11、sum+i;for(sumfor(sum=0,i=1;i=100;sum=0,i=1;i=100;sum=sum+i,isum+i,i+);+);(6)(6)表达式表达式2 2一般是关系或逻辑表达式一般是关系或逻辑表达式,也可以是其他表达式。也可以是其他表达式。例如例如:for(ifor(i=0;(c=0;(c=getchargetchar()!=()!=n;printf(“%c”,cn;printf(“%c”,c););forfor循环使用要点循环使用要点该循环为死循环。该循环为死循环。若输入若输入:cauc 输出为输出为:cauc不是输出不是输出ccaauucc.13C程序设计程序设计14
12、/27循环的嵌套循环的嵌套1 1、定义:一个循环体内又包含另一个完整的循环结构、定义:一个循环体内又包含另一个完整的循环结构 称为循环的称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。2 2、下面几种都是合法的形式:、下面几种都是合法的形式:(1)while()(2)do (3)for(;)while()do for(;)while();while();14C程序设计程序设计15/27循环的嵌套循环的嵌套(4)while()(5)for(;)(6)do do while()for(;)while()while()15breakbre
13、ak语句语句1.1.功能:功能:用于从循环体内跳出循环体,即提前结束循环,接着用于从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句执行循环下面的语句例例:计算计算r=1r=1到到r=10r=10的圆面积的圆面积,当面积大于当面积大于100100时结束循环。时结束循环。for(r=1;r=10;r+)for(r=1;r100)area100)breakbreak;printf(printf(“%f%f”,area,area););2 2、注意:、注意:breakbreak只能用在循环语句和只能用在循环语句和switchswitch语句中语句中.161 1、功能、功能:结束本次循环结束
14、本次循环,即跳过该语句后面尚未执行的语句,接着进即跳过该语句后面尚未执行的语句,接着进行下一次是否执行循环的判定。行下一次是否执行循环的判定。例:把例:把100200100200之间的不能被之间的不能被3 3整除的数输出整除的数输出.main()main()intint n;n;for(nfor(n=100;n=200;n+)=100;n=200;n+)if(n%3=0)continue;if(n%3=0)continue;printf(printf(“%d%d”,n,n););2 2、continuecontinue与与breakbreak的区别的区别:continuecontinue结束本
15、次循环结束本次循环,而而breakbreak终止本层循环终止本层循环.continuecontinue语句语句17continuecontinue语句语句 while(表达式表达式1)for if(表达式表达式2)break;continue18例例6_16_1 用用/4=1-1/3+1/5-1/7+/4=1-1/3+1/5-1/7+.公式求公式求 的近似值的近似值,直到某直到某一项的绝对值小于一项的绝对值小于1010-6-6为止为止.#include#include#include#include main()main()intint s=1;s=1;float n=1.0,t=1,pi=0
16、;float n=1.0,t=1,pi=0;while(while(fabs(tfabs(t)=1e-6)=1e-6)pi=pi+t;n+=2;pi=pi+t;n+=2;s=-s;t=s/n;s=-s;t=s/n;pi=pi*4;printf(pi=pi*4;printf(“pi=%10.6fnpi=%10.6fn”,pi);,pi);19例例6_26_2 求求FibonacciFibonacci数列数列:1,1,2,3,5,8,:1,1,2,3,5,8,的前的前4040个数个数.公式为公式为:F F1 1=1 =1 (n=1)(n=1)F F2 2=1 =1 (n=2)(n=2)F Fn n
17、=F=Fn-1n-1+F+Fn-2n-2 (n=3)(n=3)main()main()long f1=1,f2=1;long f1=1,f2=1;intint i;i;for(i=1;i=20;i+)for(i=1;i=20;i+)printf(printf(“%12ld%12ld%12ld%12ld”,f1,f2);,f1,f2);if(i%2=0)if(i%2=0)printf(printf(“nn”););f1=f1+f2,f2=f2+f1;f1=f1+f2,f2=f2+f1;20例例6_3 6_3 判断判断m m是否为素数是否为素数算法为算法为:用用2 2sqrt(m)sqrt(m)之
18、间的数除之间的数除m,m,如果如果m m能被能被2 2sqrt(m)sqrt(m)之中的任之中的任何一个整数整除则提前结束何一个整数整除则提前结束,若若m m不能被不能被2 2sqrt(m)sqrt(m)之间的之间的任意整数整除任意整数整除,则表明则表明m m是素数是素数.21#include#include main()main()intint m,i,k;m,i,k;scanf(scanf(“%d%d”,&m);k,&m);k=sqrt(msqrt(m););for(i=2;i=k;i+)for(i=2;i=k+1)if(i=k+1)printf(printf(“%d%d is a pri
19、me numbern is a prime numbern”,m);,m);else else printf(printf(“%d%d is not a prime numbern is not a prime numbern”,m);,m);22例例6_4 6_4 写出下面程序的输出结果写出下面程序的输出结果main()main()intint x=3,y=6,a=0;x=3,y=6,a=0;while(x+!=(y-=1)while(x+!=(y-=1)a+=1;a+=1;if(yx)break;if(ynum2)temp=num1,num1=num2,num2=temp;if(num1n
20、um2)temp=num1,num1=num2,num2=temp;for(i=2;inum1;i+)for(i=2;inum1;i+)if(num1%i=0&num2%i=0)break;if(num1%i=0&num2%i=0)break;printf(printf(“maxmax common divisor is%d common divisor is%d”,i);,i);for(j=num2;j+)for(j=num2;j+)if(j%num1=0&j%num2=0)break;if(j%num1=0&j%num2=0)break;printf(printf(“minmin comm
21、on multiple is%d common multiple is%d”,j);,j);24方法二:方法二:main()main()intint a,b,num1,num2,temp;a,b,num1,num2,temp;scanf(scanf(“%d,%d%d,%d”,&num1,&num2);,&num1,&num2);if(num1num2)if(num1num2)temp=num1,num1=num2,num2=temp;temp=num1,num1=num2,num2=temp;a=num1,b=num2;a=num1,b=num2;while(b!=0)while(b!=0)t
22、emp=a%b,a=b,b=temp;temp=a%b,a=b,b=temp;printf(printf(“maxmax common divisor is%d common divisor is%d”,a);,a);printf(printf(“minmin common multiple is%d common multiple is%d”,num1*num2/a);,num1*num2/a);25例例6_66_6 求出所有的水仙花数求出所有的水仙花数.main()main()intint i,j,k,m,n;i,j,k,m,n;for(m=101;m1000;m+)for(m=101;m
23、1000;m+)n=m;n=m;k=n%10;n=n/10;k=n%10;n=n/10;j=n%10;n=n/10;j=n%10;n=n/10;i=n%10;i=n%10;if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(printf(“%5d%5d”,m),m);26C程序设计程序设计27/27例例6_7 6_7 译密码。(课本译密码。(课本P128P128例例6 6.10.10)#include#include main()main()char c;char c;while(c=while(c=getchargetchar()!=()!=nn)if(c=if(c=a a&c=&c=)|(c=A A&c&c if(cZ Z&z&z+4|cz z)c=c-26;)c=c-26;printf(printf(“%c%c”,c,c););27