这道C语言的题怎么做?

 我来答
月光下的qq
2021-10-13 · 科技优质答主
月光下的qq
采纳数:392 获赞数:672

向TA提问 私信TA
展开全部

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

对于这个题目而言,主要是考查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。

更多追问追答
追问
好的 非常感谢你
追答
您客气啦
lugoodboy
2021-10-23 · TA获得超过7.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:86%
帮助的人:6339万
展开全部

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

编译错误

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








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

错误修改

运行结果:

程序运行结果

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


程序运行结果:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Yuqi_Tan

2021-10-16 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3470万
展开全部
这个题目关键是考核学生的观察能力。
其实,把关系运算符的相等符(==)写成赋值符(=)是初学者最容易犯的错误。
在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选项正确。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2021-10-14 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勿镜F
2021-10-13 · TA获得超过1424个赞
知道大有可为答主
回答量:6532
采纳率:84%
帮助的人:443万
展开全部
第一个里面等价于y=y+(i++),所以y=3+2=5;(这里的y是函数里面临时定义的,屏蔽了外面的全局变量)
main函数里面y=y+(i++)=2+2=4;(这里的y是全局变量,注意i仍然是2,因为函数传递的形参没有改变实参)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式