民间融资登记服务中心:C语言问题?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 03:00:12
选择题:
main()
{int x=3,y=6,a=0;
while (x++!=(y-=1))
{
a+=1;
if (y<x) break;
}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}

A) x=4,y=4,a=1 B) x=5,y=5,a=1
C) x=5,y=4,a=3 D) x=5,y=4,a=1

各变量的变化值为
x y a 说明
3 6 0 初使值
3 5 1 (x++!=(y-=1))成立,执行a+=1
4 4 1 (y<x)不成立,返回循环初始位置
5 4 1 (x++!(y-=1))不成立,退出循环
答案选择 D,
但是我看a=3才对吧。

仔细看一下就明白了,
运算符的执行顺序
a ++
是使用后再加
而 a += 1
是在使用前就加上了

所以题目就成这样了

第一轮
x = 3
y = 6
a = 0
while (x++!=(y-=1)) //while( 3 != 5 )
{
a+=1; // a = 1
if (y<x) break;
}
第二轮
x = 4
y = 5
a = 1
while (x++!=(y-=1)) //while( 4 != 4 ) 在这里就跳出了,并没有进入循环
{
a+=1;
if (y<x) break;
}

所以结果就是 x=5, y=4, a=1