|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i,
i++;
y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
我调试了下 为什么x一直都是1
在给变量 x 赋值时,使用了逗号运算符 ,。逗号运算符会按照从左到右的顺序依次执行操作,并返回最后一个操作的结果作为整个表达式的结果。
在给 x 赋值的语句中,使用了逗号运算符 , 来连接两个操作: 根据逗号运算符的规则,首先执行 x += i 这个操作,然后再执行 i++ 这个操作。但是逗号运算符的返回结果是最后一个操作的结果,也就是 i++ 的结果。因此,整个表达式 x += i, i++; 的结果是 i++ 的结果。
接着来看程序的执行过程:
初始时, i = x = y = 0。
进入循环后,循环条件 i <= 7 满足,进入循环体。
第一行: ++i,i 值变为 1。
第二行: if (i % 2),由于 1 对 2 取余为 1,条件成立。
第三行: x += i, i++,根据逗号运算符的规则,先执行 x += i,此时 x 的值变为 1;然后执行 i++,i 的值变为 2。
第四行: y += i++,y 的值为原先的 0 加上 i++ 的结果,即 0 + 2 = 2。i 的值变为 3。
经过一次循环后,变量的值变为: i = 3, x = 1, y = 2。
循环继续进行:
第一行: ++i,i 值变为 4。
第二行: if (i % 2),由于 4 对 2 取余为 0,条件不成立,跳过下面的语句。
第四行: y += i++,y 的值为原先的 2 加上 i++ 的结果,即 2 + 4 = 6。i 的值变为 5。
经过第二次循环后,变量的值变为: i = 5, x = 1, y = 6。
接下来的循环过程可以依此类推。最终,当 i 的值为 8 时,循环条件 i <= 7 不满足,退出循环。
所以,在打印输出的语句 printf("%d %d %d", i, x, y); 中, x 的值是 1,因为在整个循环过程中只执行了一次 x += i,而 i++ 的结果并未赋值给 x。
希望这个解释能帮助你理解代码的执行过程。如果还有其他问题,请继续提问。
球一个最佳答案谢谢啦!这对我非常重要! 
|
|