单选题
1、第236题 (1.0分) 题号:209 若有以下程序段:int a=3,b=4; a=a^b;b=b^a;a=a^b;则执行以上 语句后,a和b的值分别是()。
A
a=3,b=4
B
a=4,b=3
C
a=4,b=4
D
a=3,b=3
答案解析
正确答案:B
解析:
这道题考查的是利用**异或运算(XOR)**交换两个变量值的经典算法。
### 1. 核心知识点:异或运算的性质
异或运算符 `^` 具有以下重要性质:
1. **自反性**:任何数与自身异或,结果为 0。即 $x \oplus x = 0$。
2. **恒等性**:任何数与 0 异或,结果为其本身。即 $x \oplus 0 = x$。
3. **交换律和结合律**:$a \oplus b = b \oplus a$,$(a \oplus b) \oplus c = a \oplus (b \oplus c)$。
基于这些性质,可以通过以下三步实现两个整数变量的交换,且不需要引入第三个临时变量:
1. `a = a ^ b`
2. `b = b ^ a` (此时右边的 `a` 已经是第一步计算后的值)
3. `a = a ^ b` (此时右边的 `a` 和 `b` 都是更新后的值)
### 2. 逐步推导过程
初始状态:$a = 3$, $b = 4$
**第一步:执行 `a = a ^ b`**
* 计算:$3 \oplus 4$
* $3$ 的二进制:`011`
* $4$ 的二进制:`100`
* 异或结果:`111` (即十进制的 7)
* 此时变量状态:**$a = 7$**, $b = 4$
**第二步:执行 `b = b ^ a`**
* 注意:这里的 `a` 是上一步更新后的值 7。
* 计算:$4 \oplus 7$
* $4$ 的二进制:`100`
* $7$ 的二进制:`111`
* 异或结果:`011` (即十进制的 3)
* 此时变量状态:$a = 7$, **$b = 3$**
* *解析:这一步实际上是将原始的 $a$ 值赋给了 $b$。因为 $b_{new} = b_{old} \oplus (a_{old} \oplus b_{old}) = a_{old}$。*
**第三步:执行 `a = a ^ b`**
* 注意:这里的 `a` 是 7,`b` 是上一步更新后的值 3。
* 计算:$7 \oplus 3$
* $7$ 的二进制:`111`
* $3$ 的二进制:`011`
* 异或结果:`100` (即十进制的 4)
* 此时变量状态:**$a = 4$**, **$b = 3$**
* *解析:这一步实际上是将原始的 $b$ 值赋给了 $a$。因为 $a_{new} = (a_{old} \oplus b_{old}) \oplus a_{old} = b_{old}$。*
### 3. 结论
执行完上述语句后:
* $a$ 的值变为 4
* $b$ 的值变为 3
对比选项:
A. a=3, b=4
B. a=4, b=3
C. a=4, b=4
D. a=3, b=3
故正确答案为 **B**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第23题 (1.0分) 题号:552 应用缓冲文件系统对文件进行读写操作,关闭文件的函数名为()。
单选题
1、第22题 (1.0分) 题号:431 下列程序的输出结果是()。
单选题
1、第21题 (1.0分) 题号:633 对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是()。
单选题
1、第20题 (1.0分) 题号:715 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是()。
单选题
1、第19题 (1.0分) 题号:100 以下标识符中,不能作为合法的C用户定义标识符的是()。
单选题
1、第18题 (1.0分) 题号:612语句while(!E);中的表达式!E等价于()。
单选题
1、第17题 (1.0分) 题号:195 若有下列定义和语句,则对a数组元素的非法引用是()。 int a[2][3], ( )[3]; pt=a;
单选题
1、第16题 (1.0分) 题号:711 下列选项中正确的语句组是()。
单选题
1、第15题 (1.0分) 题号:594设int x=1,y=1;表达式(!x++ || y--)的值是_( )。
单选题
1、第14题 (1.0分) 题号:106 以下叙述中不正确的是()。
