#1632. 信息素养大赛——中学组模拟卷 2
信息素养大赛——中学组模拟卷 2
信息素养大赛——中学组模拟卷 2
一、单选题(共20题,每题2分,共40分)
1 近日,空中客车公司表示,约 6000 架空客 A320 系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表示,在对一起飞行事故分析后的结果显示,强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进而引发飞行异常。那这里的飞行控制系统执行判断的部件最可能是下面的 ( )
{{ select(1) }}
- 辐射传感器
- 处理器
- 内存单元
- 输出设备
2 小明最近为了备考 GESP,开始看 B 站上关于网络知识的视频。其中提到计算机网络系统有不同的划分标准,那他平时上学所在的教学楼内的网络是一个 ( )
{{ select(2) }}
- PAN
- LAN
- MAN
- WAN
3 下面有关 C++ 变量的说法,正确的是 ( )
{{ select(3) }}
- 不可以用 for 作为变量名,因为 for 是 C++ 的关键字 (保留字)
- _tnt 不可以是变量名,因为变量名的第一个字符必须是英文字母
- _tnt_不可以是变量名,因为最后一个字符容易与减号混淆
- 可以用 printf 作为变量名,因为 printf 是关键字,但这不是好习惯
4 一个小数是 0.123123123…… 无限循环,求第 N 位的值。横线处应填入的代码是 ( )
int N; cin >> N;
remainder = ________;
if (remainder == 0) cout << 1;
else if (remainder == 1) cout << 2;
else cout << 3;
{{ select(4) }}
- N % 3
- (N - 1) % 3
- N / 3
- (N - 1) / 3
5 某同学执行 C++ 代码printf("%g\n", (3 + 3.1415926535));输出 6.14159,其原因最可能是 ( )
{{ select(5) }}
- 整数转浮点数产生舍入误差
- printf 输出浮点数有默认小数点位数
- 3.1415926535 是无限循环小数
- CPU 运算错误
6 某单位工号编码总长 5 位数字,前 4 位依次整除以 3 的商累加和除以 10 的余数为第 5 位。代码中两个横线处分别应填的是 ( )
int rst = 0, N;
for (int i = 0; i < 4; i++){
cin >> N;
rst += ________; // L1
}
cout << ___________; // L2
{{ select(6) }}
- N%3,rst/10
- N%3,rst%10
- N/3,rst/10
- N/3,rst%10
7 下面 C++ 代码执行后的输出是 ( )
for (int i = -2; i < 2; i++)
if (i % 2) printf("%d#",i);
{{ select(7) }}
- -1#1#
- -1#0#1#
- -2#-1#1#
- -2#-1#1#2#
8 与下面 C++ 输出效果不一致的代码是 ( )
int i;
for (i = 0; i < 10; i++)
cout << i;
A.
int i = 0; while (i < 10){cout << i;i += 1;}
B.
int i = 0; while (i < 10){i += 1;cout << i;}
C.
int i = 0; while(true){cout << i;i += 1;if(i>=10)break;}
D.
int i = 0; while(true){if(i>=10)break;cout << i;i += 1;}
{{ select(8) }}
- A
- B
- C
- D
9 下面 C++ 代码执行后输出是 ( )
int num = 0;
while (num <= 5){
num += 1;
if (num % 3) continue;
printf("%d#",num);
}
if(num > 5) printf("%d", num);
{{ select(9) }}
- 3#6#
- 3#6#6
- 1#2#3#4#5#6#
- 1#2#3#4#5#6#6
10 下面 C++ 代码执行后,其输出是 ( )
int cnt = 0;
for (int i = 0; i <5; i++)
for (int j =i; j < 4; j++)
cnt += 1;
cout << cnt;
{{ select(10) }}
- 9
- 10
- 14
- 20
11 以下关于标准 C++ 一维数组的描述,哪一项是错误的?( )
{{ select(11) }}
- 数组的下标从 0 开始
- 数组在内存中是连续存放的
- 数组的长度只能在运行时才能确定
- 可以修改数组某个元素的值
12 执行以下程序段,输出值是 ( )
int x = 5;
if (x == 3 >> 2) x = 8 >> 3;
cout << x << endl;
{{ select(12) }}
- 0
- 5
- 120
- 1
13 已知字符串s = "C++ Programming",运行结果是 ( )
cout << (int)(s.length() | 3) << endl;
{{ select(13) }}
- 14
- 15
- 16
- 17
14 以下关于 C++ 求最小值函数 min () 的描述,不正确的是 ( )
{{ select(14) }}
- 函数必须返回一个值
- 可以嵌套调用
- 调用 min ##### (5) 编译错误
- 调用 min () 可编译,结果为 0
15 unsigned int 占 2 字节,可表示的数据范围是 ( )
{{ select(15) }}
- 0~65535
- 0~65536
- -65536~65535
- 0~32767
16 以下代码执行后,数组 arr 的内容是 ( )
int arr[6] = {1,2,3,4,5,6};
for (int i = 0; i < 6; i += 2) {
arr[i] = arr[i] + arr[i+1];
arr[i+1] = arr[i] - arr[i+1];
arr[i] = arr[i] - arr[i+1];
}
{{ select(16) }}
- {2,1,4,3,6,5}
- {1,2,3,4,5,6}
- {3,1,4,2,5,3}
- {1,3,2,5,4,6}
17 整型变量 x 初始值为 10,输出结果是 ( )
int t = x--;
t -= x;
cout << t << endl;
{{ select(17) }}
- 0
- -1
- 1
- 死循环
18 根据流程图,输入 score=60,输出结果是 ( )
{{ select(18) }} 开始→输入 score→score≥90?→否→score>60?→是输出优秀,否输出及格,否则不及格
- 优秀
- 及格
- 不及格
- 无输出
19 以下关于 C++ 中 abs () 函数的描述,正确的是 ()
{{ select(19) }}
- 计算 int 绝对值,头文件或
- abs (3.14) 四舍五入得 3
- abs (-1,-2) 返回 1
- 负数浮点数自动截断取整
20 字符串 s="GESP",代码执行后 s 结果是 ( )
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i] + i);
}
{{ select(20) }}
- GESP
- HFTR
- hesp
- GFUS
二、阅读程序(共3题,判断题2分/题+选择题2分/题,共30分)
第一题:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
for (int i = 0; i < s.length(); i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 'a' + 'A';
}
}
cout << s;
return 0;
}
程序功能:将输入字符串中的小写字母转换为大写字母,其他字符保持不变。
1.判断题
(1) 输入 Hello123 时,输出为 HELLO123。 ()
{{ select(21) }}
- 对
- 错
(2) 输入 GESP 时,输出为 gesp。 ()
{{ select(22) }}
- 对
- 错
(3) 若输入字符串包含大写字母,程序会将其转换为小写字母。 ()
{{ select(23) }}
- 对
- 错
2.选择题
(1) 输入 abc DEF(注意中间有空格),输出结果是()
{{ select(24) }}
- ABC DEF
- ABC
- DEF
- abc DEF
(2) 若将条件 s[i] >= 'a' && s[i] <= 'z' 改为 s[i] >= 'A' && s[i] <= 'Z',并将转换语句改为 s[i] = s[i] - 'A' + 'a',则程序功能变为()
{{ select(25) }}
- 将小写字母转大写
- 将大写字母转小写
- 将大小写互换
- 删除所有字母
第二题:
#include <iostream>
using namespace std;
int main() {
int arr[6] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < 3; i++) {
int t = arr[i];
arr[i] = arr[5 - i];
arr[5 - i] = t;
}
for (int i = 0; i < 6; i++)
cout << arr[i] << " ";
return 0;
}
程序功能:将数组元素前后对称交换。
1.判断题
(1) 程序输出为 6 5 4 3 2 1。 ()
{{ select(26) }}
- 对
- 错
(2) 如果将循环条件 i < 3 改为 i < 6,数组会变回原样。 ()
{{ select(27) }}
- 对
- 错
(3) 删除 int t = arr[i]; 并将交换语句改为 arr[i] = arr[5-i]; arr[5-i] = arr[i]; 可以实现相同效果。 ()
{{ select(28) }}
- 对
- 错
2.选择题
(4) 若数组初始化为 {2,4,6,8,10,12},输出结果是()
{{ select(29) }}
- 2 4 6 8 10 12
- 12 10 8 6 4 2
- 12 10 6 8 4 2
- 2 4 6 8 10 12
(5) 若将循环改为 for (int i = 0; i <= 5; i++),则()
{{ select(30) }}
- 程序正常运行,输出与原结果相同
- 程序正常运行,输出为原数组
- 程序可能越界访问
- 编译错误
第三题:
#include <iostream>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
int total = n;
for (int i = 1; i <= n; i++) {
if (i % x == 0)
total++;
}
cout << total;
return 0;
}
程序功能:计算行走n公里,每x公里奖励1点能量,总能量为n加上奖励次数。
1.判断题
(1) 输入 5 2 输出 7。 ()
{{ select(31) }}
- 对
- 错
(2) 输入 10 3 输出 13。 ()
{{ select(32) }}
- 对
- 错
(3) 若 x > n,则输出 n。 ()
{{ select(33) }}
- 对
- 错
2.选择题
(4) 输入 100 1 输出()
{{ select(34) }}
- 100
- 101
- 199
- 200
(5) 若将循环条件改为 i <= n 不变,但 total++ 改为 total += i % x == 0 ? 1 : 0,则()
{{ select(35) }}
- 结果不变
- 结果变为原来的两倍
- 编译错误
- 死循环
三、完善程序(共2题,每题5个空,每空3分,共30分)
(1)回文数计数
题目描述 如果一个正整数从左向右读和从右向左读是一样的,则称它为回文数。例如:1、2、3、...、9、11、22、101、121等都是回文数。给定一个正整数n,请你统计不超过n的正整数中,一共有多少个回文数。 输入格式 一行,一个正整数n (1≤n≤10000)。 输出格式 一行,一个整数,表示回文数的个数。 样例输入1: 10 样例输出1: 9 样例输入2: 100 样例输出3: 18 代码(请将下划线处填写正确的选项)
#include <iostream>
using namespace std;
int main() {
int n, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int t = i, rev = 0;
while ( ____(1)____ ) {
rev = rev * 10 + ____(2)____;
____(3)____;
}
if ( ____(4)____ )
____(5)____;
}
cout << ans;
return 0;
}
(1) 循环继续的条件是 t 中还有未处理的数字,应填
{{ select(36) }}
- t == 0
- t >= 0
- t != 0
- t < 0
(2) 取当前末位数字,应填
{{ select(37) }}
- t % 10
- t / 10
- t % 100
- t / 100
(3) 去掉已经处理过的末位,应填
{{ select(38) }}
- t %= 10
- t /= 10
- t = t % 10
- t = t / 10
(4) 判断反转后的数是否等于原数,应填
{{ select(39) }}
- rev == i
- rev == t
- rev == 0
- i == 0
(5) 如果满足条件则累加计数,应填
{{ select(40) }}
- ans += i
- ans += 1
- ans = ans + i
- ans = rev
(2)文具采购
题目描述 小明的班级要采购M种文具,商店里有N件文具,每件文具有种类编号(从1到M)和价格。小明决定每种文具只买最便宜的那一件(如果最便宜的价格有多个,他只买其中一件)。请你计算购买所有M种文具的总花费。数据保证每个种类至少有一件文具。 输入格式 第一行两个正整数M和N。 接下来N行,每行两个整数K和P,分别表示该件文具的种类编号和价格。 输出格式 一行,一个整数,表示总花费。 样例输入: 2 5 1 1 1 2 1 1 2 3 2 10 样例输出: 4 代码(请将下划线处填写正确的选项)
#include <iostream>
using namespace std;
int min_price[100005]; // 假设 M ≤ 100000
int main() {
int M, N;
cin >> M >> N;
for (int i = 1; i <= M; i++) {
min_price[i] = ____(1)____; // 初始化为一个很大的数
}
for (int i = 0; i < N; i++) {
int K, P;
cin >> K >> P;
if ( ____(2)____ ) {
min_price[K] = P;
} else {
if ( ____(3)____ ) {
min_price[K] = P;
}
}
}
int total = 0;
for (int k = 1; k <= M; k++) {
total += ____(4)____;
}
cout << ____(5)____;
return 0;
}
(1) 初始化最小价格数组为极大值,应填
{{ select(41) }}
- 0
- 100000000
- -1
- 1000
(2) 判断是否第一次遇到该种类(即尚未记录任何价格),应填
{{ select(42) }}
- min_price[K] == 0
- min_price[K] == -1
- min_price[K] == 100000000
- min_price[K] > P
(3) 判断当前价格是否比已记录的最小价格更小,应填
{{ select(43) }}
- P > min_price[K]
- P < min_price[K]
- P == min_price[K]
- P != min_price[K]
(4) 累加每种文具的最小价格,应填
{{ select(44) }}
- min_price[k]
- k
- P
- total
(5) 输出总花费,应填
{{ select(45) }}
- total
- M
- N
- min_price[0]