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,查看更多内容