为了账号安全,请及时绑定邮箱和手机立即绑定

c语言基础习题求解谢谢

c语言基础习题求解谢谢

C
慕雪6341044 2017-05-16 19:45:16
m--不是应该是先输出m的当前值再改变m的值吗为啥不选c main() int m=5; if(m++>5) printf(%dm) else printf(%d,m--)
查看完整描述

3 回答

已采纳
?
望远

TA贡献1017条经验 获得超1032个赞

输出6,有问题吗?

查看完整回答
1 反对 回复 2017-05-16
?
onemoo

TA贡献883条经验 获得超454个赞

“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 中提到的那个详细解答。

查看完整回答
1 反对 回复 2017-05-19
?
onemoo

TA贡献883条经验 获得超454个赞

对了,我说的格式化是指这样的效果:

int main(void)
{
    int m=5;
    if(m++>5)
        printf("%d", m);
    else
        printf("%d", m--);
}

这样比你直接写代码要好看多了吧?

而且自带行号,方便别人给你指出哪行有问题。

查看完整回答
反对 回复 2017-05-19
  • 3 回答
  • 0 关注
  • 1538 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信