题目
下列表达式符合C语言语法的是( )。A. a=8+b+c=a+8B. a=8+b++=a+8C.a=8+b,b++,a+8D. a=8=b
下列表达式符合C语言语法的是( )。
A. a=8+b+c=a+8
B. a=8+b++=a+8
C.a=8+b,b++,a+8
D. a=8=b
题目解答
答案
对每个选项逐一进行分析和判断:
A. a=8+b+c=a+8:这个表达式包含了两个赋值操作和一个加法操作。根据 C 语言的语法规则,赋值操作的结果可以作为整个赋值表达式的值,因此符合语法习惯。
B. a=8+b++=a+8:这个表达式中存在一个后置递增运算符(++),但它不能直接出现在等号的右侧。在 C 语言中,后置递增运算符的优先级较低,并且它的结合性是从左到右,所以这个表达式是非法的。
C. a=8+b, b++, a+8:这个表达式使用了逗号运算符(,)。逗号运算符会依次执行多个表达式,并返回最后一个表达式的值。根据 C 语言的语法规则,这是一个合法的表达式。
D. a=8=b:这个表达式包含了两个连续的等号,这是一个语法错误[1],不符合 C 语言的语法规则。
答案:
综上所述,符合 C 语言语法的表达式是:
A. a=8+b+c=a+8
C. a=8+b, b++, a+8。
解析
本题考查C语言的表达式语法,重点在于理解赋值运算符、后置递增运算符、逗号运算符的优先级和结合性。解题核心思路是:
- 赋值运算符是右结合的,可以嵌套使用;
- 后置递增运算符(++)不能直接作为赋值目标;
- 逗号运算符(,)会依次执行各表达式;
- 连续等号(=)会导致语法错误。
选项A:a=8+b+c=a+8
- 赋值运算符右结合:表达式被解析为
a = 8 + b + (c = a + 8)
。 - 嵌套赋值合法:先计算
c = a + 8
,再将结果代入8 + b + c
,最终赋值给a
。 - 结论:语法正确。
选项B:a=8+b++=a+8
- 后置递增运算符优先级低:表达式被解析为
a = 8 + (b++) = a + 8
。 - 右侧等号非法:
8 + (b++)
是值类型,不能作为赋值目标。 - 结论:语法错误。
选项C:a=8+b, b++, a+8
- 逗号运算符依次执行:先执行
a = 8 + b
,再执行b++
,最后计算a + 8
。 - 各子表达式均合法:赋值、递增、加法均符合语法。
- 结论:语法正确。
选项D:a=8=b
- 连续等号非法:
8 = b
将常量作为赋值目标,语法错误。 - 结论:语法错误。