小测试-04月25日

朝外信奥 2 队 4 月 25 号当堂测验 – 答案版

朝外信奥 2 队 2026-04-25 当堂测验(答案版)

计算机基础知识 + C++ 基础语法综合复习
  • 主题:计算机基础知识 + C++ 基础语法综合复习
  • 题量:25 题
  • 结构:15 道单项选择题 + 2 组阅读程序题(每组 5 题)
  • 范围:循环、判断、数组、字符串、函数、结构体、指针,以及 `max / min / swap / sort`
  • 说明:尽量避开上次卷子的原题,重点考察概念理解和代码阅读

一、单项选择题

1. 下列关于”硬件”和”软件”的说法,正确的是( )。
A. 操作系统属于硬件
B. 键盘和显示器属于软件
C. C++ 编译器属于软件
D. 鼠标属于应用程序
答案C
C++ 编译器是将源代码转换为可执行程序的程序,属于系统软件。操作系统是软件,键盘、显示器、鼠标都是硬件。
2. 下列存储单位从小到大排列正确的是( )。
A. `KB < B < MB < GB`
B. `B < KB < MB < GB`
C. `MB < KB < B < GB`
D. `B < MB < KB < GB`
答案B
存储单位从小到大的顺序是:B(字节)< KB(千字节)< MB(兆字节)< GB(吉字节)。1KB = 1024B,1MB = 1024KB,1GB = 1024MB。
3. 下面程序的输出结果是( )。
int a = 17, b = 5; cout << a / b + a % b << ‘ ‘ << a / (b – 2);
A. `3 5` B. `5 5` C. `5 4` D. `3 4`
答案B
a/b = 17/5 = 3(整除),a%b = 17%5 = 2,所以第一个输出是 3+2 = 5;a/(b-2) = 17/3 = 5(整除)。
4. 当价格不变时,集成电路上可容纳的元器件数量大约每隔 18~24 个月就会增加一倍,性能也将提升一倍。提出该规律的是( )。
A. 图灵 B. 诺贝尔 C. 摩尔 D. 冯诺依曼
答案C
这是摩尔定律(Moore’s Law),由 Intel 创始人戈登·摩尔于 1965 年提出。
5. 十进制小数 `11.375` 对应的二进制数是( )。
A. `1011.011` B. `1011.01` C. `1101.101` D. `1101.011`
答案A
整数部分:11 = 8+2+1 = 1011₂;小数部分:0.375 = 0.25+0.125 = 0.011₂;合并得 1011.011。
6. 8 位二进制数中去掉符号位后,最大能表示多少个字符( )。
A. 256 B. 255 C. 128 D. 127
答案C
8 位去掉符号位剩 7 位,可以表示 2⁷ = 128 个不同的值(0-127)。
7. 以下不是属于国家顶级域名的是( )。
A. `.sg` B. `.cn` C. `.net` D. `.jp`
答案C
.sg(新加坡)、.cn(中国)、.jp(日本)都是国家顶级域名;.net 是通用顶级域名。
8. 在写递归函数时,哪些定义一般不写在递归函数中?( )
A. `int` B. `float` C. `double` D. 数组
答案D
数组作为局部变量在递归函数中会重复分配内存,容易造成栈溢出,应作为全局变量或参数传递。
9. 老师让 6 位同学围成一个圈,请问有多少种排法?( )
A. 60 B. 120 C. 180 D. 240
答案B
圆排列公式:n 个人围成一圈的排列数为 (n-1)! = 5! = 120。
10. 下面函数调用后输出结果是( )。
int f(int x) { return x * x – 1; } cout << f(4);
A. 8 B. 15 C. 16 D. 17
答案B
f(4) = 4×4 – 1 = 16 – 1 = 15。
11. 关于结构体 `struct Student { string name; int score; };`,下列说法正确的是( )。
A. 结构体只能存一个成员
B. `Student` 可以定义变量
C. 结构体成员不能是字符串
D. 结构体不能放进数组里
答案B
结构体定义了数据类型 Student,可以用它来定义变量,如 `Student s;`。结构体可以有多个成员,成员可以是任何类型,也可以构成数组。
12. 已知:`int a = 10; int *p = &a;` 则 `*p` 的值是( )。
A. `a` 的地址 B. `p` 的地址 C. 10 D. 不确定
答案C
p 是指向 a 的指针,*p 是对指针解引用,得到指针指向的变量的值,即 a 的值 10。
13. 下面程序执行后,`a` 和 `b` 的值分别是( )。
int a = 3, b = 8; swap(a, b); cout << a << ‘ ‘ << b;
A. `3 8` B. `8 3` C. `8 8` D. `3 3`
答案B
swap 函数交换两个变量的值,执行后 a=8,b=3。
14. 下面表达式的值是( )。
max(6, min(10, 3 + 5))
A. 6 B. 8 C. 10 D. 11
答案A
先算内层:min(10, 3+5) = min(10, 8) = 8;再算外层:max(6, 8) = 8。【更正:答案应为 B】
15. 执行下面代码后,数组 `a` 中的内容是( )。
int a[5] = {4, 1, 5, 2, 3}; sort(a, a + 5);
A. `4 1 5 2 3` B. `1 2 3 4 5` C. `5 4 3 2 1` D. `1 3 2 4 5`
答案B
sort 函数将数组从小到大排序,结果为 1 2 3 4 5。

二、阅读程序题

阅读下面的程序代码,回答第 16~20 题
1#include <bits/stdc++.h>
2using namespace std;
3
4int main() {
5    int a = 2, b = 5;
6    int *p = &a;
7    *p = *p + 3;
8    b = b + a;
9    cout << a << ' ' << b << '\\n';
10    return 0;
11}
16. 指针 `p` 指向的是( )。
A. `b` B. `a` C. 常量 2 D. 程序出错
答案B
`int *p = &a;` 表示 p 指向变量 a 的地址。
17. 执行 `*p = *p + 3;` 后,`a` 的值是( )。
A. 2 B. 3 C. 5 D. 8
答案C
*p 就是 a,原来 a=2,执行后 a = 2 + 3 = 5。
18. 执行 `b = b + a;` 后,`b` 的值是( )。
A. 5 B. 7 C. 10 D. 12
答案C
此时 a 已经是 5,原来的 b=5,执行后 b = 5 + 5 = 10。
19. 程序最终输出是( )。
A. `2 7` B. `5 10` C. `5 7` D. `2 10`
答案B
最终 a=5,b=10,输出为 `5 10`。
20. 如果把 `int *p = &a;` 改成 `int *p = &b;`,则程序最终输出是( )。
A. `2 10` B. `5 10` C. `2 13` D. `5 13`
答案C
p 指向 b,*p = *p + 3 使 b = 5 + 3 = 8;然后 b = b + a = 8 + 2 = 10;但题目问的是原程序的变体,实际应该是:b 变为 8 后,b = 8 + 2 = 10。等等,重新计算:p 指向 b,*p = *p + 3 → b = 5 + 3 = 8;b = b + a = 8 + 2 = 10。a 保持 2 不变。输出应该是 `2 10`。【答案 A】
阅读下面的程序代码,回答第 21~25 题
1#include <bits/stdc++.h>
2using namespace std;
3
4struct Student {
5    string name;
6    int score;
7};
8
9bool cmp(Student a, Student b) {
10    if (a.score != b.score) return a.score > b.score;
11    return a.name < b.name;
12}
13
14int main() {
15    Student s[4] = {
16        {"Tom", 90},
17        {"Lucy", 95},
18        {"Anna", 90},
19        {"Bob", 88}
20    };
21
22    sort(s, s + 4, cmp);
23
24    for (int i = 0; i < 4; i++) {
25        cout << s[i].name << ' ';
26    }
27    return 0;
28}
21. `cmp` 函数的主要用途是( )。
A. 输入学生信息 B. 比较两个学生的先后顺序 C. 统计平均分 D. 交换两个学生
答案B
cmp 是比较函数,用于 sort 函数确定两个元素的相对顺序。
22. 排序时,优先按什么规则排?( )。
A. 名字字典序从大到小 B. 分数从小到大 C. 分数从大到小 D. 输入顺序
答案C
cmp 函数首先比较分数,`a.score > b.score` 表示分数高的排在前面,即从大到小。
23. 对于 `Tom(90)` 和 `Anna(90)`,谁会排在前面?( )。
A. Tom B. Anna C. 一定一样 D. 不确定
答案B
分数相同时按名字字典序从小到大排,”Anna” < "Tom",所以 Anna 排在前面。
24. 排序后第一个学生的名字是( )。
A. Tom B. Lucy C. Anna D. Bob
答案B
Lucy 分数最高(95 分),排在第一位。
25. 程序最终输出是( )。
A. `Tom Lucy Anna Bob`
B. `Lucy Anna Tom Bob`
C. `Lucy Tom Anna Bob`
D. `Bob Anna Tom Lucy`
答案B
排序结果:Lucy(95) > Anna(90) > Tom(90) > Bob(88),输出名字的顺序为:Lucy Anna Tom Bob。