'R' 在ASCII码表中通常表示为65(大写字母R的ASCII码,假设这里指的是大写R,因为小写r的ASCII码是114,但题目中用的是大写'R')或其他字符对应的ASCII值,如果a被赋值为'R'的ASCII码。a%10 就是对这个ASCII值进行模10运算,这在C语言中是完全合法的。
B. a=int(3e2)
这个表达式有几个问题。首先,int 是一个数据类型,不是一个函数,因此 int(3e2) 是错误的语法。正确的做法应该是使用类型转换,如 (int)3e2,但这仍然不是一个赋值表达式的正确形式,因为它只是进行了类型转换而没有赋值目标。即使我们改为 a = (int)3e2;,这也是一个合法的语句,但原表达式中的写法是错误的。
C. 2*a=a++
这个表达式是非法的。在C语言中,你不能将一个值(如 2*a)作为赋值操作的目标。赋值操作的目标必须是一个左值(lvalue),即一个可以表示内存位置的表达式。2*a 是一个右值(rvalue),表示一个计算结果,不能作为赋值的目标。
D. a=a+a=a+3
这个表达式也是非法的。在C语言中,赋值操作是从右到左结合的,但这里的表达式 a+a=a+3 试图将 a+a(一个右值)作为赋值操作的目标,这是不允许的。即使我们尝试将其分解为两个步骤,如 a = (a + a) = (a + 3),这也是非法的,因为 (a + a) 仍然是一个右值。
登录后提交答案