A. 全国信息素养大赛初中组C++算法应用主题赛初赛模拟试卷03
全国信息素养大赛初中组C++算法应用主题赛初赛模拟试卷03
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
一、单项选择题(每题 5 分,共 50 分)
第 1 题
"丝路算术"游戏中,商队计算混合类型表达式。执行以下代码,输出结果是( )。
int a = 5, b = 2;
double c = a / b + 1.5;
cout << c;
{{ select(1) }}
- 2.5
- 3
- 3.5
- 4
第 2 题
"丝路历法"程序中,需要判断年份是否为闰年。阅读以下代码,若 year = 2000,输出结果是( )。
int year = 2000;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
cout << "闰年" << endl;
else
cout << "平年" << endl;
{{ select(2) }}
- 闰年
- 平年
- 编译错误
- 无法确定
第 3 题
"丝路驿站"商队清点货物。执行以下代码,输出结果是( )。
struct Goods {
string name;
int price;
};
Goods g = {"丝绸", 50};
g.price = g.price + 20;
cout << g.name << ":" << g.price;
{{ select(3) }}
- 丝绸:20
- 丝绸:50
- 丝绸:70
- 编译错误
第 4 题
"非遗制陶"工艺流程模拟:每烧制一件陶器消耗 3 斤陶土,每烧完 4 件陶器后可回收 5 斤废土再利用。工坊初始有 20 斤陶土。以下代码模拟最多能烧制多少件陶器,输出结果是( )。
int clay = 20, cnt = 0;
while (clay >= 3) {
clay -= 3;
cnt++;
if (cnt % 4 == 0) clay += 5;
}
cout << cnt;
{{ select(4) }}
- 8
- 9
- 10
- 11
第 5 题
"红色密码"解密中,需对整数进行逐位处理:跳过数字 0,将剩余数位反转重组。执行以下代码,输出结果是( )。
int n = 3081, s = 0;
while (n > 0) {
int d = n % 10;
if (d != 0) s = s * 10 + d;
n /= 10;
}
cout << s;
{{ select(5) }}
- 1803
- 183
- 3081
- 18
第 6 题
"茶马古道"地形图中,使用 3 行 4 列的二维数组记录海拔。执行以下代码,输出结果是( )。
int a[3][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}, {0, 9, 8, 7}};
int sum = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if ((i + j) % 2 == 0) sum += a[i][j];
}
}
cout << sum;
{{ select(6) }}
- 22
- 24
- 26
- 30
第 7 题
"锦绣中华"图案展示中,执行以下代码,输出的图案是( )。
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5 - i; j++) cout << " ";
for (int j = 1; j <= 2 * i - 1; j++) cout << "*";
cout << endl;
}
{{ select(7) }}
- 一个左对齐的直角三角形
- 一个右对齐的直角三角形
- 一个居中的等腰三角形(金字塔形)
- 一个 5 行 5 列的正方形
第 8 题
"汉诺塔"传说中,僧侣每移动一次金盘需诵经 1 分钟。以下递归函数计算移动 N 层塔所需诵经时间(分钟):
int chant(int n) {
if (n == 1) return 1;
return 2 * chant(n - 1) + 1;
}
执行 cout << chant(5); 的输出是( )。
{{ select(8) }}
- 15
- 16
- 31
- 63
第 9 题
"丝路古籍"数字化项目中,使用二分查找在已排序的编号中快速定位典籍。数组 a[10] = {5, 12, 18, 25, 33, 47, 56, 69, 78, 90} 存储了 10 本典籍的编号(升序)。以下代码查找编号 56,steps 记录查找过程中 while 循环体的执行次数,最终输出结果是( )。
int a[10] = {5, 12, 18, 25, 33, 47, 56, 69, 78, 90};
int target = 56;
int L = 0, R = 9, steps = 0;
while (L <= R) {
steps++;
int mid = (L + R) / 2;
if (a[mid] == target) break;
else if (a[mid] > target) R = mid - 1;
else L = mid + 1;
}
cout << steps;
{{ select(9) }}
- 2
- 3
- 4
- 5
第 10 题
"丝路商队"银两找零中,用面值为 10 两、5 两、1 两的银锭凑 37 两,贪心策略为每次优先选最大可用面值,使银锭总数最少。以下代码模拟这一贪心过程,输出最少银锭数是( )。
int n = 37, cnt = 0;
int coins[3] = {10, 5, 1};
for (int i = 0; i < 3; i++) {
cnt += n / coins[i];
n %= coins[i];
}
cout << cnt;
{{ select(10) }}
- 5
- 6
- 7
- 8
二、多项选择题(每题 5 分,共 25 分)
第 11 题
以下关于 C++ 基本概念的说法,正确的有( )。
A. const double PI = 3.14159; 定义了一个常量,其值在程序中不可修改
B. 表达式 sizeof(int) 用于获取 int 类型在内存中所占的字节数
C. C++ 中 // 表示单行注释,/* */ 表示多行注释
D. int x = 3.9 + 0.1; 执行后 x 的值为 4
{{ input(11) }}
第 12 题
执行以下代码,关于输出结果的描述,正确的有( )。
for (int i = 1; i <= 30; i++) {
if (i % 7 == 0) cout << i << " ";
}
A. 输出中包含数字 7 B. 输出中包含数字 14 C. 输出中包含数字 21 D. 输出中包含数字 35
{{ input(12) }}
第 13 题
"红色根据地"行军路线规划中涉及多种数据结构与算法。以下说法正确的有( )。
A. 栈(Stack)是一种后进先出(LIFO)的数据结构,入栈和出栈操作都在栈顶进行
B. 队列(Queue)是一种先进先出(FIFO)的数据结构,广度优先搜索(BFS)常使用队列逐层扩展节点
C. 对长度为 N 的已排序数组进行二分查找,每次比较可将搜索范围缩小一半,时间复杂度为 O(log N)
D. 单向链表支持通过下标(如 list[3])在 O(1) 时间内随机访问任意元素
{{ input(13) }}
第 14 题
"丝路贸易"数据处理中涉及多种算法。以下关于算法的说法,正确的有( )。
A. 冒泡排序每趟将当前未排序部分的最大(或最小)元素移动到正确位置 B. 深度优先搜索(DFS)通常使用栈(stack)或递归来实现 C. 归并排序(Merge Sort)采用"分而治之"思想,时间复杂度为 O(N log N) D. 贪心算法的核心是每一步选择当前最优,且对所有问题都能得到全局最优解
{{ input(14) }}
第 15 题
关于 C++ 函数与递归,以下说法正确的有( )。
A. 递归函数必须至少有一个终止条件(基线条件),否则会造成无限递归导致栈溢出 B. C++ 中函数的参数传递默认采用"值传递"方式,即形参是实参的副本 C. 函数内部可以调用其他函数(嵌套调用),但不能在函数内部定义另一个函数(嵌套定义) D. 递归实现的程序总是比等价的迭代(循环)实现运行得更快
{{ input(15) }}
三、判断题(每题 5 分,共 25 分)
第 16 题
在 C++ 中,表达式 5 > 3 && 2 < 1 的结果为 false(或 0)。( )
{{ select(16) }}
- 正确
- 错误
第 17 题
归并排序(Merge Sort)是一种基于"分而治之"思想的排序算法,其在任何情况下的时间复杂度都是 O(N log N),但需要 O(N) 的额外辅助空间来完成合并操作。( )
{{ select(17) }}
- 正确
- 错误
第 18 题
对数组 int a[5] = {5, 3, 1, 4, 2} 执行冒泡排序(升序,每趟将当前未排序部分的最大元素交换到末尾),第一趟排序结束后数组的最后一个元素一定是 5。( )
{{ select(18) }}
- 正确
- 错误
第 19 题
在算法设计中,贪心算法的核心思想是每一步都选择当前看起来最优的选项。对于任何问题,贪心算法都一定能得到全局最优解。( )
{{ select(19) }}
- 正确
- 错误
第 20 题
"红色密码"数据分析中,执行以下代码,输出结果表示数组元素的最大值。( )
int a[6] = {3, 1, 4, 1, 5, 9};
int ans = a[0];
for (int i = 1; i < 6; i++) {
if (a[i] < ans) ans = a[i];
}
cout << ans;
{{ select(20) }}
- 正确
- 错误
2026年05月22日初中组全国信息素养大赛C++算法应用主题赛第三场初赛模拟
- 状态
- 已结束
- 规则
- OI
- 题目
- 1
- 开始于
- 2026-5-22 20:00
- 结束于
- 2026-5-22 21:00
- 持续时间
- 1 小时
- 主持人
- 参赛人数
- 9