关于C语言的问题

一、若i=3;
执行表达式 (i++)+(i++)+(i++)后,i的值和表达式的值各为多少?
执行表达式 (++i)+ (++i)+(++i)后,i的值和表达式的值各为多少?
二、int a=5,b=3;
- -a==b++ ? a++: b++; /*执行完后a 为4,b为5,条件表达式的值为4*/
请各位高手详细分析上述两个例子 ,为什么? 谢谢

其实这个问题我觉得也说不好,在prime plus这本书里面说这种情况不同编译器有不同的结果,如果你用VC6.0的话,就是如图的答案,先自加或者后自加。如果其他的编译器,可能得到一、的结果是3+4+5=12,也就是说i逐一变化。

第二个条件表达式如果?前面成立,就执行a++,如果不成立,执行b++;不过他判断的时候先判断--a与b的大小关系,也就是说a变成了4,然后不管怎样,b自加。因为不成立,执行b++,继续自加,变成5,。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-05
一:
执行表达式 (i++)+(i++)+(i++)后,i的值和表达式的值各为多少?
i值为6。理由:i自增了3次 不管是前自增还是后自增 都会自增1
表达式的值为(3)+(4)+(5)=12 。 运算操作符的执行是从左往右的 后自增操作是先返回值后再执行加一操作
执行表达式 (++i)+ (++i)+(++i)后,i的值和表达式的值各为多少?

i值为6。理由:i自增了3次 不管是前自增还是后自增 都会自增1
表达式的值为(4)+(5)+(6)=15 。 运算操作符的执行是从左往右的 前自增操作是先执行加一操作再返回增后的结果

二、int a=5,b=3;
- -a==b++ ? a++: b++; /*执行完后a 为4,b为5,条件表达式的值为4*/
答:
--a==b++?a++:b++; 执行次序:(--a)==(b)++?a++:b++;
等于:
(--5)==(3)++?a++:b++;
4==3(这还有个自增 前面表达式计算完再增)?a++;b++;
等于
4==3?4++:4(前面b自增后得值4)++;
结果为假 执行了后面的b++ 也就是b最后等于5了 而a 值还是前面的4。
第2个回答  2014-02-05
其实只要掌握一点:数值前面++或者--,表达式立即进行,数值后面++或者--,在运算全部结束后执行
一、
1、i为6 值为9
2、i为6 值为15
二、因为--a==b++不成立。所以后面的a++没有执行追问

(++i)+ (++i)+(++i) 我用c算出来是16,为啥?

第3个回答  2014-02-05
这个就是 区别 i++ 和++i;方法就是 i++先用i,在++; ++i就是先++在用i,当然是没有打括号。所以分别是9 ,18;第二个同理,注意是 ==不是=就行了
相似回答
大家正在搜