c语言 菜鸟级问题 急待高手解答~~~详细分析步骤~~

来源:百度知道 编辑:UC知道 时间:2024/05/20 23:16:35
k=2
问k++*++k+k--*--k=?
答案为13

1.首先明白前置和后置的不同
后置自增,其表达式的值等于k值,k=k+1.
前置自增,其表达式的值等于(k+1)值,k=k+1。

2.在不同的工具环境下,结果有可能不同
如:设x=5;(++x)+(++x)+(++x)=?
在VC++6.0中得22,在JAVA中得21.其结果不必追究,只要明白其概念即可

分析: ++k和--k的运算优先级高于*,所以从左至右++k和--k先运算,而k++和k--的优先级低于*,所以先计算*再按照从左至右计算k++,k--
可得:
(1)++k以后k = 3,则有3*3 =9;
(2)--k以后k=2,则有2*2=4;
(3)再计算k++,则有k=3;
(4)再计算k--,则有k=2。

最有结果9+4 =13,k=2.

这个题应该是这样的,首先要知道运算符的优先级和结合性,另外还要知道++k和k++的区别,++k是即时生效的,即当时就会生效,而k++是这一句执行完才会生效
先说前半边k++*++k
因为*、++是右结合的,而且*优先级最高,因为是右结合,所以此时最先看++k,这样k就是3,然后是k++还是3,所以前边是3*3是9
再说后半边
此时也许你会认为k是4,但是此时k其实是3,因为k++还没生效,因为++生效必须在这一句执行完才会生效,所以还是先看--k,此时就是2,然后k--也是2,因为k--也不会生效,所以2*2=4
最后一加就是13

但是当这句执行完之后k就会是2

++在前表示先加后用 ++在后表示先用后加,
根据运算法则,先算k++*++k,则先k++时值还是2,++k时值是3,其实k++*++k就是先计算k的变化,再相乘,值为9,而后面k--没值,--k后值是2,所以k--*--k=4,9+4=13,还不懂就在Visual C++试试