您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计基础 5.循环结构程序设计
第5章循环结构程序设计循环语句break和continue语句循环嵌套5.1循环语句问题•打印整数1~10•打印整数1~100•打印整数1~nprintf(%d,1);printf(%d,2);……printf(%d,10);i=1;printf(%d,i);i++;printf(%d,i);i++;……printf(%d,i);i++;i=1;while(i=10){printf(%d,i);i++;}while语句while(表达式)语句;语句表达式非00i=1;while(i=10){printf(%d,i);i++;}循环条件循环体循环不变式改变循环条件10求sum=ii=1sum=0sum+1—sumsum+2—sumsum+3—sum……sum+10—sumsum=sum+?sum=0;i=1;while(i=10){sum=sum+i;i++;}循环不变式for语句for(exp1;exp2;exp3)语句;exp3exp2非00循环条件exp1语句循环体while(表达式)语句;语句表达式非00for(exp1;exp2;exp3)语句;exp3exp2非00exp1语句exp1;while(exp2){语句;exp3;}while和forwhile和forwhile(表达式)语句;for(exp1;exp2;exp3)语句;exp1;while(exp2{语句;exp3;}sum=0;i=1;while(i=10){sum=sum+i;i++;}sum=0;for(i=1;i=10;i++)sum=sum+i;程序举例例T1-1求1+2+3+4+……+n例T1-2求1+1/2+1/3+1/4+……+1/n例T1-3求1-1/2+1/3-1/4+……1/n例T1-4求1-1/3+1/5-1/6+……前n项之和例T2-1求n!例T2-2求xn例T3-1求1-1/3+1/5-1/7+……,直到最后1项的绝对值10-5例T4-1输入100个整数,求其中正数之和例T4-2输入一个正整数n,再输入n个数,输出最大值例T5输出Fibonacci序列前20个数例T1-1求1+2+3+4+……+n算法:i=1tons=s+tt++i++程序段:s=0;for(i=1;i=n;i++)s=s+i;算法:i=1tons=s+ii++例T1-2求1+1/2+1/3+……+1/n算法:i=1tons=s+tt=1.0/ii++程序段:s=0;for(i=1;i=n;i++)s=s+1.0/i;算法:i=1tons=s+tt++i++例T1-3求1-1/2+1/3-1/4+……1/ni=1tons=s+tt=1.0/ii++程序段:s=0;flag=1;for(i=1;i=n;i++){s=s+1.0/i*flag;flag=-flag;}算法:i=1tons=s+tt=1.0/i*flagflag=-flagi++例T1-4求1-1/3+1/5-……前n项和算法:i=1tons=s+tt=1.0/i*flagflag=-flagi++程序段:s=0;flag=1;tt=1;for(i=1;i=n;i++){s=s+1.0/tt*flag;tt+=2;flag=-flag;}算法:i=1tons=s+tt=1.0/tt*flagflag=-flagtt=tt+2i++例T2-1求n!算法:i=1tonf=f*tt++i++程序段:f=1;for(i=1;i=n;i++)f=f*i;算法:i=1tonf=f*ii++例T2-2求xn算法:i=1tonf=f*tt++i++程序段:f=1;for(i=1;i=n;i++)f=f*x;算法:i=1tonf=f*tt=xi++例T3-1求1-1/3+1/5-…直到最后1项的绝对值10-5程序段:s=0;flag=1;tt=1;t=1;while(fabs(t)=1E-5){s=s+t;flag=-flag;tt+=2;t=1.0/tt*flag;}i=1tons=s+tt=1.0/tt*flagflag=-flagtt=tt+2i++算法:while|t|=1E-5s=s+tflag=-flagtt=tt+2t=1.0/tt*flag例T4-1输入100个整数,求其中正数之和#includestdio.hvoidmain(){inti,sum=0,x;for(i=0;i100;i++){scanf(%d,&x);if(x0)sum=sum+x;}printf(%d,sum);}例4-7求最大值输入3个数,输出其中的最大值。#includestdio.hvoidmain(){inta,b,c,max;printf(inputa,b,c:\n);scanf(%d%d%d,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;printf(maxis%d\n,max);}amaxbcmaxmax例T4-1输入一个正整数n,再输入n个数,输出最大值voidmain(){inti,max,n,x;scanf(%d,&n);if(n=1){scanf(%d,&x);max=x;for(i=1;in;i++){scanf(%d,&x);if(maxx)max=x;}printf(%d,max);}}xmaxmaxx例T5输出Fibonacci序列前20个数1,1,2,3,5,8,……x1x2tx1x2t程序段:x1=x2=1;printf(%d%d,x1,x2);for(i=1;i=18;i++){t=x1+x2;printf(%d,t);x1=x2;x2=t;}x1=x2=1;t=x1+x2;x1=x2;x2=t;do-while语句do语句while(表达式);i=1;do{printf(%d,i);i++;}while(i=10);语句表达式非00while(表达式)语句;语句表达式非00while和do-whiledo语句while(表达式);语句表达式非00先循环后判断先判断后循环while和do-while的用法比较输入一些数,求和,直到输入负数为止。voidmain(){intx,sum=0;do{scanf(%d,&x);sum+=x;}while(x0);printf(sum=%d,sum);}voidmain(){intx,sum=0;scanf(%d,&x);while(x0){sum+=x;scanf(%d,&x);};printf(sum=%d,sum);}输入125-10输入-10125sum-x5.2break和continue语句#includestdio.hvoidmain(){charc;inti=0;for(i=0;i10;i++){c=getchar();if(c=='\n')break;putchar(c);}}循环何时结束?c=getchar();for(i=0;i10&&c!='\n';i++){putchar(c);c=getchar();}for(i=0;;i++){c=getchar();if(i=10||c=='\n)break;putchar(c);}1break流程结束循环while(exp){语句1if(expb)break;语句2}非00exp语句10expb语句2循环体非0continue流程跳过continue后面的语句,继续下一次循环while(exp){语句1if(expc)continue;语句2}非00exp语句10expb语句2循环体非0break和continue#includestdio.hvoidmain(){charc;inti=0;for(i=0;i10;i++){c=getchar();if(c=='\n')break;putchar(c);}}#includestdio.hvoidmain(){charc;inti=0;for(i=0;i10;i++){c=getchar();if(c=='\n')continue;putchar(c);}}输入:abc↙efgh↙123↙输出:abcefgh1输出:abc例T6输入m,判断m是否为素数算法:除了1和m,不能被其它数整除。m%2%3%4%5不是素数||=0=0是素数&&!=0!=0程序段:n=sqrt(m);for(i=2;i=n;i++)if(m%i==0)break;if(in)printf(yes\n)elseprintf(no\n”);例T7将一个正整数逆序输出确定:循环条件和循环不变体123455432112345%10=512345/10=12341234%10=41234/10=123123%10=3123/10=1212%10=212/10=11%10=11/10=0结束循环不变式x%10x=x/10循环条件x==0scanf(“%d”,&x);while(x!=0){digit=x%10;x=x/10;printf(“%d”,digit);}例4-10#includestdio.hvoidmain(){charc;printf(Pleaseinputacharacter:\n);c=getchar();if(c='a'&&c='z'||c='A'&&c='Z')printf(Thisisaletter.\n);elseif(c='0'&&c='9')printf(Thisisadigit.\n);elseprintf(Thisisanothercharacter.\n);}输入一行字符,统计英文字母、数字和其他字符。例T8输入一行字符,统计英文字母、数字和其他字符#includestdio.hvoidmain(){charc;intletter=0,digit=0,other=0;c=getchar();while(c!='\n'){if(c='a'&&c='z'||c='A'&&c='Z')letter++;elseif(c='0'&&c='9')digit++;elseother++;c=getchar();}printf(%d%d%d,letter,digit,other);}while((c=getchar())!='\n')5.3循环嵌套while(表达式)语句;循环语句例T9-1.11!+2!+……+n!s=0;for(k=1;k=n;k++){s=s+f;}f=1;/*n!*/for(i=1;i=n;i++)f=f*i;f=1;for(i=1;i=k;i++)f=f*i;算法:k=1tons=s+ff=k!k++例T9-1.21!+2!+……+n!算法:k=1tons=s+ff=k!k++s=0;f=1;for(k=1;k=n;k++){f=f*k;s=s+f;}算法:k=1tons=s+ff=f*kk++例T9-2兑换零钱将10元钱换成5角、2角、1角的零钱(至少各一枚),列出所有可能的方案。c5:5角的数量,[1,20)c2:2角的数量,[1,50)c1:1角的数量,[1,100)5*c1+2*c2+c5==100将10元钱换成5角、2角、1角的零钱c5:5角的数量,[1,20)c2:2角的数量,[1,50)c1:1角的数量,[1,100)5*c5+2*c2+c1==100for(c5=1;c520;c5++)for(c2=1;c250;c2++)for(c1=1;c1100;c1++)if(5*c5+2*c2+c1==100)printf(%d%d%d\n,c5,c2,c1);c5=1c2=1c1=199249219将10元钱换成5角、2角、1角的零钱c5:5角的数量,[1,20)c2:2角的数量,[1,50)c1:1角的数量,[1,100)5*c5+2*c2+c1==1000for(c5=1;c520;c5++)for(c2=1;c25
本文标题:C语言程序设计基础 5.循环结构程序设计
链接地址:https://www.777doc.com/doc-3169702 .html