c语言基础习题求解谢谢

m--不是应该是先输出m的当前值再改变m的值吗为啥不选c main() int m=5; if(m++>5) printf(%dm) else printf(%d,m--)
慕雪6341044
浏览 1552回答 3
3回答

望远

输出6,有问题吗?

onemoo

“m--不是应该是先输出m的当前值再改变m的值吗”不要这么记,因为这句话中的“输出”是什么意思啊? 这可能会使你错误地理解自增减表达式的作用。m++ 表达式的值就是 m 自增前的值,当然这个表达式还会使 m 自增 1。同理,m-- 表达式的值是 m 自减前的值,当然这也会使 m 自减 1。那么这个代码中:一开始,if 中的判断条件是 m++ 表达式和 5 的大小作比较,m++ 表达式的值就是 5,所以 5 > 5 的结果是 false,故代码将进入 else 分支。代码执行到 else 分支,重要的一点是:这时 m 已经完成了自增,这时 m 的值是 6。这里要 print 的是 m-- 表达式的值,同理,m-- 表达式的值还是 6,所以会打印出 6。当然 m 还会被自减 1,所以最终 m 的值会是 5。注意:我在上面的描述中用了“m++ 表达式的值”和“m 的值”这两中说法。没错,它们是不同的东西! 这个代码中使用到的分别是 m++ 和 m-- 表达式的值,并没有直接用 m 的值,所以不要被 m 本身值的增减变化误导了。其实我给你之前问题的回答中提到了这些内容,如果你还是不太清楚的话,请看 http://www.imooc.com/wenda/detail/350085 中提到的那个详细解答。

onemoo

对了,我说的格式化是指这样的效果:int main(void) {     int m=5;     if(m++>5)         printf("%d", m);     else         printf("%d", m--); }这样比你直接写代码要好看多了吧?而且自带行号,方便别人给你指出哪行有问题。
打开App,查看更多内容
随时随地看视频慕课网APP