符合C语言语法的表达式

已知各变量的类型说明如下: A
int i=8,k,a,b;
unsigned long w=5;
double x=1.42,y=5.2;
则以下符合C语言语法的表达式是:
A) a十=a一=(b= 4)*(a=3) B)a=a*3=2 C) x%(一3) D)y=f1oat(i)
为什么选A?

B C

=左边必须是左值(可以被赋值的值,也被称作变量表达式,变量、数组表达式、指针表达式的值都是左值。但是算数、逻辑运算表达式、函数表达式的值不是左值所以不能被赋值)所以A、D错误

C是逗号表达式。(逗号表达式的值和类型都由逗号右边的表达式决定,就是说连续逗号表达式比如a,b,c,d等价于a,(b,(c,(d)))

-
赋值仅仅是一种表达式,也有值和类型a = 1。的值是1类型是int,所以完全可以赋值给另一个int类型变量b = (a = 1)也就是b = a = 1。不存在不可以连续赋值的说法。

括号表达式也是一样。只要有类型和值就能赋值给对应的变量这是赋值的原则。

B和C的写法在标准C编译器上都是可以编译通过的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-07-06
别听上面的瞎说

“=”作用是将一个数据赋给一个变量,也可以将一个表达式的值赋给一个变量

注意是赋给一个变量,所以A 9+b+c=a+9 错
D 9+b++=a+7 还有一个错误是b++是表达式,不是变量

逗号运算符,作用是将两个表达式连接起来。计算过程是先计算括号前面的,在计算逗号后面的,整体值是逗号后面的。

B C都是正确的。
C是可以在电脑上运行的,因为电脑会先计算b++,值为a=0,此时,b=1,若改为++b,则a=1,括号也没问题

这道题考你对运算符,表达式的掌握,
刚刚看的教材,你又让我复习了基础知识,谢谢了
第2个回答  推荐于2017-11-24
A) a十=a一=(b= 4)*(a=3)
优先级问题
看谭浩强C语言的地356页,附录C,运算符和结合性
这表达式可简化为:
a = a + (a - ( (b=4)*(a=3) ))
先从内层括号执行到外层括号
B)a=a*3=2 //不能出现连续赋值
C) x%(一3)//不能对负数取余
D)y=f1oat(i) //强制转换语法是y = (float)i;

不知解析是否有错!本回答被提问者采纳
第3个回答  2018-06-26
A) a十=a一=(b= 4)*(a=3)
优先级问题
谭浩强C语言的地356页,附录C,运算符和结合性
表达式可简化为:
a = a + (a - ( (b=4)*(a=3) ))
先从内层括号执行到外层括号
B)a=a*3=2 //不能出现连续赋值
C) x%(一3)//不能对负数取余
D)y=f1oat(i) //强制转换语法是y = (float)i;

不知解析是否有错!本回答被网友采纳
第4个回答  2008-07-05
答案是B.
A和D中都有连等,所以显然错误
C选项中,赋值号右边不能用逗号表达式,所以错误。
本题考点在于赋值运算规则的运用。
C语言中不允许连续在一个表达式中出现连续的赋值运算。