正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2022 第一轮真题 › 第 17 题

CSP-J 2022 第一轮 第 17 题:程序(一):把 short 改成 char 是否影响行为

阅读程序 · 程序基本概念与数据类型 · 难度 中等 · 答案 B

题目

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$ 的自然数,完成下面的判断题和单选题:
CSP-J 2022 第一轮 第 17 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

将第 $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号