习题六1、下列程序执行的结果是()。a=1;b=2;c=3;While(bac){t=a;a=b;b=t;c--;}printf(“%d,%d,%d”,a,b,c);A)1,2,0B)2,1,0C)1,2,1D)2,1,12、执行语句for(i=1;i++4;);后,i的值是()。A)3B)4C)5D)不定3、下列程序段()。x=3;do{y=x--;if(!y){printf(“x”);continue;}printf(“#”);}while(1=x=2);A输出##B)输出##xC)是死循环D)有语法错4、若intx;则执行下列程序段后输出是()。for(x=10;x3;x--){if(x%3)x--;--x;--x;printf(“%d”,x);}A)63B)74C)62D)735、下列说法中正确的是()。A)break用在switch语句中,而continue用在循环语句中。B)break用在循环语句中,而continue用在switch语句中。C)break能结束循环,而continue只能结束本次循环。D)continue能结束循环,而break只能结束本次循环。6、指出程序结束时,j、i、k的值分别是()。main(){inta=10,b=5,c=5,d=5,i=0,j=0,k=0;for(;ab;++b)i++;while(a++c)j++;dok++;while(ad++);}A)j=5,i=4,k=6;B)i=5,j=4,k=6;C)j=6,i=5,k=7D)j=6,i=6,k=6;7、下面程序的输出结果是()。main(){inti,j;floats;for(i=6;i4;i--){s=0.0;for(j=i;j3;j--)s=s+i*j;}printf(“%f\n”,s);}A}135.000000B)90.000000C)45.000000D)60.0000008、若有:do{i=a-b++;printf(“%d”,i);}while(!i);则while中的!i可用()代替。A)i==0B)i!=1C)i!=0D)以上均不对二、填空题1、以下while循环执行的次数是________。(无限)k=0;while(k=10)k=k+1;2、下列程序段的执行结果是________。(8)inta,b;for(a=1,b=1;a=100;a++){if(b=20)break;if(b%3==1){b+=3;continut;}b-=5;}printf(“%d\n”,a);3、以下循环语句执行________次循环;(5×4)inti,j;for(i=5;i;i--)for(j=0;j4;j++){……}4、以下程序段的输出结果是________。(11)inti=0,sum=1;do{sum+=i++;}while(i5);printf(“%d\n”,sum);5、执行以下程序后,输出是________。(2.400000)#include“math.h”main(){floatx,y,z;x=3.6;y=2.4;z=x/y;while(1)if(fabs(z)1){x=y;y=x;x=x/y;}elsebreak;printf(“%f\n”,y);}6、以下程序的输出结果是________。(*#*#*#$)main(){inti;for(i=1;i=5;i++){if(i%2)printf(“*”);elsecontinue;printf(“#”);}printf(“$\n”);}7、以下程序段的输出结果是________。(852)main(){inty=10;for(;y0;y--){if(y%3)continue;printf(“%4d”,--y);}}8、以下程序段:s=1.0;for(k=1;k=n;k++)s=s+1.0/(k*(k+1));printf(“%f\n”,s);请填空,使下面的程序段的功能完全与之等同。S=0.0;k=0;________;(floatd=1.0;)do{s=s+d;________;(k++)d=1.0/(k*(k+1));}while(________);(k=n)printf(“%f\n”,s);9、以下程序的功能:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数是结束输入。填空,使程序正确。main(){floatx,amax,amin;scabf(“%f”,&x);amax=x;amin=x;while(________)(x=0){if(xamax)amax=x;if(______)amin=x;(xamin)scanf(“%f”,&x);}printf(“\namax=%f\namin=%f\n”,amax,amin);}三、编程题1、求1-3+5-7+…-99+100的值。main(){inti,k,s=0;for(i=1,k=1;i=101;i+=2,k*=-1)s=s+i*k;printf(“%d\n”,s);}2、任意输入10个数,计算所有正数的和、负数的和以及这10个的总和。main(){inti,k,p=0,n=0,s=0;for(i=1;i=10;i++){printf(“i=%d:“,i);scanf(“%d”,&k);s+=k;if(k0)p+=k;if(k0)n+=k;}printf(“s=%d,p=%d,n=%d\n”,s,p,n);}3、任意输入小余32768的正整数s,从s的个位开始输出每一位数字,用逗号分开。main(){inti;printf(“PleaseEnterNumber:”);scanf(“%d”,&i);while(i0){printf(“%d,”,i%10);i/=10;}}/*P129_20B.c*/main(){longs,n,k=1;printf(Inputs:);scanf(%ld,&s);n=s;while(n0){n=n/10;k=k*10;}k=k/10;for(;k0;k=k/10){printf(%3d,,s/k);s=s%k;}printf(\n);}_4、对输入的正整数a,b,求ab的最后三位数。(1)注释:此题的关键是要保证乘积不超过int型允许的最大数。由于仅要求结果的最后三位,被乘数的后三位参加运算;则将乘数后三位的每一位分别和被乘数相乘,然后部分积再相加。main(){inti,a,b,c1,c2,c3,y,y1,y2,y3;printf(“PleaseEntera,b:”);scanf(“%d,%d”,&a,&b);y=a;c1=a%10;/*c1保存乘数个位上的数*/c2=a/10%10;/*c2保存乘数十位上的数*/c3=a/100%10;/*c3保存乘数百位上的数*/for(i=1;ib;i++)/*求a的b次乘方*/{y%=1000;/*被乘数保留三位*/y1=y*c1;/*被乘数和乘数个位相乘*/y2=y*c2%100;/*被乘数和乘数十位相乘,结果保留两位*/y3=y*c3%10;/*被乘数和乘数百位相乘,结果保留一位*/y=y1+y2*10+y3*100;/*部分积相加*/}printf(“%d\n”,y%1000);}(2)解法2。main(){inta,b,k;longlast;scanf(“%d%d”,&a,&b);for(last=k=1;k=b;k++)last=last*(a%1000)%1000;printf(“last=%ld\n”,last);}5、输入6个学生5门课的成绩,分别求出每个学生的平均成绩。/*p129_22.c*/main(){inti,j;floatx,s;printf(Inputdata:\n);for(i=1;i=6;i++){s=0;for(j=1;j=5;j++){scanf(%f,&x);s=s+x;}printf(average=%6.2f\n,s/5);}}6、编修程序,求e的近似值。e≈1+1/1!+1/2!+1/3!+…+1/n!(1)计算前20项。(2)计算各项,直到最后一项的值小于10-4为止(计算的项均大于等于10-4)。(1)注释:变量t储存阶乘,60!已经超出单精度实型数的范围,所以t被说明为double型。main(){inti=1;doublet=1;floate=0;do{t=t*i++;e=e+1./t;}while(i=60);printf(“%f\n”,e);}(2)main(){inti=1;doublet=1;floate=0;do{e=e+1./t;t=t*++i;}while(1/t=1.0e-4);printf(“%f\n”,e);}7、设X数列定义如下:nn=1,2,3Xn=xn-1+xn-2+xn-3n3编写程序,对输入的正整数n,输出数列的前n项。main(){intn,x1,x2,x3,xn,i;printf(“Entern:”);scanf(“%d”,&n);if(n=3)xn=n;else{x1=1;x2=2;x3=3;for(i=4;i=n;i++){xn=x1+x2+x3;x1=x2;x2=x3;x3=xn;}}printf(“Xn=%d\n”,xn);}8、输入所有大于1010的4位偶数,且该数的各位数字两两不相同。main(){inti,j,k,l;for(i=1;i=9;i++)for(j=0;j=9;j++){if(j==i)continue;for(k=1;k=9;k++){if(k==i||k==j)continue;for(l=0;l=9;l+=2){if(l==i||l==j||l==k)continue;printf(“%d\n”,i*1000+j*100+k*10+l);}}}}9、用40元买苹果、西瓜和梨,三种水果都要。已知苹果0.4元一个,西瓜4元一个,梨方0.2元一个。问可以各买多少个?输出全部购买方案。注释:题中水果的价格以元计价,为了避免计算中出现实数,则改为以角为计价单位。法1:main(){inti,j,k;for(i=0;i=100;i++)for(j=0;j=100-i;j++)if(i*4+j*40+(100-i-j)*2==400)printf(“apple=%dwatermelon=%dpear=%d\n”,i,j,100-i-j);}方法2:#includemath.hmain(){inta,b,c;floats;printf(\n);for(a=1;a25;a++)for(b=1;b100;b++){c=100-a-b;s=a*4+b*.4+c*.2;if(a+b+c==100&&fabs(s-40)1e-4)printf(a=%d,b=%d,c=%d,s=%f\n,a,b,c,s);}}_10、编写程序,输出以下图案。*************************main(){inti,j,n;printf(”\nPleaseEntern:”);scanf(”%d”,&n);for(i=1;i=n;i++){for(j=1;j=n+i-1;j++)if(jn-i)printf(”*”);elseprintf(””);printf(”\n”);}for(i=1;in;i++){for(j=1;j=2*n-i-1;j++)if(ji)printf(”*”);elseprintf(””);printf(”\n”);}}方法2#includemath.hmain(){intn,i,j,k;printf(Inputn(1,3,5,7,9...):);scanf(%d,&n);k=n/2+1;for(i=-k;ik;i++){for(j=1;j=40-k+abs(i);j++)printf();for(j=1;j2*k-2*abs(i);j++)printf(*);p