2026年3月CCF—GESP(C++一级)编程能力等级认证试卷
一级
2026
2026-09-28 20:02:36
156次
一、单选题
下面C++代码的相关说法,正确的是( )。
int i;
for (i = 1; i < 10; i++){
if (i % 2 == 0){
continue; // L1
}
else
cout << i << "#";
}
cout << i << "END";| A. 上述代码执行后,其输出是 1#3#5#7#9#9END |
B. 删除 else 后的执行效果与当前代码相同 |
| C. 删除 else 且将 cout << i << "#" 移入L1行下面,则执行效果与当前代码相同 |
D. 在 cout << i << "END" 前增加判断 if(i > 10) ,其执行效果与当前代码相同 |
【知识点】 CCF—GESP C++一级
小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 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";
| A. 代码段不能完成正确判断 |
B. L1行代码中条件应该改为 M <= N |
| C. L2行代码应该改为 if ((Q*10+Q/3) % 14 == 0) |
D. 代码段可以不使用变量 Q ,而是在区分 M 和 N 大小后分别直接用它们来判断 |
【知识点】 CCF—GESP C++一级
执行下面C++代码可以判断一个6位正整数 N 的高3位和低3位的差是否是314的倍数。例如 628314 就符合要求。横线处应该填入( )。
cin >> N; if (___________________________) cout << N << "符合条件" << endl;
| A. ((N % 1000) - (N / 1000)) / 314 == 0 |
B. ((N / 1000) - (N % 1000)) % 314 == 0 |
| C. ((N % 1000) - (N / 1000)) / 314 |
D. ((N / 1000) - (N % 1000)) % 314 |
【知识点】 CCF—GESP C++一级
一个正整数的每位都是个位数,称为数位,最高位非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 |
【知识点】 CCF—GESP C++一级
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; |
【知识点】 CCF—GESP C++一级
小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的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 << " 个奇数";| A. N % 10 % 2 == 0 |
B. N % 10 % 2 == 1 |
| C. N / 10 / 2 == 1 |
D. N / 2 / 10 == 0 |
【知识点】 CCF—GESP C++一级
执行下面C++代码段求序列 -1+2+3-4+5+6-7+8+9-10+11+12...... 之值。例如输入 4 ,则计算序列前4 项的值,规律如序列所示,输出为 0 。下面说法中正确的是( )。
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;
| A. L1行中 i < N + 1 应该修为 i < N 才会符合预期 |
B. L2行中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期 |
| C. L2行中 i % 3 == 1 修改为 i % 3 与当前程序效果相同 |
D. 当前代码能实现题目所描述计算目标 |
【知识点】 CCF—GESP C++一级
二、判断题
下面的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 << "非对称数";| A.正确 | B.错误 |
【知识点】 CCF—GESP C++一级
三、编程题
交朋友
时间限制:1.0 s
内存限制:512.0 MB
题目描述
Alice 班上共有 4 个小朋友,身高分别为H1,H2,H3,H4,其中 Alice 的身高为H1。
Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉 她这个人的身高是多少吗?
输 4 行,第 i 行包含一个整数 ,表示班上小朋友的身高。
输出格式
输出 1 行,包含一个整数 ,表示 Alice 想交的朋友的身高。
输入样例
150 165 135 133
输出样例
135
样例解释
样例 1 中,Alice 身高为 150,第 2、3 个小朋友与 Alice 身高差距为 15,同样最接近,Alice 选较矮的一个即第 3 个 身高为 135 的小朋友交朋友。
数据范围

【知识点】 CCF—GESP C++一级
数字替换
时间限制:1.0 s
内存限制:512.0 MB
题目描述
Alice 不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?
输入格式
输入一行,包含一个整数A ,表示替换前的数。
输出格式
输出一行,包含一个整数B ,表示替换后的数。
输入样例 #1
8459045
输出样例 #1
8859085
输入样例 #2
123
输出样例 #2
123
样例解释
对于样例1,输入 8459045 中有两个 4,都将其替换为了 8,得到 8859085。
对于样例2,输入 123 中不包含 4,无需修改输入数字,输出 123。
数据范围
【知识点】 CCF—GESP C++一级
