A. 全国信息素养大赛初中组C++算法应用主题赛初赛模拟试卷02
全国信息素养大赛初中组C++算法应用主题赛初赛模拟试卷02
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
一、单项选择题(每题 5 分,共 50 分)
第 1 题
在 C++ 中,表达式 (7 / 2 * 2 == 7) 的值是( )。
{{ select(1) }}
- true(或 1)
- false(或 0)
- 编译错误
- 结果不确定
第 2 题
"丝路历法"程序中,需要根据年份判断闰年。阅读以下代码,若 year = 1900,输出结果是( )。
int year = 1900;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
cout << "闰年" << endl;
else
cout << "平年" << endl;
{{ select(2) }}
- 闰年
- 平年
- 编译错误
- 无法确定
第 3 题
"丝路商队"行军计划中,第 1 天行军 10 里,之后每天比前一天多行军 5 里。以下代码使用递推思想计算前 6 天共行军多少里,输出结果是( )。
int total = 0, step = 10;
for (int i = 1; i <= 6; i++) {
total += step;
step += 5;
}
cout << total;
{{ select(3) }}
- 120
- 135
- 150
- 165
第 4 题
"锦绣中华"地砖铺设中,需要在 5 行 5 列的方格地面中标记两条对角线上所有的方格。以下代码统计两条对角线共有多少个方格被标记(中心交叉方格不重复计数),输出结果是( )。
int cnt = 0;
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
if (i == j || i + j == 6) cnt++;
}
}
cout << cnt;
{{ select(4) }}
- 5
- 8
- 9
- 10
第 5 题
"算盘珠算"模拟中,需逐位处理一个整数:偶数值直接累加,奇数值加倍后再累加。执行以下代码,输出结果是( )。
int n = 3456, s = 0;
while (n > 0) {
int d = n % 10;
if (d % 2 == 0) s += d;
else s += d * 2;
n /= 10;
}
cout << s;
{{ select(5) }}
- 22
- 24
- 26
- 28
第 6 题
"丝路驿站"物资配送中,使用前缀和技术快速计算任意区间内驿站间距之和。数组 d[6] = {5, 8, 15, 7, 12, 9} 存储了 6 段相邻驿站间的距离。以下代码先构建前缀和数组 pre(pre[i] 表示前 i 段距离之和),再输出 pre[4] - pre[1](即第 2 段到第 4 段的总距离),结果是( )。
int d[6] = {5, 8, 15, 7, 12, 9};
int pre[7] = {0};
for (int i = 0; i < 6; i++) {
pre[i + 1] = pre[i] + d[i];
}
cout << pre[4] - pre[1];
{{ select(6) }}
- 20
- 30
- 35
- 42
第 7 题
"敦煌遗书"数字化项目中,需要在一段文字中统计相邻两字符为 "ab" 的出现次数。执行以下代码,输出结果是( )。
string text = "ababcabcab";
int cnt = 0;
for (int i = 0; i <= text.length() - 2; i++) {
if (text.substr(i, 2) == "ab") cnt++;
}
cout << cnt;
{{ select(7) }}
- 3
- 4
- 5
- 6
第 8 题
"汉诺塔"传说中,僧侣将 N 层金盘从一根柱子移至另一根。以下递归函数计算所需最少步数:
int f(int n) {
if (n == 1) return 1;
return 2 * f(n - 1) + 1;
}
执行 cout << f(5) - f(4); 的输出是( )。
{{ select(8) }}
- 8
- 15
- 16
- 31
第 9 题
"勾股弦方"是中国古代数学的重要成就。以下代码使用枚举算法统计三边均为正整数且均不超过 20 的勾股数组 (a, b, c) 的个数,其中 a < b < c 且 a² + b² = c²。输出结果是( )。
int cnt = 0;
for (int a = 1; a <= 18; a++)
for (int b = a + 1; b <= 19; b++)
for (int c = b + 1; c <= 20; c++)
if (a * a + b * b == c * c)
cnt++;
cout << cnt;
{{ select(9) }}
- 4
- 5
- 6
- 8
第 10 题
"非遗工坊"管理系统记录了各工坊的存货数据:
struct Item {
string name;
int price;
int qty;
};
Item goods[4] = {
{"丝绸", 20, 5},
{"茶叶", 15, 8},
{"瓷器", 30, 3},
{"香料", 25, 4}
};
以下代码使用冒泡排序按"库存价值(price × qty)"从大到小排序。排序后数组第一个元素(索引 0)的 name 是( )。
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3 - i; j++) {
if (goods[j].price * goods[j].qty < goods[j + 1].price * goods[j + 1].qty) {
Item tmp = goods[j];
goods[j] = goods[j + 1];
goods[j + 1] = tmp;
}
}
}
{{ select(10) }}
- 丝绸
- 茶叶
- 瓷器
- 香料
二、多项选择题(每题 5 分,共 25 分)
注意:多选题输入,请按照顺序填入,不需要用空格隔开,如有ACD三个选项,则填入ACD即可!
第 11 题
以下关于 C++ 变量和运算的说法,正确的有( )。
A. int a = 3.99; 执行后,变量 a 的值为 3
B. char 类型变量占用 1 个字节,只能存储一个字符
C. double 类型属于浮点类型,可以存储带小数的数值
D. 取模运算符 % 的两个操作数必须都是整型
{{ input(11) }}
第 12 题
"丝路驿站"路线图中,二维数组 dist[3][3] 存储了 3 个城市之间的里程。阅读以下代码,说法正确的有( )。
int dist[3][3] = {{0, 15, 8}, {15, 0, 12}, {8, 12, 0}};
int total = 0, mx = dist[0][0];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
total += dist[i][j];
if (dist[i][j] > mx) mx = dist[i][j];
}
}
A. 变量 total 的最终值为 70
B. 变量 mx 的最终值为 15
C. 该数组表示的是无向图的邻接矩阵(对称矩阵)
D. 对角线元素 dist[i][i] 均为 0,表示城市到自身距离为 0
{{ input(12) }}
第 13 题
执行以下代码,关于输出结果的描述,正确的有( )。
for (int i = 10; i <= 50; i += 10) {
if (i % 20 == 0)
cout << "A";
else if (i % 30 == 0)
cout << "B";
else
cout << "C";
}
A. 输出结果中包含字符 'A' B. 输出结果中包含字符 'B' C. 输出结果中包含字符 'C' D. 输出的字符总数为 4 个
{{ input(13) }}
第 14 题
"红色密码"破译中,需要选择合适的算法和数据结构。以下说法正确的有( )。
A. 二分查找算法要求被查找的数据必须事先排好序 B. 栈(stack)的特点是"先进后出"(FILO) C. 队列(queue)通常用于实现广度优先搜索(BFS) D. 前缀和(Prefix Sum)技术可以在 O(1) 时间内求出任意区间的元素之和
{{ input(14) }}
第 15 题
"非遗技艺"模拟程序中定义了如下函数。关于该函数,以下说法正确的有( )。
int mystery(int a, int b) {
if (b == 0) return a;
return mystery(b, a % b);
}
A. 该函数使用了递归
B. 调用 mystery(12, 8) 的返回值是 4
C. 该函数的功能是计算 a 和 b 的最大公约数(GCD)
D. 该算法被称为"辗转相除法",时间复杂度为 O(log min(a, b))
{{ input(15) }}
三、判断题(每题 5 分,共 25 分)
第 16 题
在 C++ 中,if 语句的条件表达式必须用圆括号 () 括起来。( )
{{ select(16) }}
- 正确
- 错误
第 17 题
执行以下代码,循环结束后变量 i 的值为 10。( )
int i = 0;
while (i < 10) {
i++;
}
{{ select(17) }}
- 正确
- 错误
第 18 题
在 C++ 中定义数组 int arr[5]; 后,访问 arr[5] 会导致数组下标越界,属于未定义行为。( )
{{ select(18) }}
- 正确
- 错误
第 19 题
在 C++ 的循环语句中,continue 语句会跳过本次循环体中剩余的代码,直接进入下一次迭代的条件判断;而 break 语句则完全退出当前循环。( )
{{ select(19) }}
- 正确
- 错误
第 20 题
"活字印刷"排版检测中,以下代码的输出结果为 3。( )
string s = "Hello2026World";
int cnt = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] >= '0' && s[i] <= '9') cnt++;
}
cout << cnt;
{{ select(20) }}
- 正确
- 错误
2026年05月21日初中组全国信息素养大赛C++算法应用主题赛第二场初赛模拟
- 状态
- 已结束
- 规则
- OI
- 题目
- 1
- 开始于
- 2026-5-21 20:00
- 结束于
- 2026-5-21 21:00
- 持续时间
- 1 小时
- 主持人
- 参赛人数
- 11