#P1396. CSP-J1 Day1-Day3 阶段模拟卷(第一套)
CSP-J1 Day1-Day3 阶段模拟卷(第一套)
CSP-J1 Day1-Day3 阶段模拟卷(第一套)
考查范围:Day1~Day3;建议考试时间:2 小时;满分:100 分。
一、单项选择题(共 15 题,每题 2 分,共 30 分)
第 1 题
冯·诺依曼计算机的中央处理器(CPU)主要由哪两部分组成?( {{ select(1) }})
- 运算器和控制器
- 存储器和输入设备
- 输入设备和输出设备
- 硬盘和内存
第 2 题
按照竞赛中常用的二进制换算, 等于多少 $ ext{KiB}$?( {{ select(2) }})
第 3 题
一个 8 位无符号整数能够表示的最大值是( {{ select(3) }})。
第 4 题
一个 8 位二进制补码有符号整数的表示范围是( {{ select(4) }})。
第 5 题
二进制数 对应的十进制数是( {{ select(5) }})。
第 6 题
十六进制数 对应的十进制数是( {{ select(6) }})。
第 7 题
十进制整数 的 8 位补码是( {{ select(7) }})。
00010010100100101110110111101110
第 8 题
已知 ASCII 编码中大写英文字母连续排列,执行以下代码后输出的是( )。
char c = 'A';
cout << char(c + 5);
{{ select(8) }}
EFG70
第 9 题
执行 int x = 44; cout << (x & (x - 1)); 后,输出结果是( {{ select(9) }})。
第 10 题
表达式 13 ^ 7 的值是( {{ select(10) }})。
第 11 题
使用公式 g = b ^ (b >> 1) 将二进制数 1011 转成格雷码,结果是( {{ select(11) }})。
1001101011011110
第 12 题
以下程序段的时间复杂度是( )。
for (int i = 1; i <= n; i *= 2)
cout << i << ' ';
{{ select(12) }}
第 13 题
执行以下代码后输出的是( )。
int x = 5;
if (x > 0)
if (x % 2 == 0)
cout << "A";
else
cout << "B";
{{ select(13) }}
- 不输出
BA- 编译错误
第 14 题
定义 int a[5]; 后,数组 a 的合法下标范围是( {{ select(14) }})。
第 15 题
执行以下程序后,x 和 y 的值分别是( )。
void change(int &a, int &b) {
a = a + b;
b = a - b;
a = a - b;
}
int main() {
int x = 3, y = 8;
change(x, y);
cout << x << ' ' << y;
}
{{ select(15) }}
二、阅读程序(判断题正确填 A,错误填 B;共 40 分)
第 16 题
阅读下面的程序,回答第 16~21 题。
#include <iostream>
using namespace std;
int main() {
unsigned int x;
cin >> x;
int cnt = 0;
while (x) {
x &= x - 1;
cnt++;
}
cout << cnt << endl;
return 0;
}
判断题
16.(1 分)当输入为 0 时,while 循环一次也不会执行。( {{ input(16) }})
17.(1.5 分)循环体中的 x &= x - 1 每执行一次,会消去 x 的二进制表示中最低位的一个 1。( {{ input(17) }})
18.(1.5 分)程序输出的是原输入的二进制表示中 1 的个数。( {{ input(18) }})
单选题
- 当输入为 45 时,程序输出为( {{ select(19) }})。
- 当输入为 64 时,程序输出为( {{ select(20) }})。
- 若输入正整数 x 的二进制位数随 x 增长,则该程序最坏情况下的时间复杂度是( {{ select(21) }})。
第 17 题
阅读下面的程序,回答第 22~27 题。保证输入字符串中至少有一个小写英文字母。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int cnt[26] = {};
for (char c : s) {
if (c >= 'a' && c <= 'z')
cnt[c - 'a']++;
}
int best = 0;
for (int i = 1; i < 26; i++) {
if (cnt[i] > cnt[best])
best = i;
}
cout << char('a' + best) << ' ' << cnt[best] << endl;
return 0;
}
判断题
22.(1.5 分)输入 abacaba 时,程序输出 a 4。( {{ input(22) }})
23.(1.5 分)当出现次数最多的小写字母不止一个时,程序输出字典序最小的那个。( {{ input(23) }})
24.(1.5 分)输入中的数字字符不会被用作数组 cnt 的下标。( {{ input(24) }})
单选题
- 输入
bbaacc时,程序输出( {{ select(25) }})。
a 2b 2c 2a 6
- 对于输入
bbaacc,若把cnt[i] > cnt[best]改为cnt[i] >= cnt[best],程序将输出( {{ select(26) }})。
a 2b 2c 2z 0
- 设输入字符串长度为 n,该程序的时间复杂度是( {{ select(27) }})。
第 18 题
阅读下面的程序,回答第 28~33 题。保证输入 n 为正整数。
#include <iostream>
using namespace std;
int f(int n) {
if (n < 10) return n;
return f(n / 10) + n % 10;
}
void g(int n) {
if (n == 0) return;
cout << n % 10;
g(n / 10);
}
int main() {
int n;
cin >> n;
cout << f(n) << endl;
g(n);
return 0;
}
判断题
28.(1.5 分)函数 f 返回正整数 n 的各位数字之和。( {{ input(28) }})
29.(1.5 分)函数 g 按照从个位到最高位的顺序输出 n 的各位数字。( {{ input(29) }})
30.(1.5 分)如果删除函数 g 中的 if (n == 0) return;,对于任意正整数输入,递归都无法正常结束。( {{ input(30) }})
单选题
- 当输入为 1203 时,程序输出为( {{ select(31) }})。
- 第一行
6,第二行1203 - 第一行
5,第二行3021 - 第一行
6,第二行3021 - 第一行
6,第二行321
- 函数 f 的递归深度与 n 的十进制位数同阶,其时间复杂度是( {{ select(32) }})。
- 若将函数 g 改为先执行
g(n / 10);,再执行cout << n % 10;,其主要作用变为( {{ select(33) }})。
- 按原顺序输出 n 的各位数字
- 计算 n 的各位数字之和
- 将 n 转成二进制
- 判断 n 是否为回文数
三、完善程序(共 10 题,每题 3 分,共 30 分)
第 19 题
(进制转换)以下函数将非负十进制整数 n 转换成 2~16 进制字符串。试补全程序。
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
string convertBase(int n, int base) {
const string digit = "0123456789ABCDEF";
if (__①__) return "0";
string s = "";
while (n > 0) {
s += digit[__②__];
__③__;
}
__④__;
return __⑤__;
}
- ①处应填( {{ select(34) }})。
n < 0base == 0n == 0s.empty()
- ②处应填( {{ select(35) }})。
n / basen % basebase % nn - base
- ③处应填( {{ select(36) }})。
n += basen %= basebase /= nn /= base
- ④处应填( {{ select(37) }})。
reverse(s.begin(), s.end())sort(s.begin(), s.end())s.clear()s += '0'
- ⑤处应填( {{ select(38) }})。
digitnsbase
第 20 题
(回文与数字字符统计)以下程序判断字符串是否为回文串,并统计其中数字字符的个数。试补全程序。
#include <iostream>
#include <string>
using namespace std;
bool palindrome(__①__) {
int l = 0;
int r = __②__;
while (l < r) {
if (__③__) return false;
l++;
__④__;
}
return true;
}
int main() {
string s;
cin >> s;
int digitCount = 0;
for (char c : s) {
if (__⑤__) digitCount++;
}
cout << (palindrome(s) ? "YES" : "NO") << endl;
cout << digitCount << endl;
return 0;
}
- ①处应填( {{ select(39) }})。
string sconst string &sint &schar s
- ②处应填( {{ select(40) }})。
0s.length()s.length() - 1s.length() + 1
- ③处应填( {{ select(41) }})。
s[l] != s[r]s[l] == s[r]l == rs.empty()
- ④处应填( {{ select(42) }})。
r++r = 0l--r--
- ⑤处应填( {{ select(43) }})。
c >= 'a' && c <= 'z'c >= '0' && c <= '9'c == 0c != '0'