k:
1,结果仍为1。
9.已知A=7.5,B=2,C=3.6,表达式
A>B&&C>A||!
A
C>B的值是()。
答:
0
10.当m=2,n=1,a=1,b=2,c=3时,执行完
d=(m=a!
=b)&&(n=b>c)后,n=(),m=()。
答:
n=0,m=1
因为首先计算关系运算a!
=b,结果为真即1,再计算赋值运算m=1;再计算b>c,结果为假即0,赋值n=0;最后d的值为假即0。
11.程序的运行结果是()。
main()
{
intx,y,z;
x=1;y=2;z=3;
x=y--<=x||x+y!
=z;
printf("%d,%d",x,y);
}
答:
1,1
因为关系运算符优先级高于逻辑运算符,因此首先计算y--<=x,结果表达式的值为假(0),y的值为1;再计算x+y!
=z,结果为真
(1),x的值为真
(1)。
12.以下程序
main()
{
inti=0,j=0,k=6;
if((++i>0)||(++j>0))k++;
printf(”%d,%d,%d\n”,i,j,k);
}
输出结果是()
答:
1,0,7
首先计算++i>0,结果表达式的值为真,变量i的值为1。
在计算1||(++j>0)时,因为结果为真
(1),C语言不再计算表达式(++j>0)了。
因为if()中的逻辑表达式值为真,因此计算k++,结果k值7。
13.程序的运行结果是()。
main()
{
inta=2,b=7,c=5;
switch(a>0)
{case1:
switch(b<0)
{case1:
printf("@");break;
case2:
printf("!
");break;
}
case0:
switch(c==5)
{case0:
printf("*");break;
case1:
printf("#");break;
default:
printf("?
");break;
}
default:
printf("&");
}printf("\n");
}
答:
#&
因为表达式a>0的值为真
(1),计算case1:
后面的语句
switch(b<0)
{case1:
printf("@");break;
case2:
printf("!
");break;
}
由于表达式b<0的值为假(0),因此本语句执行结束。
又由于本语句后面无break语句,因此继续执行
switch(c==5)
{case0:
printf("*");break;
case1:
printf("#");break;
default:
printf("?
");break;
}
结果输出#,由于上面的语句后面也无break语句,因此继续执行语句
printf("&");
输出&。
14.下面程序的输出是()。
main()
{inta=-1,b=4,k;
k=(a++<=0)&&(!
(b--<=0));
printf("%d%d%d\n",k,a,b);
}
答:
103
关系表达式a++<=0的值为真(即1),因为首先判断-1<=0,然后执行a++,变量a的值为0;
关系表达式!
(b--<=0)的值为真(即1),因为首先判断4<=0,然后执行b--,变量b的值为3,最后执行逻辑非运算!
;
逻辑表达式(a++<=0)&&(!
(b--<=0))的值为真(即1),执行赋值运算后,变量k的值为1。
15.下面的程序片段所表示的数学函数关系是()。
y=-1;
if(x!
=0)
if(x>0)y=1;
elsey=0;
A)y=-1(x<0)B)y=1(x<0)C)y=0(x<0)D)y=-1(x<0)
0(x=0)-1(x=0)-1(x=0)1(x=0)
1(x>0)0(x>0)1(x>0)0(x>0)
答:
C)
16.下面程序的输出是()。
main()
{intx=100,a=10,b=20,ok1=5,ok2=0;
if(a
if(b!
=15)
if(!
ok1)
x=1;
else
if(ok2)x=10;
x=-1;
printf("%\n",x);
}
A)-1B)0C)1D)下面定的值
答:
A)
因为语句x=-1;并不在if语句之中。
17.与y=(x>0?
1:
x<0?
-1:
0)功能相同的if语句是()。
a)if(x>0)y=1;b)if(x)
elseif(x<0)y=-1;if(x>0)y=1;
elsey=0;elsey=-1;
c)y=-1;d)y=0;
if(x)if(x>0)
if(x>0)y=1;if(x>0)y=1;
elseif(x==0)y=0;elsey=-1;
elsey=-1;
答:
A)
18.设a=6,b=-8,c=3,以下逻辑表达式的值为()。
'd'&&(a>b)&&(b>c)&&(a-c)
答:
0
19.若执行下面的程序时从键盘上输入3和4,则输出是()。
main()
{inta,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s=s*s;
printf("%d\n",s);
}
答:
16
20.下面的程序
main()
{intx=3,y=0,z=0;
if(x=y+z)printf("****");
elseprintf("####");
答:
####
21.两次运行下面的程序,如果从键盘上分别输入6和4,则输出的结果是()。
main()
{intx;
scanf("%d",&x);
if(x++>5)printf("%d",x);
elseprintf("%d\n",x--);
}
答:
75
22.假定所有变量均已正确说明,下列程序段运行后x值是()。
a=b=c=0;x=35;
if(!
a)x--;
elseif(b);if(c)x=3;
elsex=4;
答:
4
该程序:
a=b=c=0;
x=35;
if(!
a)x--;elseif(b);
if(c)x=3;elsex=4;
23.以下两条if语句合并成一条if语句为()。
if(a<=b)x=1;
elsey=2;
if(a>b)printf("****y=%d\n",y);
elseprintf("####x=%d\n",x);
答:
if(a<=b){x=1;
printf("####x=%d\n",x);
}
else{y=2;
printf("****y=%d\n",y);
}
1.下面程序段的运行结果是()。
x=y=0;
while(x<15)y++,x+=++y;
printf("%d,%d",y,x);
答:
8,20
y++,x+=++y;是一个逗号表达式语句,首先计算y++,然后计算x+=++y。
2.程序的运行结果是()。
#include
main()
{
intc=0;
while(c<=2)
{c++;
printf("%d\n",c);
}
}
答:
1
2
3
3.输入2473,下面程序的运行结果是()。
#include
main()
{
intc;
while((c=getchar())!
='\n')
switch(c-'2')
{case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
default:
putchar(c+2);break;
}
printf("\n");
}
答:
668977
第一次函数getchar()从键盘读取字符2,变量c的值为字符2,因此c-'2'的值为0,执行case0:
后面的语句putchar(c+4);和putchar(c+4);执行break;语句后,switch语句执行结束。
此次输出字符66。
4.下面程序段输出结果为()。
intx=3;
do{printf("%d\n",x-=2);}while(!
(--x));
答:
1
-2
5.不是无限循环的语句为()。
A)for(y=0,x=1;x>++y;x=i++)i=x;
B)for(;;x++=i);
C)while
(1){x++;}
D)for(i=10;;i--)sum+=i;
答:
A)
6.下面程序段的运行结果是()。
for(y=1;y<10;)y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
答:
x=15,y=14
执行完第1次循环后x=3y=2
执行完第2次循环后x=6y=5
执行完第3次循环后x=15y=14
7.程序的运行结果是()。
#include
main()
{
inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf("%d\n",a);
}
答:
8
8.下面程序段不是无限循环的是()。
A)inti=100;
while
(1)
{i=i%100+1;
if(i>100)break;
}
B)for(;;);
C)intk=0;
do{++k;}while(k>=0);
D)ints=36;
while(s);--s;
答:
C)
i值只能是从1到100之间变化,i>100永远是假,因此break永远也不会被执行。
for循环语句的第2个表达式没有,意味着永远为真。
每次循环k的值加1,当k的值为32767时,再执行++k,k的值变为-32768,循环结束。
因为语句—s并不在循环中,while(s);永远执行一个空语句。
9.下面程序段()。
x=3;
do{y=x--;
if(!
y){printf("*");continue;}
printf("#");
}while(1<=x<=2);
A)输出##B)输出##*
C)无限循环D)含有不合法的控制表达式
答:
C)
第一次循环执行y=x--;后x和y的值分别为2和3,因此输出1个#。
执行1<=x<=2时由于逻辑运算符<=的结合性是从左至右,因此首先计算1<=x,结果为真(即1),然后计算1<=2,结果仍为真,再次执行循环。
可以看出无论1<=x为真(即1)或者为假(即0),1<=x<=2的值始终为真,因此循环为无限循环。
10.程序的运行结果是()。
#include
main()
{intk=0;charc='A';
do{switch(c++)
{case'A':
k++;break;
case'B':
k--;
case'C':
k+=2;break;
case'D':
k=k%2;continue;