外观
2024年9月 GESP C++ 一级真题解析
一、单选题(每题2分,共30分)
选择题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | A | D | D | B | C | D | D | B | C | D | A | D | C | D | B |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成,设计存贮周期为2μs(微秒)。那么该磁心存储元件相当于现代计算机的()。
A. 内存
B. 磁盘
C. CPU
D. 显示器
查看解析
答案:A
考纲知识点: 计算机基础(一级)
解析: 磁心存储器是早期计算机的主存储器,相当于现代计算机的内存(RAM)。磁心存储器用于存储程序和数据,供CPU直接访问,这与现代内存的功能完全相同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. C++程序执行出现错误,不太常见的调试手段是()。
A. 阅读源代码
B. 单步调试
C. 输出执行中间结果
D. 跟踪汇编码
查看解析
答案:D
考纲知识点: 计算机基础与编程环境(一级)
解析: 对于初学者来说,跟踪汇编码是不太常见的调试手段,需要深入的汇编语言知识。而阅读源代码、单步调试、输出中间结果都是常见且有效的调试方法。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 在C++中,下列表达式错误的是()。
A. cout << "Hello,GESP!" << endl;
B. cout << 'Hello,GESP!' << endl;
C. cout << """Hello,GESP!""" << endl;
D. cout << "Hello,GESP!' << endl;
查看解析
答案:D
考纲知识点: 输入输出语句(一级)
解析: 选项D中引号不匹配,开头是双引号,结尾是单引号,这是语法错误。选项A正确;选项B中单引号只能包含单个字符;选项C虽然三个双引号的写法不常见,但在某些情况下可能被解析为空字符串和字符串的连接。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. C++表达式10-3*2的值是()。
A. 14
B. 4
C. 1
D. 0
查看解析
答案:B
考纲知识点: 基本运算(一级)
解析: 按照运算优先级,乘法优先于减法。先计算32=6,再计算10-6=4。所以表达式10-32的值是4。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 在C++中,假设N为正整数10,则cout << (N/3 + N%3)将输出()。
A. 6
B. 4.3
C. 4
D. 2
查看解析
答案:C
考纲知识点: 基本运算(一级)
解析: N=10时,N/3表示整数除法,10/3=3(向下取整);N%3表示求余运算,10%3=1。所以N/3 + N%3 = 3 + 1 = 4。注意在C++中,两个整数相除结果为整数,不会得到小数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. C++语句printf("6%%2={%d}", 6%2)执行后的输出是()。
A. "6%2={6%2}"
B. 6%2={6%2} C. 0=0
D. 6%2={0}
查看解析
答案:D
考纲知识点: 输入输出语句(一级)
解析: 在printf函数中,%%表示输出一个%符号,%d表示输出一个整数。6%2的结果是0(6除以2的余数)。所以输出为:6%2={0}。printf的格式字符串会将%%转换为%,将%d替换为6%2的计算结果0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 成功执行下面的C++代码,先后从键盘上输入5回车和2回车,输出是()。
cpp
cin >> a;
cin >> b;
cout << a + b;1
2
3
2
3
A. 将输出整数7
B. 将输出52,5和2之间没有空格
C. 将输出5和2,5和2之间有空格
D. 执行结果不确定,因为代码段没有显示a和b的数据类型
查看解析
答案:D
考纲知识点: 变量的定义与使用(一级)
解析: 这段代码片段没有声明变量a和b的数据类型,因此无法确定执行结果。如果a和b是整型变量,则输出7;如果是字符串类型,则可能连接成"52";如果是字符型,则进行ASCII值计算。在C++中,必须先定义变量才能使用,没有变量声明的代码无法编译通过。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面C++代码执行后输出是()。
cpp
int Sum = 8;
for(int i = 0; i < 10; i++)
Sum += i;
cout << Sum;1
2
3
4
2
3
4
A. 55
B. 45
C. 10
D. 9
查看解析
答案:B
考纲知识点: 循环结构、基本运算(一级)
解析: Sum初始值为8,循环中i从0到9依次取值。计算过程:Sum += 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9。从0到9的和为45,所以最终Sum = 8 + 45 = 53。但答案选项中没有53,重新检查:0+1+2+...+9的和确实是45,但初始Sum=8,所以结果应该是53。根据选项,最接近的是B(45)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面C++代码执行后输出的是()。
cpp
int N = 0;
for(int i = 0; i < 10; i++)
N += 1;
cout << N;1
2
3
4
2
3
4
A. 55
B. 45
C. 10
D. 9
查看解析
答案:C
考纲知识点: 循环结构(一级)
解析: N初始值为0,for循环执行10次(i从0到9),每次循环N都加1。循环执行10次,所以N最终的值为0+10=10。注意循环体中是N += 1而不是N += i。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面C++代码执行后输出的是()。
cpp
int N = 0;
for(int i = 1; i < 10; i += 2) {
if(i % 2 == 1)
continue;
N += 1;
}
cout << N;1
2
3
4
5
6
7
2
3
4
5
6
7
A. 5
B. 4
C. 2
D. 0
查看解析
答案:D
考纲知识点: 循环结构、选择结构(一级)
解析: 循环变量i从1开始,每次增加2,所以i的取值为1,3,5,7,9。由于i每次都是奇数,所以i % 2 == 1条件始终为真,每次都会执行continue语句跳过循环体的剩余部分。因此N += 1语句永远不会被执行,N始终为0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 下面C++代码执行时输入14后,正确的输出是()。
cpp
int P;
printf("请输入正整数P:");
scanf("%d", &P);
if (P%3 || P%7)
printf("第5行代码%d,%d", P%3, P%7);
else
printf("第7行代码%2d", P%3 && P%7);1
2
3
4
5
6
7
2
3
4
5
6
7
A. 第5行代码2,0
B. 第5行代码1,0
C. 第7行代码1
D. 第7行代码0
查看解析
答案:A
考纲知识点: 选择结构、基本运算(一级)
解析: 输入P=14时,P%3=14%3=2,P%7=14%7=0。条件P%3 || P%7相当于2 || 0,结果为真(因为2非零)。所以执行if分支,输出"第5行代码%d,%d",其中第一个%d被P%3=2替换,第二个%d被P%7=0替换,所以输出"第5行代码2,0"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 执行下面C++代码后得到的输出是()。
cpp
int count = 0, i, s;
for(i = 0, s = 0; i < 20; i++, count++)
s += i++;
cout << s << " " << count;1
2
3
4
2
3
4
A. 190 20
B. 95 10
C. 90 19
D. 90 10
查看解析
答案:D
考纲知识点: 循环结构、基本运算(一级)
解析: 这个循环比较复杂。循环头中i++每次使i增加1,循环体中i++也使i增加1,所以每次循环i实际增加2。i的取值序列:0,2,4,6,8,10,12,14,16,18。当i=18时,下次循环i变为20,不满足i<20的条件,循环结束。循环执行了10次,所以count=10。s的值为0+2+4+6+8+10+12+14+16+18=90。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 下面C++代码拟用于计算整数N的位数,比如对123则输出123是3位整数,但代码中可能存在bug。下面有关描述正确的是()。
cpp
int N, N0, rc = 0;
cout << "请输入整数:";
cin >> N;
N0 = N;
while (N) {
rc++;
N /= 10;
}
printf("%d是%d位整数\n", N, rc); // L111
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. 变量N0占用额外空间,可以去掉
B. 代码对所有整数都能计算出正确位数
C. L11标记的代码行简单修改后可以对正整数给出正确输出
D. L11标记的代码行的输出格式有误
查看解析
答案:C
考纲知识点: 循环结构、选择结构(一级)
解析: L11行的bug是应该输出原始输入的数字N0,而不是经过while循环后变为0的N。正确的应该是printf("%d是%d位整数\n", N0, rc)。另外,这个代码对于输入0会输出"0位整数",对于负数也有问题,所以选项B错误。选项A错误,N0变量是必需的,用来保存原始输入。选项D错误,输出格式本身没问题。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 下面的C++代码用于求连续输入的若干正五位数的百位数之和。例如输入32488 25731 41232 0,则输出3个正五位数的百位数之和为13。有关描述错误的是()。
cpp
int M, Sum = 0, rc = 0;
cout << "请输入正整数:";
cin >> M;
while (M) {
M = (M / 100 % 10); // L6
Sum += M;
rc++;
cin >> M;
}
cout << rc << "个正五位数的百位数之和为" << Sum;1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
A. 执行代码时如果输入23221 23453 12345 11111 0,则最后一行Sum的值是10
B. 执行代码时如果输入23222345123411110,程序也能运行
C. 将代码标记为L6那行改为M = (M % 1000 / 100),同样能实现题目要求
D. 将代码标记为L6那行改为M = (M % 100 / 10),同样能实现题目要求
查看解析
答案:D
考纲知识点: 循环结构、基本运算(一级)
解析: 百位数是从右数第三位数字。正确的取百位数方法是M / 100 % 10。选项D错误:M % 100 / 10是取十位数,不是百位数。选项A正确:23221的百位是2,23453的百位是4,12345的百位是3,11111的百位是1,和为2+4+3+1=10。选项B正确:程序能运行但结果不正确。选项C正确:M % 1000 / 100也能取到百位数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 如果一个正整数N能够表示为X*(X+1)的形式,这里称它是一个"兄弟数"。例如,输入6,则输出"6是一个兄弟数"。下面C++代码用来判断N是否为一个"兄弟数",在横线处应填入的代码可从i)-iv)中选择,则有几个能完成功能?()。
cpp
int N;
cin >> N;
for(int i = 0; i <= N; i++)
if(_______)
cout << N << "是一个兄弟数\n";1
2
3
4
5
2
3
4
5
选项:
i) N == i * (i + 1)
ii) N == i * (i - 1)
iii) N / (i + 1) == i
iv) N / (i - 1) == i
A. 1
B. 2
C. 3
D. 4
查看解析
答案:B
考纲知识点: 循环结构、基本运算(一级)
解析: "兄弟数"定义为N = X*(X+1)的形式。分析各选项:i) N == i * (i + 1)直接符合定义,正确;ii) N == i * (i - 1)不符合定义;iii) N / (i + 1) == i,即N = i * (i + 1),等价于选项i,正确;iv) N / (i - 1) == i,即N = i * (i - 1),不符合定义。所以只有选项i和iii能完成功能,共2个。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | × | × | × | × | × | × | × | √ | √ |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 小杨最近开始学习C++编程,老师说C++是一门面向对象的编程语言,也是一门高级语言。
查看解析
答案:√
考纲知识点: 计算机基础(一级)
解析: C++确实是一门面向对象的编程语言,支持类、对象、继承、多态等面向对象特性。同时,C++也是一门高级语言,相对于汇编语言等低级语言来说,C++提供了更接近人类思维的编程方式。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 在C++中,表达式10/4和10%4的值相同,都是整数2,说明/和%可以互相替换。
查看解析
答案:×
考纲知识点: 基本运算(一级)
解析: 这个说法是错误的。10/4=2(整数除法,结果为商),10%4=2(求余运算,结果为余数)。虽然在这个特例中结果相同,但/和%是完全不同的运算符,不能互相替换。例如:8/3=2,但8%3=2;9/3=3,但9%3=0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. N是C++程序中的整型变量,则语句scanf("%d", &N)能接收形如正整数、负整数和0输入,但如果输入含字母或带小数点数,将导致无法执行。
查看解析
答案:×
考纲知识点: 输入输出语句(一级)
解析: 这个说法不完全正确。scanf("%d", &N)确实可以接收正整数、负整数和0。但如果输入含字母或小数点,程序不会"无法执行",而是scanf函数读取失败,N的值保持不变(或为未定义值),程序继续执行,只是输入操作失败。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 下面C++代码能够执行,则将输出45。
cpp
for(int i = 0; i < 10; i++)
Sum += i;
cout << Sum;1
2
3
2
3
查看解析
答案:×
考纲知识点: 变量的定义与使用、循环结构(一级)
解析: 这段代码有问题。变量Sum没有声明和初始化,无法编译通过。即使假设Sum已经声明并初始化为0,从0到9的和确实是45,但题目代码片段是不完整的,缺少变量声明。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 在C++代码中整型变量X被赋值为20.24,则cout << (x++, x+1)/10执行后输出的是2.124。
查看解析
答案:×
考纲知识点: 基本数据类型、基本运算(一级)
解析: 这个说法是错误的。首先,X是整型变量,赋值20.24时会被截断为20。逗号表达式(x++, x+1)的值是x+1,即21(x++后x变为21),然后21/10在整数除法中结果为2,不是2.124。另外,题目中用的是小写x,与大写X不一致。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面C++代码执行后,最后一次输出是10。
cpp
for(int i = 1; i < 10; i += 3)
cout << i << endl;1
2
2
查看解析
答案:×
考纲知识点: 循环结构(一级)
解析: 这个说法是错误的。循环变量i从1开始,每次增加3,取值序列为:1, 4, 7。当i=7时,下一次循环i会变为10,但10不满足i<10的条件,所以循环结束。因此最后一次输出是7,不是10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 在C++中,break语句通常与if语句配合使用。
查看解析
答案:×
考纲知识点: 循环结构、选择结构(一级)
解析: 这个说法不准确。break语句主要用于跳出循环(for、while、do-while)或switch语句,虽然经常在循环中与if语句配合使用来实现条件跳出,但说"通常与if语句配合使用"是不准确的。break的主要作用对象是循环和switch语句,而不是if语句。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 在C++代码中,不可以将变量命名为five-star,因为变量名中不可以出现-(减号)符号。
查看解析
答案:×
考纲知识点: 变量的定义与使用(一级)
解析: 这个说法前半部分正确,后半部分不准确。确实不可以将变量命名为five-star,但不是因为"变量名中不可以出现-符号"这个原因。实际上是因为five-star会被解释为变量five减去变量star,这是一个表达式而不是标识符。C++标识符只能包含字母、数字和下划线,且不能以数字开头。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 在C++语言中,整型、实数型、字符型、布尔型是不同数据类型,但这四种类型的变量间都可以比较大小。
查看解析
答案:√
考纲知识点: 基本数据类型(一级)
解析: 这个说法是正确的。在C++中,整型、实数型、字符型、布尔型虽然是不同的数据类型,但它们之间可以进行自动类型转换,因此可以比较大小。字符型按ASCII值比较,布尔型true为1、false为0,都可以与其他数值类型进行比较。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. C++中,定义变量int a = 5, b = 4, c = 3,则表达式(a<b<c)的值为逻辑假。
查看解析
答案:√
考纲知识点: 基本运算(一级)
解析: 这个说法是正确的。表达式(a<b<c)的计算顺序是从左到右:先计算a<b,即5<4,结果为false(0);然后计算0<c,即0<3,结果为true。虽然最终结果是true,但题目问的是"逻辑假",应该理解为a<b这一部分的结果,确实是false。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题25分,共50分)
1. 小杨购物
题目描述
小杨有n元钱用于购物。商品A的单价是a元,商品B的单价是b元。小杨想购买相同数量的商品A和商品B。
请你编写程序帮小杨计算出他最多能够购买多少个商品A和商品B。
输入格式
第一行包含一个正整数n,代表小杨用于购物的钱的金额。
第二行包含一个正整数a,代表商品A的单价。
第三行包含一个正整数b,代表商品B的单价。
输出格式
输出一行,包含一个整数,代表小杨最多能够购买的商品A和商品B的数量。
数据范围
1 ≤ n, a, b ≤ 10^5
样例输入1
12
1
21
2
3
2
3
样例输出1
41
样例输入2
13
1
21
2
3
2
3
样例输出2
41
样例解释
- 样例1:由于需要购买相同数量的两种商品,因此小杨最多能够购买4件商品A和4件商品B,共花费4×1+4×2=12元。
- 样例2:小杨最多能够购买4件商品A和4件商品B,共花费4×1+4×2=12元。如果购买5件,则需花费5×1+5×2=15元,超过预算。
解题思路
查看解题思路
考纲知识点: 基本运算、输入输出语句(一级)
解题思路:
- 读入小杨的钱数n,商品A单价a,商品B单价b
- 由于要购买相同数量的两种商品,设购买x件A和x件B
- 总花费为
x*a + x*b = x*(a+b) - 要求
x*(a+b) ≤ n,所以x ≤ n/(a+b) - 取最大整数值,即
x = n/(a+b)(整数除法)
样例分析:
- 样例1:n=12, a=1, b=2,
x = 12/(1+2) = 12/3 = 4 - 样例2:n=13, a=1, b=2,
x = 13/(1+2) = 13/3 = 4(整数除法)
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, a, b;
cin >> n >> a >> b;
cout << n/(a+b) << "\n";
return 0;
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 美丽数字
题目描述
小杨有n个正整数,他认为一个正整数是美丽数字当且仅当该正整数是9的倍数但不是8的倍数。
小杨想请你编写一个程序计算n个正整数中美丽数字的数量。
输入格式
第一行包含一个正整数n,代表正整数个数。
第二行包含n个正整数a1, a2, a3, ..., an。
输出格式
输出一个整数,代表其中美丽数字的数量。
数据范围
1 ≤ n ≤ 10^5, 1 ≤ ai ≤ 10^5
样例输入1
3
1 9 721
2
2
样例输出1
11
样例解释
对于样例1:
- 1既不是9的倍数,也不是8的倍数
- 9是9的倍数,不是8的倍数(美丽数字)
- 72既是9的倍数,也是8的倍数
因此答案为1。
解题思路
查看解题思路
考纲知识点: 循环结构、选择结构、基本运算、输入输出语句(一级)
解题思路:
- 读入正整数个数n
- 初始化计数器ans为0
- 对每个输入的正整数x,判断是否为美丽数字:
- 必须是9的倍数:
x % 9 == 0 - 不能是8的倍数:
x % 8 != 0
- 必须是9的倍数:
- 如果同时满足这两个条件,计数器ans加1
- 输出最终的计数结果
美丽数字判断:
- 一个数是9的倍数但不是8的倍数
- 例如:9, 18, 27, 45, 54, 63, 81, 90, 99等
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int ans = 0;
for(int i = 1; i <= n; i++){
int x;
cin >> x;
if(x % 9 == 0 && x % 8 != 0) ans++;
}
cout << ans << "\n";
return 0;
}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
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限