#1605. GESP-C++一级(2026-03)
GESP-C++一级(2026-03)
CCF GESP C++ 一级 (2023 年 03 月)
一、单选题(每题 2 分,共 30 分)
1. 2026年春节联欢晚会上⼀个武术表演节⽬《武 BOT》。节⽬中多个⼈形机器⼈会表演空翻,它们落地可能会 有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器⼈保持原来队列。如果将机器⼈视作 ⼀个计算机系统,那么在该计算机系统中下⾯哪⼀项不能作为输⼊设备( )。
{{ select(1) }}
- 检测重⼼的重⼒传感器
- 预装的AI算法程序
- 接收动作指令的遥控器
- 拍摄其他机器⼈的摄像头
2. ⼩明学习编程有⼀段时间了,他想在图形环境下把当前⽬录(或⽂件夹)下的⽂本⽂件 20260314.txt 的 名字改⼀下。他⽤⿏标左键点击选中该⽂件后,⽴即完成下⾯哪个操作后将处于输⼊新⽂件名的状态( ):
{{ select(2) }}
- 单击右键并选择弹出菜单中的“重命名”
- 双击左键
- 按功能键 F1
- 按回车键
3. 下⾯C++代码可以执⾏,有关说法正确的是( )
double PI = 3.1415926;
cout << (PI);
{{ select(3) }}
- 为了⽅便初学者, cout << (PI) 和 cout << (pi) 效果相同,即变量的⼤⼩写不敏感
- cout << (PI) 修改为 cout << (Pi) 能正常执⾏
- 不能⽤ PI 做变量名,因为要保存圆周率这个常量
- 将程序中全部 PI 都改写为 Pai ,将能正常执⾏,不会报错
4. C++表达式 3 * 3 % 2 的值为( )
{{ select(4) }}
- 81
- 27
- 4
- 1
5. 整型变量 a 、 b 的初值都是 4,则下⾯的C++代码执⾏后的输出是( )
a, b = 3, 4;
cout << (a + 2) << (b - 2) << “ ”;
cout << a << b << endl;
{{ select(5) }}
- 61 43
- 52 34
- 62 44
- 62 32
6. 下⾯C++代码的相关说法,正确的是( )
int N = 0;
cin >> N;
cout << (N);
{{ select(6) }}
- 执⾏时如输⼊ 10 ,则将输出 10
- 执⾏时如输⼊ 3.14 ,将报错
- 执⾏时如输⼊ ABC ,将报错
- 执⾏时如输⼊ -10 ,将报错
7. 下⾯C++代码执⾏时,其说法正确的是( )
int M = 0, N = 0;
cin >> M;
cin >> N;
if (N > M)
cout << (N - M);
else
cout << (M - N);
{{ select(7) }}
- 如果输⼊⼀个正数和⼀个负数,其输出结果肯定是⼤于0
- 不管是负整数、正整数亦或0,其结果肯定是⼤于等于0
- 如果 N 和 M 是相等的整数,将不会有输出
- 如果 N 和 M 输⼊带有⼩数点的数,将按整数部分计算
8. 下⾯C++代码执⾏后的输出是( )
int i, tnt = 1;
for (i = 0; i < 5; i++)
tnt *= i;
printf("%2d%2d\n", tnt, i);
{{ select(8) }}
- 24 5
- 10 5
- 0 4
- 0 5
9. 执⾏下⾯C++代码段求序列 -1+2+3-4+5+6-7+8+9-10+11+12...... 之值。例如输⼊ 4 ,则计算序列前4 项的值,规律如序列所⽰,输出为 0 。下⾯说法中正确的是( )。 4
int N, tnt, i;
cout << "请输入正整数:";
cin >> N;
tnt = 0;
for (i = 1; i < N + 1; i++) // L1
if (i % 3 == 1) // L2
tnt += -i;
else
tnt += i;
cout << tnt;
{{ select(9) }}
- L1⾏中 i < N + 1 应该修为 i < N 才会符合预期
- L2⾏中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期
- L2⾏中 i % 3 == 1 修改为 i % 3 与当前程序效果相同
- 当前代码能实现题⽬所描述计算⽬标
10. 下⾯C++代码的相关说法,正确的是( )
int i;
for (i = 1; i < 10; i++){
if (i % 2 == 0){
continue; // L1
}
else
cout << i << "#";
}
cout << i << "END";
{{ select(10) }}
- 上述代码执⾏后,其输出是 1#3#5#7#9#9END
- 删除 else 后的执⾏效果与当前代码相同
- 删除 else 且将 cout << i << "#" 移⼊L1⾏下⾯,则执⾏效果与当前代码相同
- 在 cout << i << "END" 前增加判断 if(i > 10) ,其执⾏效果与当前代码相同
11. ⼀个正整数的每位都是个位数,称为数位,最⾼位⾮0。下⾯的C++代码⽤于求正整数的所有数位之和,简 称数位和。如 123 的各数位分别是1、2、3,则其数位和为 1+2+3 ,结果为6。为实现该⽬标,横线处应该填写的 代码是( )。
int N;
cin >> N;
int tnt = 0;
while (N != 0){
____________;
____________;
}
cout << "N的数位和为:" << tnt;
A.
tnt += N / 10
N /= 10
B.
tnt += N % 10
N /= 10
C.
tnt += N / 10
N %= 10
D.
tnt = tnt + N % 10
N %= 10
{{ select(11) }}
- A
- B
- C
- D
12. ⼩明想要快速知道任给⼀个正整数中有多少个奇数位(数位值是奇数),下⾯的C++代码是其实现,横线处应 该填⼊的代码是( )。
int N;
cin >> N;
int odd_count = 0; // 记录奇数的个数
int old_number = N; // 保存原数
while (N != 0){
if (_________________)
odd_count += 1;
N = (N - N % 10) / 10;
}
cout << old_number << "中共有 " << odd_count << " 个奇数";
}
{{ select(12) }}
- N % 10 % 2 == 0
- N % 10 % 2 == 1
- N / 10 / 2 == 1
- N / 2 / 10 == 0
13. ⼩明和弟弟在玩⼀个拼数字游戏,游戏规则是:⼆⼈各写⼀个两位正整数 M 和 N ;然后将较⼤的数字放 在较⼩的前⾯,拼成⼀个4位数;将这个4位数除以3的余数添加到4位数的后⾯,得到⼀个5位数;最后判断这个5位 数能否被14整除。下⾯的C++代码⽤于判断 M 和 N 是否符合全部要求,如果符合则输出 Y 否则输出 N 。例如输 ⼊ 85 和 79 ,可以拼出 85792 ,恰好是14的倍数,则输出 Y 。关于下⾯代码描述正确的是( )。
int M, N, Q;
cin >> M >> N;
if(M > N) // L1
Q = M*100+N;
else
Q = N*100+M;
if((Q*10+Q%3) % 14 == 0) // L2
cout << "Y";
else
cout << "N";
{{ select(13) }}
- 代码段不能完成正确判断
- L1⾏代码中条件应该改为 M <= N
- L2⾏代码应该改为 if ((Q*10+Q/3) % 14 == 0)
- 代码段可以不使⽤变量 Q ,⽽是在区分 M 和 N ⼤⼩后分别直接⽤它们来判断
14. 执⾏下⾯C++代码可以判断⼀个6位正整数 N 的⾼3位和低3位的差是否是314的倍数。例如 628314 就符 合要求。横线处应该填⼊( )。
cin >> N;
if (___________________________)
cout << N << "符合条件" << endl;
{{ select(14) }}
- ((N % 1000) - (N / 1000)) / 314 == 0
- ((N / 1000) - (N % 1000)) % 314 == 0
- ((N % 1000) - (N / 1000)) / 314
- ((N / 1000) - (N % 1000)) % 314
15. N 是⼀个正整数。如果 N 的所有奇数位的数位和等于所有偶数位的数位和,则称它是⼀个“双螺旋数” 例如 12375 的所有奇数位的数位和是9,同时它的所有偶数位的数位和也是9,则 12375 就是⼀个双螺旋数。下⾯ 的C++代码⽤于判断输⼊的 N 是否为双螺旋数。空⽩处应该填⼊的代码是( )。
int i, N, N1=0, N2=0, N0;
cin >> N;
N0 = N;
while (N){
_________________________
_________________________
}
if(N1 == N2)
cout << N0 << "是双螺旋数" << endl;
A.
N1 += N%10, N /= 10;
N2 += N%10, N /= 10;
B.
N1 += N/10, N /= 10;
N2 += N/10, N /= 10;
C.
N1 += N%10, N %= 10;
N2 += N%10, N %= 10;
D.
N1 += N/10, N %= 10;
N2 += N/10, N %= 10;
{{ select(15) }}
- A
- B
- C
- D
二、判断题(每题 2 分,共 20 分)
1. ⼩明的妈妈最近刚刚给他买了⼀块电话⼿表,除了可以看时间,⼩明也可以⽤它和妈妈打电话、收发信息, 那么可以推测这块⼿表中装有⼀款特定操作系统。
{{ select(16) }}
- 对
- 错
2. C++表达式 4 % 2 和 2 * 2 % 2 的结果相同
{{ select(17) }}
- 对
- 错
3. 下⾯C++代码段成功执⾏后将输出 0
for (i = 1; i < 10; i++)
if (i % 3 == 0)
break;
cout << i;
{{ select(18) }}
- 对
- 错
4. 下⾯能够正常执⾏的C++代码段⽤于求1到N之和,N为正整数。因为 i < N + 1 ,所以是1到N且包含N之 和。
tnt = 0;
cout << "请输入正整数:";
cin >> N;
total = 0;
for (i =1; i < N + 1; i++) ;
total += i;
cout << total;
{{ select(19) }}
- 对
- 错
5. 执⾏下⾯的C++代码段,其语句 cout << (N) 将被执⾏0次或⽆数次(即死循环)
cin >> N;
while (N)
cout << (N);
{{ select(20) }}
- 对
- 错
6. 下⾯的C++代码段的变量都是整型,它能⽤于判断输⼊的正整数是否为对称数。所谓对称数是指从左到右和 从右到左读该数,其值相同。例如, 121 和 414 都是对称数,⽽ 123 不是对称数。( )
cout << "请输入正整数:";
cin >> n;
old_number = n;
new_number = 0;
while (n != 0){
new_number = new_number * 10 + n % 10;
n /= 10;
}
if (old_number == new_number)
cout << "对称数";
else
cout << "非对称数";
{{ select(21) }}
- 对
- 错
7. 执⾏下⾯的C++代码段,如果变量都为整型变量,输⼊为⼤于0的整数,则输出数值⼀定为 -N 的值
cin >> N;
total = 0;
for (i = -N; i < N; i +=2)
total += i;
cout << total;
{{ select(22) }}
- 对
- 错
8. 执⾏C++语句 printf("%d\n", 3.14) 将报错
{{ select(23) }}
- 对
- 错
9. 执⾏下⾯的C++代码后将输出 2500
int cnt = 0;
for (int i = 1; i < 100; i++)
cnt += i++;
cout << cnt;
{{ select(24) }}
- 对
- 错
10. ⼩明在测试C++的 printf 的功能时执⾏了 printf("%-5d\n", 314) ,则代码输出的结果是 -5314
{{ select(25) }}
- 对
- 错