这道C语言的题怎么做?

如题所述

您好,很高兴回答您的问题。

对于这个题目而言,主要是考查if~else函数的匹配使用情况。这个知识点就一定要记住:if总是与在它前面的、离它最近的、没有与别的if匹配的else匹配。有多层if语句的,一定要从最里层的if与else开始匹配。

所以整个匹配形式如图所示:

那么我们分析的时候,从最外层的if开始,if(a=b+c),其中a=b+c是赋值语句,是永远成立的条件,就不会执行a=b=c=-1这句话;并且在此情况下,a的值为0+-1=-1,那么也不满足a>0和a==0,所以执行的是倒数第二个else语句,所以最后的结果是a=b=c=1,所以答案应该选A。

追问

好的 非常感谢你

追答

您客气啦

追问

你好 这道题有空可以帮忙解答一下吗

想了好久

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-23

首先,这道题目实际运行的话,答案并不是A,而是:

编译错误

是无法编译通过运行!即使添加头文件stdio.h后,得到答案A,仍然还是有编译警告:








那么,要想得到答案A,需要修改如下两处:

错误修改

运行结果:

程序运行结果

只有这样,才能得到答案A,有同学可能会有疑问为什么不是C?注意的是a=b+c并不是关系表达式,如果是答案C,关系表达式应该这样写a==b+c。


程序运行结果:

第2个回答  2021-10-16
这个题目关键是考核学生的观察能力。
其实,把关系运算符的相等符(==)写成赋值符(=)是初学者最容易犯的错误。
在if(a=b+c)这一句中,本意是比较a与b+c是否相等,表达式的正确写法是a==b+c,这样,如果二者相等,表达式的值为真,去执行if后面的语句,否则,执行else后面的语句。
在这个题目中,如果没有写错双等号,是判断a与b+c是否相等,前面abc分别是2/0/-1,a+b是-1,2≠-1,表达式的值是假。程序去执行else后面的a=b=c=-1。
现在,题目故意写错,它把a=b+c作为if语句的判断表达式,我们看它的值。首先a=b+c是一个赋值语句,它把b+c的值-1赋值给a,即,a=-1,然后判断它的逻辑值,它就用a的值作为逻辑值,而C语言对数字的逻辑值的解释是,除了0为逻辑假,其他非0数字都是逻辑真,所以,a=-1的逻辑值为真。
这就有意思了,程序判断逻辑真,会执行if语句后面的内容。可是后面仍然是一个if语句,而且是:
if()
else if()
else
结构,
先判断a是否>0,因a=-1>0为假,继续判断a是否=0,a=-1≠0仍然为假,最后只能执行else后面的a=b=c=1。
因此,最后打印出A选项的1,1,1。
结论:A选项正确。本回答被网友采纳
第3个回答  2021-10-14

语句的执行与判断过程,见图片:

第4个回答  2021-10-13
第一个里面等价于y=y+(i++),所以y=3+2=5;(这里的y是函数里面临时定义的,屏蔽了外面的全局变量)
main函数里面y=y+(i++)=2+2=4;(这里的y是全局变量,注意i仍然是2,因为函数传递的形参没有改变实参)
相似回答