C语言,逻辑运算的例题,答案到底是(B)还是(D),麻烦分析一下。 5

例题2:有以下程序:main(){inti=1,j=2,k=3,a;a=i++==1&&(++j==3||k++==3);printf(“%d%d%d\n”,i,j,k)... 例题2:有以下程序:
main()
{
int i=1,j=2,k=3,a;
a=i++==1&&(++j==3||k++==3);
printf(“%d %d %d\n”,i,j,k);
}
程序运行后的输出结果为 。
(A)1 2 3
(B)2 3 4
(C)2 2 3
(D)2 3 3
解析:a=i++==1&&(++j==3||k++=3);圆括号的优先级最高,先算,++次之、==次之、&&次之、=最低。
再圆括号中:++最高级,==次之,||最低。
j=2,故++j的表达式结果为3,且j=3;k=3,故k++的表达式结果为3,且k=4。
++j==3等价于3==3,为真,而k++==3等价于3==3,为真。
又||要求两边有一个为真即为真,故++j==3||k++==3的结果为真。
i=1,故i++的表达式结果为1,且i=2。
i++==1等价于1==1,为真。
又&&是两边均为真为真,故i++==1&&(++j==3||k++==3)的结果为1。
综上a=1,i=2,j=3,k=4,故答案为选项(B)。

教材上的答案是选项(D)。
其解析的大概意思是:
【||要求一个为真即为真,其结合性为自左向右,如果左边算出来的结果为真,右边的就不用计算,即k++没有执行,也就是说,k依旧为3】
【综上a=1,i=2,j=3,k=3,故答案为选项(D)。】
展开
 我来答
苦瓜它不苦
2019-08-25 · TA获得超过211个赞
知道小有建树答主
回答量:334
采纳率:70%
帮助的人:69.2万
展开全部
逻辑运算符是顺序求值节点,C语言要求它的左表达式被优先求值,其次再根据短路效应决定是否对右表达式求值
逻辑与:当左表达式为真,对右表达式求值,当左表达式为假,结束逻辑表达式
逻辑或:当左表达式为假,对右表达式求值,当左表达式为真,结束逻辑表达式
根据两个规则换算:
a=i++==1&&(++j==3||k++==3);
首先对i++ == 1求值:其结果为真,a=1&&(++j==3||k++==3)
其次对(++j==3||k++==3)求值,对++j == 3求值,结果为真,a=1&&(1 || k++==3)
根据短路效应,不对逻辑或右表达式求值,也就是不执行,逻辑与表达式右值为真
根据上述求值,实际上也就是对i和j进行了计算,而对k没有计算,k值不变
当语句结束,i == 2, j == 3, k == 3
TableDI
2024-07-18 广告
VLOOKUP函数是Excel中用于数据匹配的重要工具。其使用方法是:在个参数中输入要查找的值,第二个参数是包含数据的范围或表格,第三个参数指定返回数据的列号,第四个参数(可选)决定查找方式(0为精确匹配,其他为近似匹配)。例如,假设我们想... 点击进入详情页
本回答由TableDI提供
White_MouseYBZ
2019-08-25 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6064万
展开全部
D)正确,选D)。教材上的分析正确——k++没有执行的原因是||前面的++j==3已经成“真”,||后面就没有必要执行了,俗称||的短路现象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GTA小鸡
高粉答主

2019-08-25 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.2亿
展开全部
运算符的优先级和表达式的求值顺序是两个不同的概念,两者没有直接关系。“圆括号的优先级最高,先算”解析从这一句话开始就是错误的,故之后的内容可以无视。
&&运算符是一个顺序点,在程序经过顺序点时,之前的所有表达式必须已经求值完毕,它们的副作用必须已经发生。因此一定是先对&&之前的表达式i++==1求值。这个表达式求值结果为真,求值完毕后i变为2。由于&&左边的表达式为真,还需要进一步对右边的表达式求值,接下来就是求子表达式++j==3||k++==3的值。
||运算符同样是一个顺序点,因此一定是先对++j==3求值。这个表达式的求值结果同样为真,求值完毕后j变为3。由于运算符||左边的表达式为真,整个或运算结果一定为真,发生短路运算,不再计算右边的表达式k++==3。因此k的值不会发生变化,为初始值3。
因此,最终i=2,j=3,k=3。教材答案正确,但解析错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hyx0077
2019-08-25 · TA获得超过126个赞
知道小有建树答主
回答量:297
采纳率:63%
帮助的人:41.9万
展开全部
--你直接用程序写出来执行一下就知道谁对谁错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式