小测试-04月25日
朝外信奥 2 队 2026-04-25 当堂测验(答案版)
计算机基础知识 + C++ 基础语法综合复习
- 主题:计算机基础知识 + C++ 基础语法综合复习
- 题量:25 题
- 结构:15 道单项选择题 + 2 组阅读程序题(每组 5 题)
- 范围:循环、判断、数组、字符串、函数、结构体、指针,以及 `max / min / swap / sort`
- 说明:尽量避开上次卷子的原题,重点考察概念理解和代码阅读
一、单项选择题
1. 下列关于”硬件”和”软件”的说法,正确的是( )。
答案C
C++ 编译器是将源代码转换为可执行程序的程序,属于系统软件。操作系统是软件,键盘、显示器、鼠标都是硬件。
2. 下列存储单位从小到大排列正确的是( )。
答案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);
答案B
a/b = 17/5 = 3(整除),a%b = 17%5 = 2,所以第一个输出是 3+2 = 5;a/(b-2) = 17/3 = 5(整除)。
4. 当价格不变时,集成电路上可容纳的元器件数量大约每隔 18~24 个月就会增加一倍,性能也将提升一倍。提出该规律的是( )。
答案C
这是摩尔定律(Moore’s Law),由 Intel 创始人戈登·摩尔于 1965 年提出。
5. 十进制小数 `11.375` 对应的二进制数是( )。
答案A
整数部分:11 = 8+2+1 = 1011₂;小数部分:0.375 = 0.25+0.125 = 0.011₂;合并得 1011.011。
6. 8 位二进制数中去掉符号位后,最大能表示多少个字符( )。
答案C
8 位去掉符号位剩 7 位,可以表示 2⁷ = 128 个不同的值(0-127)。
7. 以下不是属于国家顶级域名的是( )。
答案C
.sg(新加坡)、.cn(中国)、.jp(日本)都是国家顶级域名;.net 是通用顶级域名。
8. 在写递归函数时,哪些定义一般不写在递归函数中?( )
答案D
数组作为局部变量在递归函数中会重复分配内存,容易造成栈溢出,应作为全局变量或参数传递。
9. 老师让 6 位同学围成一个圈,请问有多少种排法?( )
答案B
圆排列公式:n 个人围成一圈的排列数为 (n-1)! = 5! = 120。
10. 下面函数调用后输出结果是( )。
int f(int x) {
return x * x – 1;
}
cout << f(4);
答案B
f(4) = 4×4 – 1 = 16 – 1 = 15。
11. 关于结构体 `struct Student { string name; int score; };`,下列说法正确的是( )。
答案B
结构体定义了数据类型 Student,可以用它来定义变量,如 `Student s;`。结构体可以有多个成员,成员可以是任何类型,也可以构成数组。
12. 已知:`int a = 10; int *p = &a;` 则 `*p` 的值是( )。
答案C
p 是指向 a 的指针,*p 是对指针解引用,得到指针指向的变量的值,即 a 的值 10。
13. 下面程序执行后,`a` 和 `b` 的值分别是( )。
int a = 3, b = 8;
swap(a, b);
cout << a << ‘ ‘ << b;
答案B
swap 函数交换两个变量的值,执行后 a=8,b=3。
14. 下面表达式的值是( )。
max(6, min(10, 3 + 5))
答案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);
答案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` 指向的是( )。
答案B
`int *p = &a;` 表示 p 指向变量 a 的地址。
17. 执行 `*p = *p + 3;` 后,`a` 的值是( )。
答案C
*p 就是 a,原来 a=2,执行后 a = 2 + 3 = 5。
18. 执行 `b = b + a;` 后,`b` 的值是( )。
答案C
此时 a 已经是 5,原来的 b=5,执行后 b = 5 + 5 = 10。
19. 程序最终输出是( )。
答案B
最终 a=5,b=10,输出为 `5 10`。
20. 如果把 `int *p = &a;` 改成 `int *p = &b;`,则程序最终输出是( )。
答案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` 函数的主要用途是( )。
答案B
cmp 是比较函数,用于 sort 函数确定两个元素的相对顺序。
22. 排序时,优先按什么规则排?( )。
答案C
cmp 函数首先比较分数,`a.score > b.score` 表示分数高的排在前面,即从大到小。
23. 对于 `Tom(90)` 和 `Anna(90)`,谁会排在前面?( )。
答案B
分数相同时按名字字典序从小到大排,”Anna” < "Tom",所以 Anna 排在前面。
24. 排序后第一个学生的名字是( )。
答案B
Lucy 分数最高(95 分),排在第一位。
25. 程序最终输出是( )。
答案B
排序结果:Lucy(95) > Anna(90) > Tom(90) > Bob(88),输出名字的顺序为:Lucy Anna Tom Bob。
