一道C题
详细代码就不写出来。具体 运算我写出来
m=2 j=2
m+=(j++)+(++j)+(++j)
M最后结果为 11
关于这道题的具体 思考过程 一直不太明白。今天N多人一起讨论(才接触C)
没有一个人的解释力排众议…………
今天找老师问 他的解释是
j++ 和 ++j也有优先级。
++J优先与j++
所以先执行++j 所有 就是 3+3+3 +2。。。
还是很疑惑到底是怎么回事。
[[i] 本帖最后由 yofx 于 2008-3-14 10:58 编辑 [/i]] m=2 j=2
m+=(j++)+(++j)+(++j)
主要考虑好前加后加的问题。是先运算还是先自加。
第一个个括号内 j 是后加,第二个括号内 j 是前加
所以 前两个括号相加完后 结果是 2+3=5 ,j 此刻为4。
5+(++j) = 9 。
然后 m+=9 = 11 了。 j加了三次,最终应该是5,所以应该是2+4+5=11
m+=11
m就该是13,我想楼主是不明白这一点。
14的吧~~~~~~~
m=2 j=2m+=(j++)+(++j)+(++j)
首先(j++)==3,然后(++j)==4,再(++j)==5;
所以 m+=(j++)+(++j)+(++j)=m+3+4+5=14 (j++)是2 (++j)是3 (++j)是4
在加2 =11 是等于13,(j++)=3
再(++j)=4
再(++j)=5
m再自加=13
::18:: [quote]原帖由 [i]yofx[/i] 于 2008-3-13 22:46 发表 [url=http://bbs.hackerxfiles.net/redirect.php?goto=findpost&pid=732788&ptid=98541][img]http://bbs.hackerxfiles.net/images/common/back.gif[/img][/url]
今天找老师问 他的解释是
j++ 和 ++j也有优先级。
++J优先与j++
所以先执行++j 所有 就是 3+3+3 +2。。。
还是很疑惑到底是怎么回事。
... [/quote]
类似m+=(j++)+(++j)+(++j); 这样的写法,只会出现在考试题中,就像孔已己讨论那茴香豆的“茴”字的四种写法一样没有任何意义。
前缀++和后缀++的优先级的确不同,但不是你们老师说的那样,前缀优先于后缀,正好相反,后缀优先于前缀,结合性两者完全相反。可以到以下网址查看符号的优先级和结合性。
http://www.cppreference.com/operator_precedence.html
在不同的编译器上计算出来的m值也大相径庭,例如在gcc v4.1.4 中,m最终为12,而在VC9中m为14,编译器对标注支持得不同的话结果也不同,因此这题目根本没有标准的答案,出题人纯粹在玩文字游戏。
深恶痛绝这种写法,滥用C语法而混淆了语意,曾经发誓,若在公司项目中若有人写下类似这样的代码,直接视为脑残,开除而后快。 谢谢楼上的解答。TC中答案是11
现在关于这个问题几乎是每个人都有自己的说话。谢谢了。我会仔细看。。
感觉这个问题确实属于鸡肋型的。。 简单点说是这样的 2+4+5 我想是.
m+=(j++)+(++j)+(++j)
m+=2+4+5
m=2+11
m=13 撒子哦?在TC2.0 运行出来是等于13,而在mytc 5.4.1 运行出来是等于14!!!! [quote]原帖由 [i]yyj_dmx[/i] 于 2008-3-19 12:23 发表 [url=http://bbs.hackerxfiles.net/redirect.php?goto=findpost&pid=735406&ptid=98541][img]http://bbs.hackerxfiles.net/images/common/back.gif[/img][/url]
撒子哦?在TC2.0 运行出来是等于13,而在mytc 5.4.1 运行出来是等于14!!!! [/quote]
很神奇是吧。
这种东西只有在课本和考试中才会出现,我考过一次计算机二级,并且过了,但我发现考试的题目大多都是这种类似于文字游戏的东西,完全没有实际意义,所以我暗暗发誓,再也不考什么计算机等级证了。我很佩服我们国家的计算机教育。 lz问题很好嘛,我以前也遇到过,现在在运算符这块也不是反应的哪么快.:face17 #include <stdio.h>
void main(void)
{
int m,j;
m=j=2;
m +=(j++)+(++j)+(++j) ;
// 2 4 5
//13
printf("%d\n",m);//12
}
疯了....怎么会这样.... m=2 j=2
m+=(j++)+(++j)+(++j)
这里是先算j=2,然后,加1,接下来算++j,就是在3之前加1,然后j为4,那就一共是7了!3+4+(现在J是4,那在加1就是5)!最后就是3+4+5,在现实中根本不会出现!郁闷!怎么现在考试就这样呢?艾!可悲~! 不同编译器的运算优先级不同。::11:: ::11:: 无标准答案。
不同的编译器上运算结果大相径庭。
我在GCC上编译了一下,12。 顶七楼,这种东西完全没有必要这么些
这么写在不同的编辑器运行的结果会相差很远的
14 14 14 14
是14 我试过了。。。。::02:: ::02:: ::02:: 我在vc++6.0下跑出来是12,汗……我的理解是,从右往左,所以j先自加变成3,再自加变成4,但是j++是先运算之后再自加,所以还是4,m=2+4+4+3=13,不知道怎么回事……
页:
[1]
2
