求解答C入门级问题

include<stdio.h>intmain(){inta=2,b=1,m=1,n=1,k=1;k=(m=a<b)&&(n=a<b);printf("%d,%d,%d"... include<stdio.h>

int main()
{
int a=2,b=1,m=1,n=1,k=1;

k=(m=a<b)&&(n=a<b);

printf("%d,%d,%d",k,m,n);

return 0;
}

输出结果是0,0,1
为什么啊
展开
 我来答
why755
2014-01-12 · TA获得超过311个赞
知道小有建树答主
回答量:624
采纳率:75%
帮助的人:365万
展开全部
首先执行
m=a<b
结果是m=0了。
这时候短路,就不执行(n=a<b)了。
k就=0了。

n并没有更改过。

所以k=0;m=0;n=1

另外:
作为考试题还可以,但是这样的写法千万不要在程序中出现。不好读!还容易出错 。如果是我手下的人这么写,那么我可以直接让他走人!
百度网友6fe74e2
2014-01-12 · TA获得超过6595个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:369万
展开全部
k=(m=a<b)&&(n=a<b);
相当于
k=(m=(a<b))&&(n=(a<b));
由于a=2,b=1
所以a<b不成立值为0,
所以又相当于
k=(m=0)&&(n=(a<b));
好了,由于是&&运算,m=0时,这整个式子的值已经是0了
后面的n=(a<b)不再计算

所以,k=0,m=0但由于n=(a<b)不计算,所以n是原来的值1
所以输出

0,0,1
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
米白微白
2014-01-12 · TA获得超过179个赞
知道小有建树答主
回答量:121
采纳率:75%
帮助的人:59.2万
展开全部
先运算m=a<b,m=0,
因为&&左边是false了编译器就认为整个与表达式为false,后面的n=a<b不做运算
所以k=0,与表达式的值,n=1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你我他说吧123
2014-01-12 · TA获得超过133个赞
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:71.9万
展开全部
你这没有if判断,你是想输出什么
追问
运行确实有输出结果啊,
这是一道选择题……
题目本身是
#includevoid main(){ int a=2,b=1,m=1,n=1,k=1; k=(m=a<b)&&(n=a<b); printf("%d,%d,%d",k,m,n); }
应该都一样吧。
我编译运行过的
追答
这是考了<,=的优先级问题,先计算<,后赋值给m.
&&后的式子不用在计算,所以输出0,0,1,如果是&就要计算后面的判断了,结果是0,0,0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式