复习题二答案及详细分析
- 格式:doc
- 大小:37.50 KB
- 文档页数:5
第四章1.以下程序:main(){ int n=10;while(n>7){ n=n-1;Printf("%d ",n);}}程序运行输出结果是A 10 9 8B 9 8 7C 10 9 8 7D 9 8 7 6 (1)答案:B①N的值为10,n>7为真,执行循环体,n的值减1后为9,输出n的值9②N的值为9,n>7为真,执行循环体,n的值减1后为8,输出n的值8③N的值为8,n>7为真,执行循环体,n的值减1后为7,输出n的值7④N的值为7,n>7为假,结束循环。
2.以下程序:main(){ int k=5;while(--k) printf("%d",k-=3);printf("\n");}程序运行输出结果是A 1B 2C 4D 死循环答案:A①k的值为5,进入循环,(--k)表达式的值为4(真),同时k的值改变为4,输出表达式k-=3的值1,同时k的值为1。
k为1,表达式(—k)的值为0, 结束循环。
3.以下程序:main(){ int x=0,y=5,z=3;while(z>0&&x<4){ y=y-1;z--;x++;}printf("%d,%d,%d\n",x,y,z);}程序运行后输出结果是A 3,2,0B 3,2,-1C 4,3,-1D 5,-2,-5答案:A1.X=0,y=5,z=3,(z>0&&x<4)值为真,进入循环体,y值为4,z值为2, x值为12.(z>0&&x<4)值为真,进入循环体, y值为3,z值为1, x值为23.(z>0&&x<4)值为真,进入循环体, y值为2,z值为0, x值为34.(z>0&&x<4)值为假,结束循环。
5.输出x,y,z的值3,2,04.以下程序main(){ int k=5,n=0;while(k>0){ switch(k){ default:break;case 1 : n+=k;case 2:case 3:n+=k;}k--;}printf("%d\n",n);}程序运行后的输出结果是A 0B 4C 6D 7答案:D分析:①当K的值为3时,只执行case 3后面的语句n+=k,n的值为3;②当k的值为2时,先执行case 2后面的语句,但没有,继续执行case 3后面的语句n+=k,n的值为5;③当k的值为1时,先执行case 1后面的语句n+=k,n的值为6,先执行case 2后面的语句(没有),继续执行case 3后面的语句n+=k,n的值为7。
输出n的值7。
5.以下程序:main(){ int s=0,a=1,n;scanf("%d",&n);do{ s+=1;a=a-2;}while(a!=n);printf("%d\n",s);}若要使程序的输出值为2,则应该从键盘给n输入的值是A -1B -3C -5D 0太简单了,答案就是B6.以下程序int n,t=1,s=0;scanf("%d",&n);do{ s=s+1;t=t+2; }while(t!=n);printf("%d",s);从键盘输入-3,输出结果是A 0B 1C -1D -3答案:A分析:t值为1,s的值为0。
从键盘中输入-3后,n的值为-3.先执行循环体。
①执行s=s+t;s的值为1,执行t=t-2;t的值为-1.再判断表达式的值②t!=n为真,再次执行循环体。
执行s=s+t;s的值为0,执行t=t-2;t的值为-3.再判断表达式的值③t!=n为假,结束do..while循环。
最后输出s的值0。
7.以下程序int x=3;do{ printf("%3d",x-=2);}while(!x);输出结果是A 1B 3 0C 1 -2D 死循环答案:A分析:x=3; 先执行循环体,输出表达式x-=2的值1,同时x的值也改变成1,再判断表达式的值(!x),x的值为1(真),(!x)为假,循环结束。
8.若变量已正确定义,要求程序段完成5!的计算,不能完成此操作的程序段是A for(i=1,p=1;i<=5;i++)p*=i;B for(i=1;i<=5;i++){p=1;p*=i;}C i=1;p=1;while(i<=5){p*=i;i++;}D i=1;p=1;do{p*=i;i++;}while(i<=5);答案:B分析:B选项每次进入循环体,都要先执行p=1;即1赋值给p.所以不能求出5!的值9.以下程序main(){ int i,s=0;for(i=1;i<10;i+=2) s+=i+1;printf("%d\n",s);}程序运行结果是A 自然数1---9的累加和B 自然数1---10的累加和C 自然数1---9中的奇数之和D 自然数1---10中的偶数之和答案:D分析:变量i每次增量为2,变化过程为:1->3->5->7->9,语句s+=1每次执行使s增加的数为:2,4,6,8,10,所以s的值为自然数1~10中偶数的值。
10.以下程序的功能是计算:s=1+1/2+1/3+...+1/10main(){ int n; float s;s=1.0;for(n=10;n>1;n--)s=s+1/n;printf("%6.4\n",s);}程序运行后输出结果错误,导致错误结果的程序行是A s=1.0;B for(n=10;n>1;n--)C s=s+1/n;D printf("%6.4\n",s);答案:C分析:C项s=s+1/n, 1/n首先运算,n为整型变量,1也是整型变量,当n=2…10时,1/n的值为整数0,故C不正确11.以下程序的输出结果是main(){ int a,b;a=18;b=11;while(a!=b){ while(a>b) a-=b;while(b>a) b-=a;}printf("%3d%3d\n",a,b);}A 1 1B 4 3C 4 4D 7 7太简单了,答案就是A,自己推敲12 以下程序输出结果是-1main(){ int x=2;while(x--);printf("%d",s);(1)}答案:-1分析:此题的循环体是省略了大括号的空语句;,x的初值是2;执行while语句,先判断表达式的值,(x--)的值为1(真),同时x的值减1变为0,再执行循环体(空语句;),再判断表达式(x--)的值,表达式的值为0,同时x值减1,变为-1,因为表达式的值为0(假),循环结束。
最后输出x的值-1。
13 以下程序的功能是:将输入的正整数按逆序输出,例如:若输入135则输出531。
请填空main(){ int n,s;printf("Enter a number:");scanf("%d",&n);printf("Output: ");do{ s=n%10;printf("%d",s); n=n/10 ;while(n!=0);printf("\n");}太简单了,自己推敲14.以下程序main(){ int t=1,i=5;for(;i>=0;i--)t*=i;printf("%d\n",t);}执行输出结果是0分析:i的值从5变化到0时,for语句中的第二个表达式都为真。
t=5*4*3*2*1*0=0。
最后输出i的值为0。
15.以下程序输出结果是5main(){ int s,i;for(s=0,i=1;i<3;i++,s+=i);printf("%d\n",s);}答案:5分析:for循环语句的循环体是空语句;16.执行以下程序后,输出的#号的个数是 6main(){ int i,j;for(i=1;i<5;i++)for(j=2;j<=i;j++) putchar(`#`);}答案:6分析:此题属于循环的嵌套。
当i=1时,输出0个#号,当i=2时,输出1个#号,当i=3时,输出2个#号,当i=,4时,输出3个#号,共输出6个#号。