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

AK CSP › CSP-S 2022 第一轮真题 › 第29题

CSP-S 2022 第一轮 第29题:删除第23行的强制类型转换,程序的行为不变。(

阅读程序·判断 · 程序基本概念与数据类型 · 答案 F

题目

1  #include <iostream>
2  #include <algorithm>
3
4  using namespace std;
5
6  const int MAXL = 1000;
7
8  int n, k, ans[MAXL];
9
10 int main(void)
11 {
12     cin >> n >> k;
13     if (!n) cout << 0 << endl;
14     else
15     {
16         int m = 0;
17         while (n)
18         {
19             ans[m++] = (n % (-k) + k) % k;
20             n = (ans[m - 1] - n) / k;
21         }
22         for (int i = m - 1; i >= 0; i--)
23             cout << char(ans[i] >= 10 ?
24                          ans[i] + 'A' - 10 :
25                          ans[i] + '0');
26         cout << endl;
27     }
28     return 0;
29 }

假设输入的 n 在 int 范围内,k 为不小于 2 且不大于 36 的正整数,完成下面的判断题和单选题:

本小题

删除第 23 行的强制类型转换,程序的行为不变。

选项

  • T. 正确
  • F. 错误

答案

F

题解

选 F(错误)。

关键是:cout 输出 char 类型时显示字符,输出 int 类型时显示整数。

第 23~25 行的表达式: ``cpp ans[i] >= 10 ? ans[i] + 'A' - 10 : ans[i] + '0' ` 其中字符参与整数运算时会提升为 int,所以整个表达式的结果是 int`。

以输入 1 2 为例,ans[0] = 1,表达式得到 1 + '0',在通常的 ASCII 编码下值为 49:

  • 保留 char(...):将 49 转为字符 '1',输出 1。
  • 删除 char(...):直接输出整数 49。

因此,删除强制类型转换后,程序的输出会改变。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号