
求解答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
为什么啊 展开
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
为什么啊 展开
4个回答
展开全部
首先执行
m=a<b
结果是m=0了。
这时候短路,就不执行(n=a<b)了。
k就=0了。
n并没有更改过。
所以k=0;m=0;n=1
另外:
作为考试题还可以,但是这样的写法千万不要在程序中出现。不好读!还容易出错 。如果是我手下的人这么写,那么我可以直接让他走人!
m=a<b
结果是m=0了。
这时候短路,就不执行(n=a<b)了。
k就=0了。
n并没有更改过。
所以k=0;m=0;n=1
另外:
作为考试题还可以,但是这样的写法千万不要在程序中出现。不好读!还容易出错 。如果是我手下的人这么写,那么我可以直接让他走人!
展开全部
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
相当于
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
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先运算m=a<b,m=0,
因为&&左边是false了编译器就认为整个与表达式为false,后面的n=a<b不做运算
所以k=0,与表达式的值,n=1
因为&&左边是false了编译器就认为整个与表达式为false,后面的n=a<b不做运算
所以k=0,与表达式的值,n=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这没有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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询