C语言程序题 谢谢大家了

来源:百度知道 编辑:UC知道 时间:2024/05/10 13:12:00
下列程序段运行的结果是

for(a=1,i=-1;-1<=i<1;i++)
{ a++;printf("%2d",a);}
printf("%2d",i);
我自己做得是 2,3,1 可是答案就光一个 -1
我是这么理解的 a=1 i=-1 a++ 则a=2 输出2 i++=0
a=2 i=0 a++ 则a=3 输出3 i++=1
此时因为-1<=i<1 所以跳出循环 输出 i=1

我问大家我哪理解出错了

应该是输出-1

看这个for(a=1,i=-1;-1<=i<1;i++) 循环中的判断条件: -1<=i<1
<=和<的运算顺序都是从左向右,
所以-1<=i<1先判断-1<=i,由于i=-1,所以-1<=i成立,表达式的值为1,
所以-1<=i<1判断完-1<=i后,变为:1<1
1<1不成立,
所以最终判断条件: -1<=i<1不成立,for循环不执行

所以,直接执行printf("%2d",i);
输出-1

{ a++;printf("%2d",a);}
printf("%2d",i);

这两句认真一看没什么联系,,按优先关系来说,是输出printf("%2d",i);也就是说输出i,i=-1,没有循环