《《C语言》教案第四章.ppt》由会员分享,可在线阅读,更多相关《《C语言》教案第四章.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第四章 循环结构程序设计概述C语言可实现循环的语句:l用goto 和 if 构成循环lwhile 语句ldo while 语句lfor 语句goto语句及用goto构成循环vgoto语句一般格式:goto 语句标号;.标号:语句;v功能:无条件转移语句v说明:l不能用整数作标号l只能出现在goto所在函数内,且唯一l只能加在可执行语句前面l限制使用goto语句例 用if 和goto语句构成循环,求/*ch4_1.c*/#include main()int i,sum=0;i=1;loop:if(i=100)sum+=i;i+;goto loop;printf(%d,sum);sum=0+1s
2、um=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体4.1 while语句和do-while语句4.1.1 while语句v一般形式:while(表达式)循环体语句;v执行流程:expr循环体假(0)真(非0)whilev特点:先判断表达式,后执行循环体v说明:l循环体有可能一次也不执行l循环体可为任意类型语句l下列情况,退出while循环u条件表达式不成立(为零)u循环体内遇break,return,gotol无限循环:while(1)循环体;例 用while循环求/*ch4_2.c*/#include main()in
3、t i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环终值循环变量增值循环条件循环体例 显示110的平方/*ch4_21.c*/#include 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=1004.1.2 dowhile语句v一般形式:do 循环体语句;while(表达式);v执行流程:do循环体expr假(0)真(非0)whilev特点:先
4、执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假(0)真(非0)循环体While循环例 用dowhile循环求/*ch4_3.c*/#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);4.1.3 while和dowhile的比较/*ch4_4.c*/#include main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);main()int i,sum=0;sc
5、anf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);4.2 for语句语句v一般形式:for(expr1;expr2;expr3)循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr3语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v说明:lfor语句中expr1,expr2,expr3 类型任意,都可省略,但分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;例 用for循环求#include main()int
6、 i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);例:#include main()int i=0;for(i=0;i10;i+)putchar(a+i);运行结果:abcdefghij例:#include main()int i=0;for(;i10;i+)putchar(a+i);例:#include main()int i=0;for(;i10;)putchar(a+(i+);例:#include main()int i=0;for(;i10;putchar(a+i),i+);4.2.2 循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包
7、含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().内循环外循环内循环v嵌套循环的跳转禁止:l从外层跳入内层l跳入同层的另一循环l向上跳转例 循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.ij/*ch4_5.c*/#include main()int i,j;for(i=1;i10;i+)printf(%4
8、d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);i10printf假(0)真(非0)i=1j+j=1j10真(非0)假(0)i+for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环内循环 4.2.3 4.2.3 辅助控制语句辅助控制语句breakbreak语句语句v功能:在循环语句和功能:在循环语句和switchswitch语句中语句中,终止并跳终止并跳出循环体或开关体。出循环体或开关体。v形式:形式:breakbreak;v说明:
9、说明:lbreakbreak只能终止并跳出最近一层的结构;只能终止并跳出最近一层的结构;lbreakbreak不能用于除循环语句和不能用于除循环语句和switchswitch语句语句之外的任何其它语句之中。之外的任何其它语句之中。exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)whileexpr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;.const 1const 2const ndefaultcase 例例 break举例:输出圆面积,
10、面积大于举例:输出圆面积,面积大于100时停止时停止#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);例例 break举例:小写字母转换成大写字母举例:小写字母转换成大写字母,直至输入非字母字符直至输入非字母字符#include main()char c;while(1)c=getchar();if(c=a&c=z)putchar(c-a+A);else break;continuecontinue语句语句v功能:结束功能:结束本次本次循环,跳过循环,跳过循环体中
11、循环体中尚未执行的尚未执行的语句,进行下一次是否执行循环体的判断。语句,进行下一次是否执行循环体的判断。v仅用于循环语句中。仅用于循环语句中。exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3例 求输入的十个整数中正数的个数及其平均值/*ch4_12.c*/#include main()int i,num=0,a;float sum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;print
12、f(%d plus integers sum:%6.0fn,num,sum);printf(Mean value:%6.2fn,sum/num);4.3 循环结构程序设计循环结构程序设计t=1,pi=0,n=1.0,s=1当当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出输出pi分子:分子:1,-1,1,-1分母:分母:1,3,5,7,.#includemain()int s;float n,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=%1
13、0.6fn,pi);例例 求求Fibonacci数列:数列:1,1,2,3,5,8,的前的前40个数个数f1=1,f2=1for i=1 to 20输出输出f1,f2f1=f1+f2f2=f2+f11534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155#includemain()long int
14、f1,f2;int i;f1=1;f2=1;for(i=1;i=20;i+)printf(%12ld%12ld ,f1,f2);if(i%2=0)printf(n);f1=f2+f1;f2=f1+f2;例例 判断判断m是否素数是否素数读入读入mk=mi=2当当i km被被i整除整除真真假假用用break结束循环结束循环i=i+1i k+1真真假假输出输出:m”是素数是素数”输出输出:m”不不是素数是素数”#include#includemain()int m,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;i=k+1)printf(%d is a prime number
15、n,m);else printf(%d is not a prime numbern,m);例例 译密码译密码例如例如 Hello,world!译成密码:译成密码:Lipps,asvph!#includemain()char c;while(c=getchar()!=n)if(c=a&c=A&cZ&cz)c=c-26;printf(%cn,c);百元买百鸡(穷举):已知公鸡每只百元买百鸡(穷举):已知公鸡每只5 5元,母鸡每元,母鸡每只只3 3元,小鸡元,小鸡1 1元元3 3只,可买公鸡、母鸡、小鸡几只只,可买公鸡、母鸡、小鸡几只#include#include int int mainmai
16、n()()int int x x,y y,z z;for(for(x x=0;=0;x x=100;=100;x x+)+)for(for(y y=0;=0;y y=100;=100;y y+)+)for(for(z z=0;=0;z z=100;=100;z z+)+)if(if(x x+y y+z z=100&15*=100&15*x x+9*+9*y y+z z=300)=300)printfprintf(“x=%(“x=%d d,y=%,y=%d d,z=%,z=%d d n n“,“,x x,y y,z z););return 0;return 0;设设设设x x、y y、z z分别
17、表示可买的公鸡、母鸡、分别表示可买的公鸡、母鸡、分别表示可买的公鸡、母鸡、分别表示可买的公鸡、母鸡、小鸡的个数,有不定方程组:小鸡的个数,有不定方程组:小鸡的个数,有不定方程组:小鸡的个数,有不定方程组:#include#include int int mainmain()()int int x x,y y,z z;for(for(x x=0;=0;x x=2020;x x+)+)for(for(y y=0;=0;y y=33=33;y y+)+)for(for(z z=0;=0;z z=100;=100;z z+)+)if(if(x x+y y+z z=100&15*=100&15*x x+
18、9*+9*y y+z z=300)=300)printfprintf(“x=%(“x=%d d,y=%,y=%d d,z=%,z=%d d n n“,“,x x,y y,z z););return 0;return 0;设设设设x x、y y、z z分别表示可买的公鸡、母鸡、分别表示可买的公鸡、母鸡、分别表示可买的公鸡、母鸡、分别表示可买的公鸡、母鸡、小鸡的个数,有不定方程组:小鸡的个数,有不定方程组:小鸡的个数,有不定方程组:小鸡的个数,有不定方程组:#include main()int i,j;for(i=1;i10;i+)printf(%-8d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)if(j=9)printf(%d*%d=%dn,i,j,i*j);else printf(%d*%d=%dt,j,i,j*i);