2017年升钟湖钓鱼大赛:在C语言中,i=3,k=++i+(++i),m=(++i)+(++i),n=i+++(++i)的结果分别是多少,能否给出每步的答案?

来源:百度文库 编辑:高校问答 时间:2024/05/10 14:03:03
急求答案!!!
用电脑算出来的结果分别是k=10,m=10,n=12.

最佳答案:
k=10;
m=10;
n=8;
(1)k=++i+(++i);
先算(++i), 此时i=4,接着算++i=5,此时i=5.i+i=10;
(2)m=(++i)+(++i);
先算(++i), 此时i=4,接着算(++i)5)=5,此时i=5.i+i=10;
(3)n=i+++(++i);
先算(++i), 此时i=4.i+i=8;
结果经vc++6.0验证

应该是:k=m=10,n=8
第一个两个++i后,i=5,相加后5+5=10,是执行完2次++i后才进行"+"运算的
第二个同上
第三个一个++i后,i=4,相加后为4+4=8

8
8
7

先计算所有的++i,执行完后直接加起来就可以拉,而且i的取值是计算所有的i++和++i的值!所以计算结果是k=m=10,而i的值是5,n=8,i=5;

m=14
k=10
n=16

不知道楼主在哪看到的这样的题。多半是中国人编写的教材或者资料上。研究这样的题是没有意义的。因为不同的编译器会有不同的结果。我没有去分析,但我觉得楼上几位的都有可能是对的。因为ANSI C(标准C)里对这样的表达式未定义。不信请看:
http://c-faq-chn.sourceforge.net/ccfaq/node39.html
http://cpp.ga-la.com/html/12/12/0604/139.htm