Lesson3循环语句的执行流程mtysoft@163.com2while语句求和inti=1,s=0;while(i=100){s=s+i;i=i+1;}i=1s=0,2,3+1+2,…,99,100,101+…+99+1003while语句与自增inti=0,s=0;while(i++=100)s+=i;i=0s=0,1,2+1+2,…,99,100,101+…+99+100+101,102①i=100必做真:循环假:退出②i++必做4while语句4-1[2006.9.22]以下程序的运行结果是intk=5;while(--k)printf(%d,k-=3);A)1B)2C)4D)死循环[2006.4.30][2010.9.21]以下程序的运行结果是inty=10;while(y--);printf(%d,y);A)0B)-1C)1D)死循环5while语句4-2[2004.4.23]以下程序的运行结果是inta=0,b=5,c=3;while(c--0&&++a5)b+=-1;printf(%d,%d,%d\n,a,b,c);3,2,-1[2007.9.8]以下程序的运行结果是intn=12345,d;while(n!=0){d=n%10;printf(%d,d);n/=10;}543216while语句4-3[2010.9.20]以下程序的运行结果是inta=1,b=2;while(a6){b+=a;a+=2;b%=10;}printf(%d,%d,a,b);A)5,11B)7,1C)7,11D)6,17while语句4-4[2005.9.36]以下程序运行后,n的值是intk=5,n=0;while(k0){switch(k){default:break;case1:n+=k;case2:case3:n+=k;}k--;}78for语句的一般格式for(表达式1;表达式2;表达式3){语句}例如,下面的程序计算1至100的和:for(s=0,i=1;i=100;i++)s+=i;9水仙花数153=13+53+3310台阶问题台阶走法112233455861372111Fibonacci数列数列变量1123581321abababab数列变量1123581321abcabcabcabc12for语句5-1[2008.4.8]以下程序的运行结果是for(k=2;k6;k++,k++)printf(##%d,k);##2##4[2005.4.10]以下程序的运行结果是for(a=0,b=6;ab;a++,b--)printf(%d%d,a,b);061524[2007.9.22]以下程序的运行结果是for(y=9;y0;y--)if(y%3==0)printf(%d,--y);85213for语句5-2[2010.3.21]以下程序的运行结果是inta=1,b=2;for(;a8;a++){b+=a;a+=2;}printf(%d,%d,a,b);10,14[例]对下述for循环语句,说法正确的是for(i=0,k=-1;k=1;i++,k++)printf(*);A)程序编译有错B)是无限循环C)只循环一次D)一次也不循环14for语句5-3[2009.9.18]以下程序运行后,c的值是intc=0,k;for(k=1;k3;k++){switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}}315for语句5-4[2004.9.20]以下程序的运行结果是inti;for(i=0;i3;i++){switch(i){case0:printf(%d,i);case2:printf(%d,i);default:printf(%d,i);}}00012216for语句5-5[2009.9.10]以下程序的运行结果是intf,f1,f2,i;f1=0;f2=1;printf(%d%d,f1,f2);for(i=3;i=5;i++){f=f1+f2;printf(%d,f);f1=f2;f2=f;}0112317回文数a=456;b=0;w=a;do{b=b*10+a%10;a=a/10;}while(a0);b=0;a=456;w=456;a=456/10=45;b=0*10+6=6;b=6*10+5=65;b=65*10+4=654;a=45/10=4;a=4/10=0;if(b==w)printf(是);elseprintf(否);回文数:66,121,8998,7不是:456,6718do-while语句4-1[例]以下程序的运行结果是inta=3;doprintf(%d,a-=2);while(!--a);1-2[2009.9.9]以下程序运行后,a的值是inta=1,b=7;do{b=b/2;a+=b;}while(b1);519do-while语句4-2[2007.9.19]以下程序的运行结果是inti=0;do{printf(%d,,i);}while(i++);printf(%d\n,i);A)0,0B)0,1C)1,1D)死循环20do-while语句4-3[2008.9.29]以下程序的运行结果是inti=5;do{if(i%3==1)if(i%5==2){printf(*%d,i);break;}i++;}while(i!=0);*721do-while语句4-4[2007.4.23]以下程序的运行结果是intk=5,n=0;do{switch(k){case1:case3:n+=1;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf(%d,n);}while(k0&&n5);234522循环语句比较i=100;s=0;while(i=9)s++;s=0;for(i=100;i=9;i++)s++;i=100;s=0;do{s++;}while(i=9);23三种循环语句的比较while语句for语句do-while语句当循环次数无法确定,需根据某个条件控制循环次数时,通常用while语句。当已经知道循环次数的时候,用for语句比较方便。当需要先执行循环体,后判断循环条件时,用do-while语句。24循环语句比较[2004.9.25]若变量已正确定义,要求程序完成求5!的计算,以下不能完成此操作的程序是A)for(i=1,s=1;i=5;i++)s*=i;B)i=s=1;while(i=5)s*=i++;C)i=0;s=1;do{s*=++i;}while(i5);D)for(i=1;i=5;i++){s=1;s*=i;}25for与while语句[2007.9.29]有以下程序段,且变量已正确定义和赋值for(s=1.0,k=1;k=n;k++)s=s+1.0/(k*(k+1));请填空,使下面程序段的功能为完全相同s=1.0;k=1;while(_______){s=s+1.0/(k*(k+1));____;}k=nk++26for(表达式1;表达式2;表达式3){语句1;continue;语句2;}continue语句while(表达式){语句1;continue;语句2;}do{语句1;continue;语句2;}while(表达式);27continue语句5-1[2009.3.9]以下程序的运行结果是intk=1,s=0;do{if(k%2!=0)continue;s+=k;k++;}while(k10);printf(s=%d,s);s=028continue语句5-2[2008.4.21]以下程序的运行结果是intx=8;for(;x0;x--){if(x%3){printf(%d,x--);continue;}printf(%d,--x);}854229continue语句5-3[2005.4.41]以下程序运行后,b的值是inta=1,b;for(b=1;b=10;b++){if(a=8)break;if(a%2==1){a+=5;continue;}a-=3;}430continue语句5-4[2004.9.24]以下程序的运行结果是inti=0,s=0;for(;;){if(i==3||i==5)continue;if(i==6)break;i++;s+=i;}printf(%d,s);A)10B)13C)21D)死循环31continue语句5-5[例]填空实现程序的功能:输出100以内(不含100)能被3整除且个位数为7的所有整数for(i=0;________;i++){j=i*10+7;if(____________)continue;printf(%d,,j);}i100i10j%3!=032控制语句控制语句if()...else...条件语句for()...循环语句while()...循环语句do...while()循环语句continue结束本次循环语句break中止switch或循环语句switch多分支选择语句goto转向语句return从函数返回语句1.2.3.4.5.6.7.8.9.33输出和的平方根请编写程序:输入整数n,输出n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根。#includemath.hintn,i,s=0;//累加器s置0scanf(%d,&n);for(i=1;in;i++)if(_________________________)s+=i;printf(%f,sqrt(s));//计算平方根i%3==0&&i%7==034数列求和请编写程序:求s=a+aa+aaa+……+aaa…a的值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n和a从键盘输入。ints=0,a,n,i;scanf(%d%d,&a,&n);for(i=1;i=n;i++){s+=a;}printf(s=%d,s);a=a*10+a%10;35输入密码请编写程序:输入密码,如果三次输入错误,则停止输入。intmima=123456,m,i=0;do{printf(请输入密码:);scanf(%d,&m);}while(_____________________);if(m==mima)printf(密码正确!);elseprintf(输入错误!);m!=mima&&++i336输出最大的偶数请编写程序:输入5个正整数,输出其中最大的偶数。如果5个数中没有偶数,则输出-1。例如:如果5个整数是3,6,2,7,4,则输出6;如果5个整数是3,5,1,9,7,则输出-1。inta,t=-1,i;for(i=1;i=5;i++){scanf(%d,&a);if(____________________)t=a;}printf(%d,t);a%2==0&&at37输出后n-1位数请编写程序:输入一个大于10的无符号整数w(unsignedw),输出w后n-1位的数。例如:若w=4567,则输出567;若w=456,则输出56。unsignedwscanf(%u,&w);//格式符%u;,t,m=1;t=w;while(t){t/=10;m*=10;}printf(%u,w%(m/10));38习题演练请编写程序:删除整数尾部的0。例如:若整数是34000、3400、340或34,都输出34。scanf(%d,&a);while(____________)a=a/10;printf(%d,a);a%10==0[2005.9.10]实现:s=1+12+123+1234+12345intt=0,s=0,i;for(i=1;i=5;i++){t=+i;s=s+t;}t*1039本课小结三种循环语句比较while语句for语句do-while语句continue语句40课后题:Fibonacci数列输出Fibonacci数列