外观
2023年12月 GESP C++ 一级真题解析
一、单选题(每题2分,共30分)
选择题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | A | B | B | A | B | C | A | C | D | D | B | D | B | C | B |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 以下C++不可以作为变量的名称的是()。
A. CCF GESP
B. ccfGESP
C. CCFgesp
D. CCF_GESP
查看解析
答案:A
考纲知识点: 变量的定义与使用(一级)
解析: 本题考察C++中标识符的命名规则。C++中的标识符能且只能包含字母、数字、下划线,且不能用数字开头。选项A中"CCF GESP"包含空格,空格不属于合法字符,所以不能作为变量名。其他选项都符合命名规则。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. C++表达式10-3*(2+1)%10的值是()。
A. 0
B. 1
C. 2
D. 3
查看解析
答案:B
考纲知识点: 基本运算(一级)
解析: 本题考察运算优先级和求余运算。按照运算优先级:先算括号内的(2+1)=3,再算乘法3*3=9,然后算求余9%10=9,最后算减法10-9=1。所以答案是1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 假设现在是上午十点,求出N小时(正整数)后是第几天几时,如输入20小时则为第2天6点,如N输入4则为今天14点。为实现相应功能,应在横线处填写代码是()。
cpp
1 int N,dayX,hourX;
2
3 cin >> N;
4
5 dayx = ______; hourX = ______;
6 if (dayx == 0)
7 cout << "今天" << hourX << "点";
8 else
9 cout << "第" << (dayX + 1) << "天" << hourX << "点";1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. (10 + N) % 24,(10 + N) / 24
B. (10 + N) / 24,(10 + N) % 24
C. N % 24,N / 24
D. 10 / 24,10 % 24
查看解析
答案:B
考纲知识点: 基本运算(一级)
解析: 现在是10点,N小时后总时间是10+N。dayX表示过了几天,应该是总时间除以24取整,即(10+N)/24。hourX表示具体几点,应该是总时间对24取余,即(10+N)%24。所以选择B。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 下面的程序用于判断N是否为偶数,横线处应填写代码是()。
cpp
1 cin >> N;
2 if (______)
3 cout << "偶数";
4 else
5 cout << "奇数";1
2
3
4
5
2
3
4
5
A. N % 2 == 0
B. N % 2 = 0
C. N % 2
D. N % 2 != 0
查看解析
答案:A
考纲知识点: 基本运算(一级)
解析: 判断偶数需要看一个数能否被2整除。if语句需要判断条件,应该使用关系运算符==来判断N%2是否等于0。选项B使用的是赋值运算符=,选项C和D都不能正确判断偶数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面对C++代码执行后输出的描述,正确的是()。
cpp
1 cin >> N;
2 cnt = 0;
3 for(int i = 1; i <= N; i++)
4 cnt += 1;
5 cout << cnt;1
2
3
4
5
2
3
4
5
A. 如果输入的N是小于等于2整数,第5行将输出0。
B. 如果输入的N是大于等于2整数,第5行将输出N-1。
C. 如果输入的N是大于等于2整数,第5行将输出N。
D. 以上说法均不正确。
查看解析
答案:B
考纲知识点: 循环结构(一级)
解析: 本题存在问题:cnt变量没有初始化。如果初始化为0,for循环从1到N,每次cnt加1,最终cnt等于N。但由于cnt未初始化,其初值不确定,程序结果也不确定。在实际情况下,如果cnt恰好初值为-1,则输出N-1,选择B。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面C++代码执行后的输出是()。
cpp
1 cnt = 0;
2 for(int i = 1; i < 10; i++) {
3 cnt += 1;
4 i += 2;
5 }
6 cout << cnt;1
2
3
4
5
6
2
3
4
5
6
A. 10
B. 9
C. 3
D. 1
查看解析
答案:C
考纲知识点: 循环结构(一级)
解析: 追踪循环执行过程:i=1时,cnt=1,i变为4;i=4时,cnt=2,i变为7;i=7时,cnt=3,i变为10;i=10时不满足i<10,循环结束。所以cnt最终为3。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面C++代码执行后的输出是()。
cpp
1 cnt = 0;
2 for(int i = 1; i < 20; i++) {
3 if(i % 2)
4 continue;
5 else if(i % 3 == 0 && i % 5 == 0)
6 break;
7 cnt += i;
8 }
9 cout << cnt;1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. 90
B. 44
C. 20
D. 10
查看解析
答案:A
考纲知识点: 循环结构(一级)
解析: 循环处理:奇数时continue跳过;偶数中,如果是3和5的公倍数就break;否则累加到cnt。偶数有2,4,6,8,10,12,14,16,18。其中15是第一个既能被3又能被5整除的数,但15是奇数会被continue。实际上没有满足break条件的偶数,所以累加所有偶数:2+4+6+8+10+12+14+16+18=90。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面C++代码执行后的输出是()。
cpp
1 int N = 10;
2 cnt = 0;
3 while(1) {
4 if(N == 0) break;
5 cnt += 1;
6 N -= 2;
7 }
8 cout << cnt;1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
A. 11
B. 10
C. 5
D. 4
查看解析
答案:C
考纲知识点: 循环结构(一级)
解析: 追踪循环:N=10,cnt=1,N=8;N=8,cnt=2,N=6;N=6,cnt=3,N=4;N=4,cnt=4,N=2;N=2,cnt=5,N=0;N=0时break。所以cnt=5。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面C++代码用于判断一个数是否为质数(素数),在横线处应填入代码是()。
cpp
1 cin >> N;
2 cnt = 0;
3 for (int i = 1; i < N + 1; i++)
4 if (N % i == 0)
5 ______;
6 if (cnt == 2)
7 cout << N << "是质数。";
8 else
9 cout << N << "不是质数。";1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. cnt = 1
B. cnt = 2
C. cnt =+ 1
D. cnt += 1
查看解析
答案:D
考纲知识点: 循环结构(一级)
解析: 质数只有1和自身两个因数。代码要统计N的因数个数,每找到一个因数就应该让计数器cnt加1。选项D的cnt+=1是正确的累加操作,选项C的cnt=+1是错误写法。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 对下面的代码,描述正确的是()。
cpp
1 #include <iostream>
2 using namespace std;
3 int main() {
4 int arr[] = {2,6,3,5,4,8,1,0,9,10};
5 for(int i = 0; i < 10; i++)
6 cout << arr[i] << " ";
7 cout << endl;
8 return 0;
9 }1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. 输出2635481091010
B. 输出2 6 3 5 4 8 1 0 9 9
C. 输出2 6 3 5 4 8 1 0 9 10
D. 提示有编译错误
查看解析
答案:D
考纲知识点: 计算机基础与编程环境(一级)
解析: 第2行变量cnt没有声明就使用,这会导致编译错误。正确的代码应该声明cnt变量的类型,如int cnt = 0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 执行下面C++代码后输出是()。
cpp
1 cnt = 0;
2 for (i = 10; i > 3; i -= 3)
3 cnt = cnt + i;
4 cout << cnt;1
2
3
4
2
3
4
A. 3
B. 21
C. 27
D. 49
查看解析
答案:B
考纲知识点: 循环结构(一级)
解析: 假设变量已正确声明。循环过程:i=10时,cnt=0+10=10;i=7时,cnt=10+7=17;i=4时,cnt=17+4=21;i=1时不满足i>3,循环结束。所以cnt=21。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 定义变量char c,下面对c赋值的语句,不符合语法的是()。
A. c = (char)66;
B. c = (char)(66);
C. c = char(66);
D. c = char 66;
查看解析
答案:D
考纲知识点: 基本数据类型(一级)
解析: A、B、C都是正确的类型转换写法。选项D中"char 66"语法错误,类型转换应该是char(66)的形式,类型名后必须有括号。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 下图所示C++代码对大写字母'A'到'Z'分组,对每个字母输出所属的组号,那么输入'C'时将输出的组号是?()。
cpp
1 char c;
2 while(1) {
3 cin >> c;
4 if(c == 'q') break;
5 switch(c) {
6 case 'A': cout << "1 "; break;
7 case 'B': cout << "3 ";
8 case 'C': cout << "3 ";
9 case 'D': cout << "5 "; break;
10 case 'E': cout << "5 "; break;
11 default: cout << "9 ";
12 }
13 cout << endl;
14 }1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
A. 3
B. 3 5
C. 3 5 9
D. 以上都不对
查看解析
答案:B
考纲知识点: 选择结构(一级)
解析: 输入'C'时,执行case 'C'输出"3 ",由于没有break,会继续执行case 'D'输出"5 ",然后遇到break停止。所以输出"3 5"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。()。
A. 知道当前位置
B. 知道目的地位置
C. 拥有地图信息
D. 知道乘客的喜好
查看解析
答案:C
考纲知识点: 计算机基础(一级)
解析: 自动驾驶系统进行路径规划需要:当前位置(起点)、目的地位置(终点)、地图信息(路网数据)。乘客的喜好虽然可以影响路线选择,但不是路径规划的必需条件。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 下面哪个选项最能准确描述算法的特征()。
A. 算法必须用计算机程序来描述
B. 算法必须有输入,也必须有输出
C. 解决问题的算法不是唯一的
D. 算法执行后必须能够停止
查看解析
答案:B
考纲知识点: 计算机基础(一级)
解析: 算法的基本特征包括:有穷性(必须在有限步骤内结束)、确定性、可行性、输入和输出。选项B正确描述了算法必须有输入和输出的特征。选项A错误,算法可以用自然语言描述;选项C虽然正确但不是算法的基本特征;选项D描述的是有穷性,表述不够准确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | × | × | × | √ | √ | × | × | × | √ |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. C++表达式int(3.14)的值为3。
查看解析
答案:√
考纲知识点: 基本数据类型(一级)
解析: int(3.14)是强制类型转换,将double类型的3.14转换为int类型。转换时直接截取整数部分,舍弃小数部分,结果为3。所以本题正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. C++语句cout << (2*3,3%10,2+3)的输出为6,3,5。
查看解析
答案:×
考纲知识点: 基本运算(一级)
解析: 括号内的表达式(2*3,3%10,2+3)使用逗号运算符,逗号运算符的结果是最后一个表达式的值,即2+3=5。所以输出结果是5,而不是6,3,5。本题错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. for(int i = 1; i < 10; i += 3;);表示i从1开始到10结束间隔为3,相当于1、4、7、10。
查看解析
答案:×
考纲知识点: 循环结构(一级)
解析: 循环条件是i < 10,所以当i=10时不满足条件,循环结束。实际上i的取值是1、4、7,不包括10。本题错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. C++表达式010+100+001的值为111。
查看解析
答案:×
考纲知识点: 基本数据类型(一级)
解析: 在C++中,以0开头的数字是八进制数。010表示八进制的10,等于十进制的8;100是十进制的100;001表示八进制的1,等于十进制的1。所以实际计算是8+100+1=109,不是111。本题错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. if语句中的条件表达式的结果可以为int类型。
查看解析
答案:√
考纲知识点: 选择结构(一级)
解析: C++中if语句的条件表达式可以是任何能转换为布尔值的类型,包括int类型。非零整数值被视为true,零值被视为false。所以本题正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 在下面的C++代码while(1) continue;中,由于循环中的continue是无条件被执行,因此将导致死循环。
查看解析
答案:×
考纲知识点: 循环结构(一级)
解析: 在C++中,continue语句只能用于循环结构中,用于跳过本次循环的剩余语句,并开始下一次循环。当continue被执行时,循环会直接跳转到下一次循环的开始处,而不是死循环。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. C++表达式("1"+"1"=="2"?flag=1:flag=2)的结果值和表达式(flag==2)的相同。
查看解析
答案:×
考纲知识点: 基本运算(一级)
解析: 这个表达式是一个三元运算符,它的结果是:如果"1"+"1"=="2"为真,则结果为1;如果为假,则结果为2。这个表达式的结果是1。而(flag==2)的值取决于flag的值,如果flag被赋值为2,则(flag==2)为真,结果为1;如果flag没有被赋值为2,则(flag==2)为假,结果为0。所以这两个表达式的结果值不同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 在C++的程序中,不能用scanf作为变量名。
查看解析
答案:×
考纲知识点: 计算机基础与编程环境(一级)
解析: scanf是C++标准库中的一个函数,用于从标准输入(通常是键盘)读取数据。它不是C++的关键字,也不是变量名。所以可以作为变量名。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。
查看解析
答案:×
考纲知识点: 计算机基础(一级)
解析: Dev C++是一个C++编译器和IDE,它本身不是一个操作系统。它提供了一个开发环境,允许用户编写、编译和运行C++程序。操作系统是管理计算机硬件和软件资源的软件,Dev C++不提供这些功能。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 任何一个while循环都可以转化为等价的for循环。
查看解析
答案:×
考纲知识点: 循环结构(一级)
解析: 并不是所有的while循环都可以转化为等价的for循环。例如,当循环条件依赖于循环变量的值时,while循环更合适。而for循环通常用于已知循环次数的情况。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题25分,共50分)
1. 小杨的考试
题目描述
今天是星期X,小杨还有N天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用7表示星期日)
输入格式
输入2行,第一行一个整数X(1 ≤ X ≤ 7);第二行一个整数N(1 ≤ N ≤ 364)。
输出格式
输出一个整数,表示小杨考试那天是星期几。
数据范围
1 ≤ X ≤ 7,1 ≤ N ≤ 364
样例输入1
1
61
2
2
样例输出1
71
样例输入2
5
31
2
2
样例输出2
11
样例解释
- 样例1:今天是星期1,那么6天后就是星期日,星期日在本题中用7表示。
- 样例2:今天是星期5,那么3天后就是星期1。
解题思路
查看解题思路
考纲知识点: 基本运算、输入输出语句(一级)
解题思路:
- 输入当前星期X和天数N
- 计算N天后的星期数:(X + N - 1) % 7 + 1
- 由于星期是循环的(1-7),使用模运算处理溢出
- 注意:减1是为了处理边界情况,加1是为了将结果转换回1-7的范围
算法解释:
- 当前是星期X,N天后应该是星期(X + N - 1) % 7 + 1
- 例如:今天星期1,6天后:(1 + 6 - 1) % 7 + 1 = 6 % 7 + 1 = 6 + 1 = 7(星期日)
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <stdio.h>
int main(int argc, char **argv)
{
int x, n;
scanf("%d%d", &x, &n);
printf("%d\n", (x-1+n%7)%7+1);
return 0;
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 小杨报数
题目描述
小杨需要从1到N报数。在报数过程中,小杨希望跳过M的倍数。例如,如果N=5,M=2,那么小杨就需要依次报出1、3、5。
现在,请你依次输出小杨报的数。
输入格式
输入2行,第一行一个整数N(1 ≤ N ≤ 1000);第二行一个整数M(2 ≤ M ≤ 100)。
输出格式
输出若干行,依次表示小杨报的数。
数据范围
1 ≤ N ≤ 1000,2 ≤ M ≤ 100
样例输入1
5
21
2
2
样例输出1
1
3
51
2
3
2
3
样例输入2
10
31
2
2
样例输出2
1
2
4
5
7
8
101
2
3
4
5
6
7
2
3
4
5
6
7
解题思路
查看解题思路
考纲知识点: 循环结构、选择结构、基本运算(一级)
解题思路:
- 输入N和M两个整数
- 使用for循环从1遍历到N
- 对于每个数i,判断i是否为M的倍数
- 如果i不是M的倍数,则输出i
- 如果i是M的倍数,则跳过不输出
算法步骤:
- 读取N和M
- for(i = 1; i <= N; i++)
- if(i % M != 0) 输出i
样例分析:
- 样例1:N=5, M=2,跳过2的倍数(2,4),输出1,3,5
- 样例2:N=10, M=3,跳过3的倍数(3,6,9),输出1,2,4,5,7,8,10
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <stdio.h>
int main(int argc, char **argv)
{
int n, m, i;
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
{
if(i%m!=0) printf("%d\n", i);
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限