山里野人 发表于 2015-2-2 14:37:48

请告诉我程序中i和j的变化情况,请说得详细些,谢谢啦!

本帖最后由 山里野人 于 2015-2-2 16:31 编辑

#include<stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);
}
我的思路是:
p的运算:因为()是优先运算的,所以从右往左,第一个(i++)=(5),i值变为6;然后第二个(i++)=(6),i值变为7;第三个(i++)=(7),i值变为8;。所以p=7+6+5=18,电脑怎样计算出15???。(第一个问题)
q的运算:因为()是优先运算的,所以从右往左,第一个(++j)=(6),j值变为6;然后第二个(++j)=(7),j值变为7;第三个(++j)=(8),j值变为8;。所以q=8+7+6=21,电脑怎样计算出22???。(第二个问题)

电脑输出为:15,22,8,8
我使用的软件为
Visual C++6.0


a983383557 发表于 2015-2-2 15:50:29

因为你的值没有被保存 所以都是在5的基础上加1 5+1+1+1

山里野人 发表于 2015-2-2 15:54:50

不太明白,能再详细些吗?:lol:

a983383557 发表于 2015-2-2 16:51:36

这个语句其实是不允许的所以 pq的值可能和预想的不太一样 , 至于i和j为啥是8因为 j=5; j++,j++,j++等同于5+1+1+1, i=5; ++i,++i,++i 也等同于5+1+1+1   ,++i和i++的不同printf("%d\n",++i),printf("%d\n",i++)只有在这个时候能看出来一个是5一个是6 因为++i是先相加在输出,i++是先输出再相加。:lol:

山里野人 发表于 2015-2-2 17:22:49

a983383557 发表于 2015-2-2 16:51
这个语句其实是不允许的所以 pq的值可能和预想的不太一样 , 至于i和j为啥是8因为 j=5; j++,j++,j++等同 ...

i和j的值可推算出来最后是8,P和q推算出的值却和电脑算的不一样,一直找不出原因。:dizzy:

a983383557 发表于 2015-2-2 17:25:39

这玩意是编译器的事你用别的编译器可能值和这个还不一样:big

山里野人 发表于 2015-2-2 21:46:53

a983383557 发表于 2015-2-2 17:25
这玩意是编译器的事你用别的编译器可能值和这个还不一样

谢谢了。:lol:

haiouda 发表于 2015-2-2 21:58:08

此题无解
页: [1]
查看完整版本: 请告诉我程序中i和j的变化情况,请说得详细些,谢谢啦!