单选题
8.设有 int x=11; 则表达式 (x++ * 1/3) 的值是()。
A
3
B
4
C
11
D
12
答案解析
正确答案:A
解析:
这道题考察的是 C/C++ 语言中**后置自增运算符**的优先级、结合性以及**整数除法**的特性。
### 详细解析步骤:
1. **分析表达式结构**:
表达式为 `(x++ * 1 / 3)`。
这里涉及三个运算符:后置自增 `++`、乘法 `*`、除法 `/`。
2. **确定运算顺序(优先级与结合性)**:
* **后置自增 `x++`**:优先级最高。它的含义是“先使用变量当前的值参与表达式运算,然后再将变量的值加 1”。
* **乘法 `*` 和除法 `/`**:优先级相同,且高于赋值等操作,但低于后置自增。它们遵循**从左到右**的结合性。
3. **逐步计算过程**:
* **第一步:处理 `x++`**
当前 `x` 的值为 11。
因为是后置自增,所以在该子表达式中,`x++` 取出的值是 **11**。
(注意:此时内存中 `x` 的值尚未改变,或者理解为稍后才会变为 12,但在当前取值瞬间是 11)。
* **第二步:代入原表达式**
表达式变为 `(11 * 1 / 3)`。
* **第三步:执行乘法 `11 * 1`**
`11 * 1` 的结果是 **11**。
表达式变为 `(11 / 3)`。
* **第四步:执行除法 `11 / 3`**
在 C/C++ 中,两个整数相除,结果依然是**整数**(向下取整,即截断小数部分)。
$11 \div 3 = 3.666...$
截断小数部分后,结果为 **3**。
4. **最终结果**:
表达式的值为 3。
(补充说明:表达式计算结束后,变量 `x` 的值会变为 12,但这不影响表达式本身的返回值)。
### 选项分析:
* **A. 3**:正确。整数除法 $11/3$ 的结果。
* B. 4:错误。这是四舍五入的结果,C语言整数除法是截断。
* C. 11:错误。这是 `x` 的初始值,或者是忽略了后续运算。
* D. 12:错误。这是 `x` 自增后的值,或者是误以为先自增再运算(即 `(12*1)/3 = 4`,但也得不出12)。
### 结论:
正确答案是 **A**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、〖第17题〗89) 以下标识符中,不能作为合法的C用户定义标识符的是()。
单选题
1、〖第16题〗202) 设有如下定义: struct sk {int a; float b;} data,*p;
单选题
1、〖第15题〗33) 若有以下定义:char s='\092'; 则该语句()。
单选题
1、〖第14题〗211)fgets(str,n,fp)函数从文件中读入一个字符串,以下正确的叙述是()。
单选题
1、〖第13题〗205) 变量p为指针变量,若p=&a,下列说法不正确的是()。
单选题
1、〖第12题〗22) 以下不符合C语言语法的赋值语句是()。
单选题
1、〖第11题〗61)设j和k都是int类型,则for循环语句 for(j=0,k=-1;k=1;j++,k++) printf(”****\n”);()。
单选题
10.以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5));
单选题
9.以下程序的输出结果为()。 main() {int i=010,j=10; printf(”%d,%d\n”,++i,j--); }
单选题
8.若有以下程序段:int a=3,b=4; a=a^b;b=b^a;a=a^b;则执行以上 语句后,a和b的值分别是()。
