2025 年 9 月真题详解
一、单选题(每题 2 分,共 30 分)

答案:C 考察基本数据类型与运算符。在 C++ 中,int 类型相除执行整数除法,10÷3 结果为 3。赋值给 double 类型 c 后值为 3.0。

答案:C 考察逻辑运算符优先级与结合性。选项 A 和 D 因&&要求全真而失败;B 项!取反后为假;C 项||只要有一真即为真,(10!=10) 为假但 (5>=3) 为真,整体结果 true。

答案:D 数组下标从 0 开始。定义 int arr[5] 合法范围为 0~4,访问 arr[5] 属于越界,会导致未定义行为。

答案:B 涉及循环与变量作用域。外层 sum 初始为 0。循环内定义的局部 sum 仅在该作用域有效,不影响外层累加。i=1,3,5 时分别累加 1,3,5,最终 sum 为 9。

答案:B 函数定义规范。返回值需明确类型,参数也需指定类型。A、D 返回 void 错误,C 参数无类型,仅 B 符合语法且逻辑正确。

答案:B 数组初始化规则。arr[4] 未显式初始化元素默认为 0,即 {1, 2, 3, 0}。执行 arr[3] = arr[0] + arr[2] 后变为 {1, 2, 3, 4}。

答案:B 函数特性辨析。函数可无参,main 函数虽特殊但仍可被调用(如递归),C++ 不支持嵌套定义函数。return 虽只返回一个值,但可通过指针或引用间接传递多个数据。

答案:D continue 语句跳过本次循环剩余部分。i -= 3 后直接 continue,count++ 从未执行,循环结束 count 仍为 0。

答案:A 循环嵌套输出规律。i=0 输出 0#,i=1 输出 01#,依此类推,最终结果为 0#01#012#0123#。

答案:C 全局变量作用域。外部声明的变量作用域至程序结束,但在多文件结构中若未 extern 声明,跨文件不可见。

答案:D 整数反转与溢出判断。int 范围限制在 -2147483648~2147483647。1463847412 反转后为 2147483641,未溢出;更大数值则可能超出范围。

答案:C 数组最大值查找(打擂台法)。假设第一个元素最大,遍历后续元素比较更新。

答案:D 函数参数与返回类型。C++11 起必须显式声明返回类型。形参存储在栈中,函数结束释放。void 函数可含 return 语句用于提前退出。


答案:C 数组越界检查。for 循环条件 i <= SIZE 导致访问 arr[SIZE] 越界,且 cout << arr[SIZE] 同样越界,共两处错误。

答案:D 字符串比较。string 对象可用 == 比较内容,字符数组需用 strcmp() 函数。
二、判断题(每题 2 分,共 20 分)

答案:错误 sizeof('a') 在 C++ 中 char 类型为 1 字节,C 语言中常为 int 大小。表述称总是 1 不准确。

答案:正确 全局变量未显式初始化时,编译器自动初始化为 0,避免未定义行为。

答案:正确 do-while 先执行循环体再判断条件,至少执行一次。

答案:正确 ++i 返回左值(引用),i++ 返回右值(临时副本)。

答案:错误 枚举值是独立类型,非 int 类型,虽可隐式转换但本质不同。

答案:错误 宏定义是文本替换。SQUARE(2+3) 展开为 2+3*2+3=11,而非 25,需加括号处理优先级。

答案:错误 char 类型可能是 signed 或 unsigned,取决于编译器实现,范围不固定。

答案:错误 条件运算符优先级高于赋值,但表达式合法性取决于操作数是否可修改(如常量不可赋值)。

答案:错误 #include "" 优先搜当前目录,< > 搜系统路径,搜索策略不同。

答案:错误 extern 用于声明而非定义,同一作用域内变量不能多次定义。
三、编程题(每题 25 分,共 50 分)
1. 数组模拟操作
本题核心在于模拟算法与数组遍历。由于操作次数未知,采用 while(true) 配合内部终止条件判断更为稳妥。逻辑是找到最大值下标,减去最小非零值,直到全为 0。
#include <bits/stdc++.h>
using namespace std;
int n, arr[105];
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
int cnt = 0;
while (true) {
int maxid = 0, minn = 100;
for (int i = 0; i < n; i++) {
if (arr[i] >= arr[maxid]) maxid = i;
if (arr[i] != 0 && arr[i] < minn) minn = arr[i];
}
if (arr[maxid] == 0) break;
arr[maxid] -= minn;
cnt++;
}
cout << cnt;
return 0;
}
2. 日期计算与格式化输出
这道题涉及闰年判断、星期推算及周期性问题。需要掌握每月天数表,根据目标月份与基准日(2025 年 9 月 1 日周一)计算偏移量。注意负数取余的处理方式,以及 setw 格式控制。
#include <bits/stdc++.h>
using namespace std;
int n, months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
cin >> n;
cout << "MON" << " " << "TUE" << " " << "WED" << " " << "THU" << " " << "FRI" << " " << "SAT" << " " << "SUN" << endl;
int start = 1; // 2025 年 9 月 1 日是星期一
if (n < 9) {
for (int i = 8; i >= n; i--) start -= months[i];
} else if (n > 9) {
for (int i = 9; i < n; i++) start += months[i];
}
// 处理负数取余
start = (start % 7 + 7) % 7;
if (start == 0) start = 7;
for (int i = 1; i < start; i++) cout << setw(3) << ' ' << " ";
for (int i = 1; i <= months[n]; i++) {
cout << setw(3) << i << " ";
if (start % 7 == 0) cout << endl;
start++;
}
return 0;
}
对于固定年份输出,也可考虑纯打表方式,关键在于理解基础逻辑。


