正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2022 第一轮真题 › 第 17 题
CSP-J 2022 第一轮 第 17 题:程序(一):把 short 改成 char 是否影响行为
题目
01 #include <iostream>
02
03 using namespace std;
04
05 int main()
06 {
07 unsigned short x, y;
08 cin >> x >> y;
09 x = (x | x << 2)& 0x33;
10 x = (x | x << 1)& 0x55;
11 y = (y | y << 2)& 0x33;
12 y = (y | y << 1)& 0x55;
13 unsigned short z = x | y << 1;
14 cout << z << endl;
15 return 0;
16 }
假设输入的 $x,y$ 均是不超过 $15$ 的自然数,完成下面的判断题和单选题:
本小题
将第 $7$ 行与第 $13$ 行的 short 均改为 char,程序行为不变。
选项
- A. 正确
- B. 错误
答案
B
题解
选 B. 错误。
关键不在于能存多大的数,而在于 cin 和 cout 对这两种类型的处理不同:
| 类型 | cin >> | cout << |
|---|---|---|
unsigned short | 按整数读取 | 输出数值 |
unsigned char | 按字符读取 | 输出字符 |
将 short 改成 char 后,变量类型变成了 unsigned char。
例如输入 1 2:
- 原程序读入数值
1和2,最终输出数值9。 - 修改后读入字符
'1'和'2',在常见的 ASCII 编码下,其编码值是49和50;最后的z也会按字符输出。
另外,若输入 12 3,修改后的两次读取会分别读到字符 '1' 和 '2',连输入的拆分方式都变了。
因此,即使输入范围很小、unsigned char 足够存储,程序行为仍然会改变。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号