C语言中有一道题目:已知"int a=4,b=5,c;",则执行表达式"c=a=a>b后变量a的值为( ) A 0 B 1 C 4 D 5
3个回答
2012-10-06
展开全部
A, a=0
= 是由右向左运算的,
a>b值为false,值为0
所以c=a=0
另外也可以写程序验证:
#include <stdio.h>
int main(void)
{
int a=4,b=5,c;
c=a=a>b;
printf("a:%d, b:%d, c:%d\n",a,b,c);
return 0;
}
= 是由右向左运算的,
a>b值为false,值为0
所以c=a=0
另外也可以写程序验证:
#include <stdio.h>
int main(void)
{
int a=4,b=5,c;
c=a=a>b;
printf("a:%d, b:%d, c:%d\n",a,b,c);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案是A;因为a=a>b意思为把波尔值a>b赋值给a,因为a大于b,a>b等于0,所以a为0.望采纳~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个涉及到C语言的单目运算符优先级与结合性的知识:
优先级:
在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性:
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。
在你的问题中,"="在表达式中是赋值运算符,而在C语言中,赋值运算符是典型的右结合性运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
所以,本例就是先计算双目运算符“>”:a>b,因为a=4,b=5,a是小于b的,所以式子计算就变成了c = a = 0,然后再计算a = 0(即a = (a > b)),最后式子就是c = 0, 所以答案选A
具体运算符优先级和结核性请参考:
http://wenku.baidu.com/view/044cc58a6529647d27285242.html
优先级:
在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性:
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。
在你的问题中,"="在表达式中是赋值运算符,而在C语言中,赋值运算符是典型的右结合性运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
所以,本例就是先计算双目运算符“>”:a>b,因为a=4,b=5,a是小于b的,所以式子计算就变成了c = a = 0,然后再计算a = 0(即a = (a > b)),最后式子就是c = 0, 所以答案选A
具体运算符优先级和结核性请参考:
http://wenku.baidu.com/view/044cc58a6529647d27285242.html
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询