if和else的配对问题:这是谭浩强书上的,答案是5,为什么不是8?

img

输出5是因为else 和最近的if配对吗? 还是答案错了。求解答

分析思路:
结论:在多重嵌套中,else总是和在它之前出现的,尚未匹配的且离它最近的if相匹配
结果: if(c>a)和else配对

你的理解正确,if(c > a) else if(b > a) 这里配对,所以if(c > b) 条件不满足,下面的语句都未被执行,max = a = 5; 未变。

是的,第一个if不满足所以下面的if(c>a)就不会执行了

else的配对原则是和最近的if配对
也就是说else if (b>a) 是和 if (c>a) 配对,而不是和 if (c>b)配对

【以下回答由 GPT 生成】

答案如下:

问题1:输出为5的原因是因为else与最近的if匹配。在这段代码中,有两个嵌套的if语句,导致了else与最近的if匹配,而不是与外层的if匹配。因此,当c不大于b时,else对应的是最外层的if语句,所以max的值为a的值,即5。

解决方案:要想得到正确的输出结果,可以通过加上大括号的方式,明确if-else的配对关系。如下所示:

inta = 5, b = 8, c = 3, max;
max = b;
if (c > b) {
    if (c > a)
        max = c;
    else
        max = a;
}
else {
    if (b > a)
        max = b;
}
printf("max=%d\n", max);

问题2:条件表达式(exp)?a: b的含义是:如果exp为真,则返回a的值,否则返回b的值。

解决方案:在这段代码中,条件表达式的含义如下:

(c > b) ? (c > a) ? c : a : (b > a) ? b : a;

需要注意的是,这是三元运算符(ternary operator),而不是if-else语句。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^