C++ 四级单选 15 题 / 判断 10 题答案速查 + 本场考点 + 难度评价 + 易错题精解。想知道孩子这套能考多少?免费做这套真题模考,3 秒自动估分。
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | C | B | B | C | A | D | C | C | C | C | B | D | B | C | A |
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | × | √ | × | √ | × | √ | × | √ | × |
较难。指针、结构体是门槛;函数参数、结构体数组、排序稳定性是高频考点。
本卷 2 道编程题:《新汉诺塔》《有序网格》。逐题题解整理中,将陆续更新。
const int *p 是"指向常量的指针":不能通过 *p 改所指的值,但指针本身可以改指向,所以 p = &b 合法。选 B。(要"指针不可改"得写 int * const p。)
int(*p)[4] 是"指向含 4 个 int 的一维数组"的指针,p+1 跳到第 1 行。*(*(p+1)+2) 即 goods[1][2] = 14。选 B。
二维数组作形参必须给出除第一维外的所有维长。3 行 5 列应写 int arr[][5](等价于 int(*arr)[5])。选 C。
update(int &score) 按引用修改的是 main 里的局部 score:80+5=85。::score 是全局变量,仍为 60。输出 85 60。选 A。
reset(Device d) 传值,改的是副本,原 d.state 不变(仍 2);start(Device &d) 传引用,d.state 变 3。输出 7 3。选 D。传值/传引用是本题核心。
p = books + 1 指向 books[1](Math,150),p->pages += 10 改的就是 books[1],变 160。输出 Math 160。选 C。
这是斐波那契式递推(每步方法数 = 前两步之和)。ways:b 依次为 2→3(i=3)→5(i=4)→8(i=5)→13(i=6),ways(6)=13。选 C。
排序前 (90,'A') 在 (90,'C') 之前,排序后变成 C 在 A 之前——相同 score 的相对顺序被打乱,说明该排序不稳定。选 C。
插入排序:把 key 插入前面有序段。只要前一个元素比 key 大就右移,条件是 a[j] > key。选 B。
双重循环,内层 j 从 i+1 到 n,总比较次数约 n(n-1)/2,时间复杂度 O(n²)。选 D。
fin >> a >> b 以空白分隔,a="Blue"、b="Sky"。输出 b<<"-"<<a 得 Sky-Blue。选 B。
throw age 抛出的是 int(-1)。catch(const char*) 类型不匹配跳过,被 catch(int value) 捕获,输出 C 加 value,即 C-1。选 C。异常按类型精确匹配。
优化冒泡:每轮开始把标志置 false,一旦发生交换就置 true;若一整轮没交换(!changed)说明已有序,提前 break。故两横线依次填 false、true。选 A。
函数只需在调用前有声明(原型),定义可以放到后面或别的文件。"必须先定义"说法错误。
change(int x) 是传值,函数内改 x 不影响 main 的 x,输出仍是 10 而非 20。要改需传引用 int& x。命题错误。
稳定的插入排序,移动条件应是严格 a[j] > key。若用 a[j] >= key,相等元素也会被越过,反而破坏稳定性。命题恰好说反,错误。
外层跑 n 次,内层 j 每次翻倍(j*=2)只跑约 log₂n 次,总复杂度是 O(n·log n),不是命题所给的值。命题错误。
throw "Error" 抛的是 const char*,而 catch(int e) 只接 int,类型不匹配接不住。异常未被捕获会导致程序异常终止,不会输出 Caught。命题错误。