#1633. 信息素养大赛——中学组模拟卷 3
信息素养大赛——中学组模拟卷 3
信息素养大赛——中学组模拟卷 3
一、单选题(共20题,每题2分,共40分)
1.2026 年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备 ( )
{{ select(1) }}
- 检测重心的重力传感器
- 预装的 AI 算法程序
- 接收动作指令的遥控器
- 拍摄其他机器人的摄像头
2.下面代码用来找出输入的 N 个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是 ( )
int N, max=0, val; cin >> N;
while(N){ cin >> val; if(val > max) // L1 N--; max = val;
}
{{ select(2) }}
cout << max;
- 圆形框
- 椭圆形框
- 平行四边形框
- 菱形框
3.下面 C++ 代码可以执行,有关说法正确的是 ( )
double PI = 3.1415926; cout << (PI);
{{ select(3) }}
- 为了方便初学者,cout <<(PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感
- cout << (PI) 修改为 cout << (Pi) 能正常执行
- 不能用 PI 做变量名,因为要保存圆周率这个常量
- 将程序中全部 PI 都改写为 Pai ,将能正常执行,不会报错
4.下面选择项中,与 C++ 表达式!(x> 5 && y <= 10) 等价的是 ( )
{{ select(4) }}
- x <= 5 && y > 10
- x>5 || y<=10
- x <= 5 || y > 10
- ! x > 5 && ! y <= 10
5.某同学执行 C++ 代码 cout <<((0.1 + 0.2) == 0.3) 时输出 0,下面最可能的原因是 ( )
{{ select(5) }}
- C++ 的 + 运算符在处理小数时存在 bug
- 0.1、0.2 和 0.3 在计算机中无法用二进制浮点数精确表示,导致 0.1 + 0.2 的结果与 0.3 存在微小误差
- == 运算符不能用于比较浮点数,只能用于整数
- 因为 0.1 + 0.2 的数学结果不等于 0.3
6.下面的 C++ 代码段执行后其输出是 ( )
tnt = 0; for (int i = 0; i < 5; i++){
for (int j = 0; j < i; j++)
cout << tnt << "#"; tnt += 1;
}
cout << tnt;
{{ select(6) }}
- 0#1#3#6#10#10
- 1#2#3#4#5#6#7#8#9#10#10
- 10#10
- 10
7.下面的 C++ 代码执行之后的输出是 ( )
for ( int i = -2; i < 2; i++) if (not i % 3) cout << i << "#";
{{ select(7) }}
- 0#
- -2#-1#1#
- -1#0#
- -2#0#1#
8.下面 C++ 代码执行后输出是 ( )
int count = 0;
for (int i = 1; i < 4; i++)
for (int j = 1; j < 5; j++){
if (j == 3)
if (i == 2) continue;
break;
count += 1;
}
cout << (count);
{{ select(8) }}
- 2
- 4
- 6
- 8
9.下面 4 个选项中,与下面 C++ 代码段具有相同效果的是 ( )
i = 0; while (i < 5){
i += 1; cout << i;
}
{{ select(9) }}
- for (i = 0; i < 5; i++) cout << i;
- for (i = 1; i < 5; i++) cout << i;
- for (i = 0; i < 6; i++) cout << i;
- for (i = 1; i < 6; i++) cout << i;
10.某学校图书馆的借阅卡号由 6 位整数组成。前 5 位是顺序编号,第 6 位是校验码,用于防止输错。校验码规则如下:将前 5 位数字相加,然后除以 10 的余数,就是第 6 位数字。如卡号 123455 的前 5 位之和为 15,除以 10 的余数是 5,故第 6 位为 5。下面的 C++ 代码段用于判断卡号是否正确,横线处应填入的代码是 ( )
cout << "请输入卡号:"; cin >> N;
order_num = N / 10; // 获得前5位顺序号
check_num = N % 10; // 获得最后一位
tnt = 0; // 保存前5位之和
for (i = 0; i < 5; i++){
________________
order_num /= 10;
}
if (__________________)
cout << "符合校验规则";
else cout << "不符合校验规则";
{{ select(10) }}
- tnt += order_num / 10;tnt / 10 == check_num
- tnt += order_num % 10;tnt % 10 == check_num
- tnt = order_num / 10 + tnt;tnt % 10 == check_num
- tnt = order_num % 10;tnt / 10 == check_num
11.如果字符变量_1 的值是字符 1,那么 (int)_1 的值是?( )
{{ select(11) }}
- 1
- -1
- 49
- +1 或者 -1
12.a,b 是整型变量,各自有互不相同的初始值。下列程序实现了什么效果 ( )
a=a^b;
b=a^b;
a=a^b;
{{ select(12) }}
- a,b 的值从始至终都没有改变
- a,b 的值实现了互换
- a,b 的值互换了以后,又还回去了,相当于没有变化
- a,b 的值最后和原值不一样,没有任何意义
13.关于下列正确的程序段,说法正确的是 ( )
char str1[] = "Hello";
char str2[] ={'H','e','l','l','o'};
{{ select(13) }}
- 字符数组 str1 和 str2 完全相同
- 这段程序多次执行将输出不同的结果
- 字符数组 str1 和 str2 不相等
- 这两个赋值方式完全相同
14.8 位二进制下,十进制数 - 15 的补码是 ( )
{{ select(14) }}
- 11110000
- 10001111
- 10010000
- 11110001
15.二进制数 10110101 是某数的 8 位补码,该数的十进制是 ( )
{{ select(15) }}
- -73
- -75
- -77
- 75
16.已知 unsigned char c = 0x0F; 执行 c = c <<3; 后,c 的十进制值是 ()
{{ select(16) }}
- 64
- 72
- 80
- 120
17.补码的情况下,关于按位取反运算,说法错误的是 ( )
{{ select(17) }}
- ~5 的结果是 -6 (int 类型,32 位)
- ~0 的结果是 0 (int 类型,32 位)
- ~(-3) 的结果是 2 (int 类型,32 位)
- ~8 的结果是 -9 (int 类型,32 位)
18.执行以下 C++ 代码后,sub 的值是 ( )
string str = "GESP2026";
string sub = str.substr(4, 2);
{{ select(18) }}
- 20
- 02
- 2026
- 026
19.以下问题中,最不适合用枚举法解决的是 ( )
{{ select(19) }}
- 找出 1~100 之间所有能被 7 整除的数
- 找出 100~200 之间的所有质数
- 计算 1+2+3+…+1000 的和
- 找出三位数中个位、十位、百位数字之和等于 10 的数
20.模拟 “字符串加密”:规则为 “每个字符 ASCII 码 + 3,若超过 z (122) 则从 a 重新开始”,以下代码中正确的条件判断是 ( )
for (int i = 0; i < str.length(); i++) {
// 需补充条件:
str[i] += 3;
}
{{ select(20) }}
- if (str[i]> 122) str[i] = str[i] + 3 - 26;
- if (str[i] > 122) str[i] = str[i] - 26;
- if (str[i] + 3 > 122) str[i] = str[i] - 26;
- if (str[i] + 3 > 'z') str[i] = 'a' + (str[i] + 3 - 'z') - 1;
二、阅读程序(共3题,判断题2分/题+选择题3分/题,共30分)
第一题:
#include <iostream>
using namespace std;
int main() {
int L, R, ans = 0;
cin >> L >> R;
for (int i = L; i <= R; i++) {
int cnt = 0, t = i;
while (t) {
if (t % 10 == 2)
cnt++;
t /= 10;
}
if (cnt == 3)
ans++;
}
cout << ans;
return 0;
}
1.判断题
(1) 若输入 2221 2223,程序输出为 2。 ( ) {{ select(21) }}
- 对
- 错 (2) 将 while (t) 改为 while (t != 0),程序功能不变。 ( ) {{ select(22) }}
- 对
- 错 (3) 若输入 2000 3000,程序会统计所有包含恰好三个数字2的数。 ( ) {{ select(23) }}
- 对
- 错
2.选择题
(1) 输入 1 100,输出是( ) {{ select(24) }}
- 0
- 1
- 2
- 3
(2) 若将 if (cnt == 3) 改为 if (cnt >= 3),输入 2222 2222,输出为( ) {{ select(25) }}
- 0
- 1
- 2
- 无法确定
第二题:
#include <iostream>
using namespace std;
int main() {
int n, a[50] = {0}, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int t = i, pos = 0;
while (t) {
a[pos++] = t % 2;
t /= 2;
}
bool ok = true;
for (int j = 0; j < pos; j++)
if (a[j] != a[pos - j - 1]) {
ok = false;
break;
}
ans += ok;
}
cout << ans;
return 0;
}
1.判断题
(1) 该程序的功能是统计 1 到 n 之间二进制表示是回文数的个数。 ( ) {{ select(26) }}
- 对
- 错 (2) 输入 15,输出为 7。 ( ) {{ select(27) }}
- 对
- 错 (3) 删除 bool ok = true; 并将 ans += ok; 改为 ans += 1; 后,程序输出不会改变。 ( ) {{ select(28) }}
- 对
- 错
2.选择题
(1) 输入 1,输出为( ) {{ select(29) }}
- 0
- 1
- 2
- 无法确定
(2) 若将内层循环条件改为 j < pos/2,则( ) {{ select(30) }}
- 程序输出结果不变
- 程序输出结果可能变大
- 程序输出结果可能变小
- 程序会编译错误
第三题:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j == 0 || j == n - 1) {
if (i == 0 || i == n - 1)
cout << '+';
else
cout << '|';
} else {
if (i == 0 || i == n - 1)
cout << '-';
else
cout << '*';
}
}
cout << endl;
}
return 0;
}
1.判断题
(1) 输入 5 时,第一行输出为 +---+。 ( ) {{ select(31) }}
- 对
- 错 (2) 输入 3 时,输出图形中间一行为 |*|。 ( ) {{ select(32) }}
- 对
- 错 (3) 若将 j == n - 1 改为 j == n,程序会发生数组越界。 ( ) {{ select(33) }}
- 对
- 错
2.选择题
(1) 输入 4,输出图形中 '*' 的个数是( ) {{ select(34) }}
- 4
- 6
- 8
- 10
(2) 若将 cout << '+' 和 cout << '-' 互换,输入 5 时,第一行输出为( ) {{ select(35) }}
- +---+
- -+-+ -
- | |
三、完善程序(共2题,每题5个空,每空3分,共30分)
(1)幸运数字
题目描述 如果一个正整数在十进制下的所有数位都不包含数字7,则称它为“幸运数字”。 例如:1、2、3、4、5,6、8、9、10、11.....都是幸运的,7、17、70,71等不是。 给定一个正整数n,请你统计不超过n的正整数中,一共有多少个幸运数字。 输入格式 一行,一个正整数n(1≤n≤10000)。 输出格式 一行,一个整数,表示幸运数字的个数。 样例输入1: 10 样例输出1:(1~10中只有7不是幸运数字) 9 样例输入2: 20 样例输出2:(1~20中7和17不是幸运数字,其余18个都是) 18 代码(请将下划线处填写正确的选项)
#include <iostream>
using namespace std;
int main() {
int n, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int t = i;
int lucky = 1; // 假设 i 是幸运数字
while ( ____(1)____ ) {
if ( ____(2)____ ) {
lucky = 0;
break;
}
____(3)____;
}
if ( ____(4)____ )
____(5)____;
}
cout << ans;
return 0;
}
(1) 循环继续的条件是 t 中还有未检查的数字,应填( ) {{ select(36) }}
- t == 0
- t > 0
- t >= 0
- t < 0 (2) 判断当前末位是否为7,应填( ) {{ select(37) }}
- t % 10 == 7
- t % 10 != 7
- t / 10 == 7
- t / 10 != 7 (3) 去掉已经检查过的末位,应填( ) {{ select(38) }}
- t %= 10
- t /= 10
- t = t % 10
- t = t / 10 (4) 如果仍然是幸运数字,则累加计数,应填( ) {{ select(39) }}
- lucky == 1
- lucky == 0
- t == 0
- i == 0 (5) 正确的计数累加语句,应填( ) {{ select(40) }}
- ans += i
- ans += 1
- ans += lucky
- ans = ans + i
###(2)二进制回文数 题目描述 对于一个正整数n,将其转换为不含前导零的二进制表示。如果这个二进制序列从左向右读与从右向左读完全相同,则称该数为二进制回文数。 例如:9的二进制是1001,是回文数;12的二进制是1100,不是回文数。给定一个正整数n,请你统计在1到n的范围内二进制回文数的数量。 输入格式 一行,一个正整数n(1≤n≤105)。 输出格式 一行,一个整数,表示二进制回文数的个数。 样例输入1: 15 样例输出1:(1、3、5、7、9、15 共6个) 6 样例输入2: 20 样例输出2:(1、3、5、7、9、15 、17共7个) 7 代码(请将下划线处填写正确的选项)
#include <iostream>
using namespace std;
int main() {
int n, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int t = i;
int bits[50] = {0};
int pos = 0;
while ( ____(1)____ ) {
bits[pos++] = t % 2;
____(2)____;
}
int ok = 1;
for (int j = 0; j < pos; j++) {
if ( ____(3)____ ) {
ok = 0;
break;
}
}
if ( ____(4)____ )
____(5)____;
}
cout << ans;
return 0;
}
(1) 循环继续的条件是 t 不为0,应填( ) {{ select(41) }}
- t > 0
- t == 0
- t >= 0
- t != 1 (2) 去掉二进制最低位,应填( ) {{ select(42) }}
- t %= 2
- t /= 2
- t = t % 2
- t = t / 2 (3) 判断对称位置上的二进制位是否不同,应填( ) {{ select(43) }}
- bits[j] != bits[pos - j - 1]
- bits[j] == bits[pos - j - 1]
- bits[j] != bits[j + 1]
- bits[j] == bits[j + 1] (4) 如果是二进制回文数,则累加计数,应填( ) {{ select(44) }}
- ok == 1
- ok == 0
- pos > 0
- i % 2 == 1 (5) 正确的计数累加语句,应填( ) {{ select(45) }}
- ans += i
- ans += 1
- ans += ok
- ans = ans + i