CCF-GESP 等级考试 2023年9月认证C++一级真题解析

发布于:2024-05-23 ⋅ 阅读:(45) ⋅ 点赞:(0)

2023年09月真题

一、单选题(每题2分,共30分)

第 1 题 我们通常说的“内存”属于计算机中的( )。

  • A. 输出设备
  • B. 输入设备
  • C. 存储设备
  • D. 打印设备

正确答案:C. 存储设备

解析:

  • A. 输出设备:内存不是输出设备。
  • B. 输入设备:内存不是输入设备。
  • C. 存储设备:内存是计算机中的存储设备,用于存储数据和程序。
  • D. 打印设备:内存不是打印设备。

第 2 题 以下C++不可以作为变量的名称的是( )。

  • A. redStar
  • B. RedStar
  • C. red_star
  • D. red star

正确答案:D. red star

解析:

  • A. redStar:合法的变量名称。
  • B. RedStar:合法的变量名称。
  • C. red_star:合法的变量名称。
  • D. red star:不合法,变量名不能包含空格。

第 3 题 C++表达式 2 - 1 && 2 % 10 的值是( )。

  • A. 0
  • B. 1
  • C. 2
  • D. 3

正确答案:B. 1

解析:

  • 表达式 2 - 1 的值是 1,1 在布尔上下文中为真。
  • 表达式 2 % 10 的值是 2,2 在布尔上下文中为真。
  • 在逻辑与操作符 && 之间,任何非零值都被视为真,因此 1 && 2 的结果是 1。

第 4 题 下⾯C++代码段执⾏后的输出是( )。

int a = 3, b = 4;
cout << "a+b =" << a+b;
  • A. 3+4= 7
  • B. 3+4=7
  • C. a+b=7
  • D. a+b=a+b

正确答案:C. a+b=7

解析:

  • A. 3+4= 7:不正确,输出中的变量名会显示为 a 和 b。
  • B. 3+4=7:不正确,输出中的变量名会显示为 a 和 b。
  • C. a+b=7:正确,输出结果是 “a+b=7”,其中 a 和 b 的值被计算并显示为 7。
  • D. a+b=a+b:不正确,输出中的变量名会被计算为数值。

第 5 题 在C++语⾔中,int 类型的变量x、y、z的值分别为2、4、6,以下表达式的值为真的是( )。

  • A. x > y || x > z
  • B. x != z - y
  • C. z > y + x
  • D. x < y || !x < z

正确答案:D. x < y || !x < z

解析:

  • A. x > y || x > z:不正确,x (2) 既不大于 y (4),也不大于 z (6),因此表达式为假。
  • B. x != z - y:不正确,z - y 等于 2,x 等于 2,因此表达式为假。
  • C. z > y + x:不正确,z (6) 等于 y (4) 加 x (2),因此表达式为假。
  • D. x < y || !x < z:正确,x 小于 y,因此表达式的左侧为真,整个表达式为真。

第 6 题 对int类型的变量a、b、c,下列语句不符合C++语法是( )。

  • A. c += 5;
  • B. b = c % 2.5;
  • C. a = (b = 3, c = 4, b + c);
  • D. a -= a = (b = 6) / (c = 2);

正确答案:B. b = c % 2.5;

解析:

  • A. c += 5;:正确,复合赋值操作符。
  • B. b = c % 2.5;:不正确,取模操作符 % 只能用于整数。
  • C. a = (b = 3, c = 4, b + c);:正确,逗号操作符。
  • D. a -= a = (b = 6) / (c = 2);:正确,合法的嵌套赋值。

第 7 题 下⾯C++代码执⾏后的输出是( )。

int m = 14;
int n = 12;
if(m % 2 == 0 && n % 2 == 0)
    cout << "都是偶数";
else if(m % 2 == 1 && n % 2 == 1)
    cout << "都是奇数";
else 
    cout << "不都是偶数或奇数";
  • A. 都是偶数
  • B. 都是奇数
  • C. 不都是偶数或奇数
  • D. 以上说法都不正确

正确答案:A. 都是偶数

解析:

  • A. 都是偶数:正确,14 和 12 都是偶数。
  • B. 都是奇数:不正确,14 和 12 都不是奇数。
  • C. 不都是偶数或奇数:不正确,两个数都是偶数。
  • D. 以上说法都不正确:不正确,A 选项是正确的。

第 8 题 下⾯C++代码执⾏后的输出是( )。

int m = 14;
int n = 12;
if(m % 2 && n % 2)
    cout << "都是偶数";
else if(m % 2 == 1 && n % 2 == 1)
    cout << "都是奇数";
else 
    cout << "不都是偶数或奇数";
  • A. 都是偶数
  • B. 都是奇数
  • C. 不都是偶数或奇数
  • D. 以上说法都不正确

正确答案:C. 不都是偶数或奇数

解析:

  • A. 都是偶数:不正确,条件判断错误。
  • B. 都是奇数:不正确,条件判断错误。
  • C. 不都是偶数或奇数:正确,14 和 12 都是偶数,但条件判断错误。
  • D. 以上说法都不正确:不正确,C 选项是正确的。

第 9 题 下⾯C++代码执⾏后的输出是( )。

int m = 7;
if(m / 5 || m / 3)
    cout << 0;
else if(m / 3)
    cout << 1;
else if(m / 5)
    cout << 2;
else
    cout << 3;
  • A. 0
  • B. 1
  • C. 2
  • D. 3

正确答案:A. 0

解析:

  • A. 0:正确,7 / 5 和 7 / 3 都为真,输出 0。
  • B. 1:不正确,不会执行到此分支。
  • C. 2:不正确,不会执行到此分支。
  • D. 3:不正确,不会执行到此分支。

第 10 题 下⾯C++代码段执⾏后的输出是( )。

int cnt = 0;
for(int i = 1; i <= 5; i++)
    cnt = cnt + 1;
cout << cnt;
  • A. 1
  • B. 4
  • C. 5
  • D. 10

正确答案:C. 5

解析:

  • A. 1:不正确,循环体执行了 5 次。
  • B. 4:不正确,循环体执行了 5 次。
  • C. 5:正确,循环体执行了 5 次,cnt 的值为 5。
  • D. 10:不正确,循环体执行了 5 次。

第 11 题 下⾯C++代码执⾏后的输出是( )。

int tnt = 0;
for(int i = 1; i < 5; i += 2)
    tnt = tnt + i;
cout << tnt;
- A. 2
- B. 4
- C. 9
- D. 10

正确答案:B. 4

解析:

  • A. 2:不正确,1 + 3 = 4。
  • B. 4:正确,1 + 3 = 4。
  • C. 9:不正确,1 + 3 = 4。
  • D. 10:不正确,1 + 3 = 4。

第 12 题 下⾯C++代码执⾏后的输出是( )。

int n = 5;
int cnt = 1;
while(n >= 0){
    cnt += 1;
    n -= 2;
}
cout << cnt;
  • A. 3
  • B. 4
  • C. 6
  • D. 7

正确答案:B. 4

解析:

  • 初始值 cnt = 1,n = 5。
  • 第一次循环:cnt = 2,n = 3。
  • 第二次循环:cnt = 3,n = 1。
  • 第三次循环:cnt = 4,n = -1。
  • A. 3:不正确,cnt 的值为 4。
  • B. 4:正确,cnt 的值为 4。
  • C. 6:不正确,cnt 的值为 4。
  • D. 7:不正确,cnt 的值为 4。

第 13 题 下⾯C++代码⽤于求正整数的所有因数,即输出所有能整除⼀个正整数的数。如,输⼊10,则输出为1、2、5、10;输⼊12,则输出为1、2、3、4、6、12;输⼊17,则输出为1、17。在横线处应填⼊代码是( )。

int n = 0;
cout << "请输入一个正整数:";
cin >> n;
for(_____________)//此处填写代码
    if(n % i == 0)
        cout << i << endl;
  • A. int i = 1; i < n; i + 1
  • B. int i = 1; i < n + 1; i + 1
  • C. int i = 1; i < n; i++
  • D. int i = 1; i < n + 1; i++

正确答案:D. int i = 1; i < n + 1; i++

解析:

  • A. int i = 1; i < n; i + 1:不正确,i 的值不会增加。
  • B. int i = 1; i < n + 1; i + 1:不正确,i 的值不会增加。
  • C. int i = 1; i < n; i++:不正确,只遍历到 n-1。
  • D. int i = 1; i < n + 1; i++:正确,遍历从 1 到 n。

第 14 题 在下列代码的横线处填写( ),可以使得输出是正整数1234 各位数字的平⽅和。

int n = 1234, s = 0;
for(; n; n /= 10)
    s += _________;//此处填写代码
cout << s << endl;
  • A. n / 10
  • B. (n / 10) * (n / 10)
  • C. n % 10
  • D. (n % 10) * (n % 10)

正确答案:D. (n % 10) * (n % 10)

解析:

  • A. n / 10:不正确,不是各位数字。
  • B. (n / 10) * (n / 10):不正确,不是各位数字的平方。
  • C. n % 10:不正确,不是平方。
  • D. (n % 10) * (n % 10):正确,各位数字的平方。

第 15 题 执⾏以下C++语⾔程序后,输出结果是( )。

int n = 5, s = 1;
for(; n = 0; n--)
    s *= n;
cout << s << endl;
  • A. 1
  • B. 0
  • C. 120
  • D. ⽆法确定

正确答案:A. 1

解析:

  • A. 1:正确,由于 for 循环的条件是 n = 0,这个赋值语句的值为 0,因此循环体不会执行,变量 s 的初始值保持为 1。
  • B. 0:不正确,循环体没有执行,s 不会变为 0。
  • C. 120:不正确,循环体没有执行,s 不会变为 120。
  • D. ⽆法确定:不正确,程序的输出结果是确定的。

二、判断题(每题2分,共20分)

第 1 题 早期计算机内存不够大,可以将字库固化在一个包含只读存储器的扩展卡中插入计算机主板帮助处理汉字。

正确答案:√

解析:

  • 早期计算机内存有限,字库固化在只读存储器的扩展卡中,插入计算机主板以辅助处理汉字,这种方法在汉字处理的硬件设备中较为常见。

第 2 题 神威·太湖之光超级计算机是中国自主研制的超级计算机,在全球超级计算机TOP500排行榜中多次荣膺榜首。

正确答案:√

解析:

  • 神威·太湖之光是中国自主研制的超级计算机,曾多次在全球超级计算机TOP500排行榜中位居榜首,展现了中国在超级计算机领域的技术实力。

第 3 题 C++表达式int(3.14)的值为3。

正确答案:√

解析:

  • int(3.14) 是一个类型转换表达式,将浮点数3.14转换为整数类型,结果为3。

第 4 题 C++语句cout << (2, 3, “23”)的输出为2, 3, 23。

正确答案:×

解析:

  • cout << (2, 3, "23") 实际上输出的是 “23”。在逗号表达式中,返回值是最后一个表达式的值,因此 2, 3, "23" 返回 “23”。

第 5 题 C++的循环语句for (int i = 0; i < 10; i += 2)表示i从0开始到10结束但不包含10,间隔为2。

正确答案:√

解析:

  • 语句 for (int i = 0; i < 10; i += 2) 表示 i 从0开始,逐次加2,直到 i 小于10,因此 i 的值依次为0, 2, 4, 6, 8。

第 6 题 C++表达式(‘1’ + ‘1’)的值为’2’。

正确答案:×

解析:

  • 在C++中,字符 ‘1’ 的ASCII值为49,‘1’ + ‘1’ 的结果为98,对应的字符为 ‘b’。

第 7 题 在C++语言中,do-while循环不可能导致死循环,但while有可能。

正确答案:×

解析:

  • do-while 循环和 while 循环都有可能导致死循环,具体取决于循环条件和循环体内的逻辑。

第 8 题 在下面的C++代码中,由于循环中的continue是无条件被执行,因此将导致死循环。

for(int i = 1; i < 10; i++) continue;

正确答案:×

解析:

  • continue 语句只是跳过当前循环的剩余部分,开始下一次循环,不会导致死循环。死循环的原因通常是循环条件永远为真。

第 9 题 在C++代码中,不可以将变量命名为cout,因为cout是C++的关键字。

正确答案:×

解析:

  • cout 不是关键字,而是C++标准库中的对象名。虽然不建议将变量命名为 cout 以免混淆,但语法上是允许的。

第 10 题 C++是一种高级程序设计语言。

正确答案:√

解析:

  • C++ 是一种高级程序设计语言,具有面向对象、泛型编程和低级内存操作功能。

三、编程题(每题25分,共50分)

1. 买⽂具

题目描述

开学了,⼩明来到⽂具店选购⽂具。签字笔2元⼀⽀,他需要X⽀;记事本5元⼀本,他需要Y本;直尺3元⼀把,他需要Z把。⼩明⼿⾥有Q元钱。请你通过编程帮⼩明算算,他⼿⾥的钱是否够买他需要的⽂具。

输入格式

输⼊4⾏。
第⼀⾏包含⼀个X正整数,是⼩明购买签字笔的数量。
第⼆⾏包含⼀个Y正整数,是⼩明购买记事本的数量。
第三⾏包含⼀个Z正整数,是⼩明购买直尺的数量。
第四⾏包含⼀个Q正整数,是⼩明⼿⾥的钱数(单位:元)。

输出格式

输出2⾏。如果⼩明⼿⾥的钱够买他需要的⽂具,则第⼀⾏输出"Yes",第⼆⾏输出⼩明会剩下的钱数(单位:元);否则,第⼀⾏输出"No",第⼆⾏输出⼩明缺少的钱数(单位:元)。

样例

输入

1
1
1
20

输出

Yes
10

输入

1
1
1
5

输出

No
5

参考程序:

#include <iostream> // 引入标准输入输出库
using namespace std;

int main() {
    int x = 0, y = 0, z = 0, q = 0; // 定义购买数量和手里钱数的变量并初始化
    cin >> x >> y >> z >> q; // 输入购买的签字笔、记事本、直尺数量和手里的钱数
    int t = x * 2 + y * 5 + z * 3; // 计算总费用
    if (q >= t) { // 判断钱是否足够
        cout << "Yes" << endl; // 输出"Yes"
        cout << q - t << endl; // 输出剩余的钱数
    } else {
        cout << "No" << endl; // 输出"No"
        cout << t - q << endl; // 输出缺少的钱数
    }
    return 0; // 程序结束
}

解释:
这个程序首先读取小明需要购买的签字笔、记事本和直尺的数量,以及他手里的钱数。然后,计算购买这些文具所需的总费用。如果小明的钱够,则输出"Yes"并输出剩余的钱数;否则,输出"No"并输出缺少的钱数。

2. ⼩明的幸运数

题目描述

所有个位数为k的正整数,以及所有k的倍数,都被⼩明称为“幸运数”。⼩明想知道正整数L和R之间(包括L和R)所有k幸运数的和,你能帮帮他吗?

输入格式

输⼊3⾏。第⼀⾏包含⼀个正整数k,第⼆⾏包含⼀个正整数L,第三⾏包含⼀个正整数R。约定2 ≤ k ≤ 9,1 ≤ L ≤ R ≤ 1000。

输出格式

输出1⾏,符合题意的幸运数之和。

样例

输入

7
1
10

输出

7

输入

7
10
20

输出

31

参考程序:

#include <iostream> // 引入标准输入输出库
using namespace std;

int main() {
    int k = 0, L = 0, R = 0, sum = 0; // 定义变量k、L、R和sum,并初始化
    cin >> k >> L >> R; // 输入k、L和R的值
    for (int n = L; n <= R; n++) // 遍历L到R之间的所有整数
        if (n % 10 == k || n % k == 0) // 判断n是否是幸运数
            sum += n; // 如果是幸运数,将其累加到sum中
    cout << sum << endl; // 输出幸运数之和
    return 0; // 程序结束
}

解释:
这个程序首先读取幸运数的个位数k,区间的起始值L和结束值R。然后,遍历L到R之间的所有整数,判断每个整数是否是幸运数(个位数为k或是k的倍数)。如果是幸运数,将其累加到sum中,最后输出sum的值。