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

2024年03月真题

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

第 1 题 以下不属于计算机输入设备的有( )。

  • A. 键盘
  • B. 音箱
  • C. 鼠标
  • D. 传感器

正确答案:B. 音箱

解析:

  • A. 键盘:键盘是输入设备。
  • B. 音箱:音箱是输出设备,不是输入设备。
  • C. 鼠标:鼠标是输入设备。
  • D. 传感器:传感器是输入设备。

第 2 题 计算机系统中存储的基本单位用B来表示,它代表的是( )。

  • A. Byte
  • B. Block
  • C. Bulk
  • D. Bit

正确答案:A. Byte

解析:

  • A. Byte:Byte(字节)是计算机存储的基本单位。
  • B. Block:块,不是计算机存储的基本单位。
  • C. Bulk:大宗,不是计算机存储的基本单位。
  • D. Bit:比特,是更小的存储单位,不是B表示的单位。

第 3 题 常量7.0的数据类型是( )。

  • A. double
  • B. float
  • C. void
  • D. int

正确答案:A. double

解析:

  • A. double:7.0 是一个双精度浮点数(double)。
  • B. float:7.0 是double类型,而不是float类型。
  • C. void:void表示无类型,7.0不是void类型。
  • D. int:7.0 不是整数类型。

第 4 题 下列关于C++语言的叙述,不正确的是( )。

  • A. 变量定义时可以不初始化
  • B. 变量被赋值之后的类型不变
  • C. 变量没有定义也能够使用
  • D. 变量名必须是合法的标识符

正确答案:C. 变量没有定义也能够使用

解析:

  • A. 变量定义时可以不初始化:这在C++中是正确的。
  • B. 变量被赋值之后的类型不变:这在C++中是正确的。
  • C. 变量没有定义也能够使用:这是错误的,变量必须先定义才能使用。
  • D. 变量名必须是合法的标识符:这在C++中是正确的。

第 5 题 以下不可以作为C++标识符的是( )。

  • A. x321
  • B. 0x321
  • C. x321_
  • D. _x321

正确答案:B. 0x321

解析:

  • A. x321:合法的标识符。
  • B. 0x321:标识符不能以数字开头,因此非法。
  • C. x321_:合法的标识符。
  • D. _x321:合法的标识符。

第 6 题 以下哪个不是C++语言的关键字?

  • A. int
  • B. for
  • C. do
  • D. cout

正确答案:D. cout

解析:

  • A. int:C++关键字,用于声明整数类型。
  • B. for:C++关键字,用于循环控制。
  • C. do:C++关键字,用于do-while循环。
  • D. cout:C++标准库对象,不是关键字。

第 7 题 如果a、b和c都是int类型的变量,下列哪个语句不符合C++语法?

  • A. c = a + b;
  • B. c += a + b;
  • C. c = a = b;
  • D. c = a ++ b;

正确答案:D. c = a ++ b;

解析:

  • A. c = a + b;:符合语法,表示c等于a和b的和。
  • B. c += a + b;:符合语法,表示将a和b的和加到c上。
  • C. c = a = b;:符合语法,表示将b赋值给a,然后将a赋值给c。
  • D. c = a ++ b;:不符合语法,++是后置递增运算符,不能与二元运算符直接组合使用。

第 8 题 如果用两个int类型的变量a和b分别表达长方形的长和宽,则下列哪个表达式不能用来计算长方形的周长?

  • A. a + b * 2
  • B. 2 * a + 2 * b
  • C. a + b + a + b
  • D. b + a * 2 + b

正确答案:A. a + b * 2

解析:

  • A. a + b * 2:计算的是长加上宽的两倍,不是周长。
  • B. 2 * a + 2 * b:计算的是周长。
  • C. a + b + a + b:计算的是周长。
  • D. b + a * 2 + b:计算的是周长。

第 9 题 表达式((3 == 0) + 'A' + 1 + 3.0)的结果类型为( )。

  • A. double
  • B. int
  • C. char
  • D. bool

正确答案:A. double

解析:

  • A. double:表达式的结果包含一个浮点数3.0,最终结果为double类型。
  • B. int:最终结果为double,而不是int。
  • C. char:最终结果为double,而不是char。
  • D. bool:最终结果为double,而不是bool。

第 10 题 如果a为int类型的变量,且a的值为6,则执行a *= 3;之后,a的值会是( )。

  • A. 3
  • B. 6
  • C. 9
  • D. 18

正确答案:D. 18

解析:

  • A. 3:错误,a的值不会变为3。
  • B. 6:错误,a的值不会保持不变。
  • C. 9:错误,a的值不会是9。
  • D. 18:正确,a *= 3等价于a = a * 3,因此a的值是18。

第 11 题 如果a和b均为int类型的变量,下列表达式不能正确判断"a等于0且b等于0"的是( )。

  • A. (a == 0) && (b == 0)
  • B. (a == b == 0)
  • C. (!a) && (!b)
  • D. (a == 0) + (b == 0) == 2

正确答案:B. (a == b == 0)

解析:

  • A. (a == 0) && (b == 0):正确判断。
  • B. (a == b == 0):错误的逻辑表达式,不能正确判断。
  • C. (!a) && (!b):正确判断。
  • D. (a == 0) + (b == 0) == 2:正确判断。

第 12 题 如果a为int类型的变量,下列哪个表达式可以正确求出满足"大于等于a 且是4的倍数"的整数中最小的?

  • A. a * 4
  • B. a / 4 * 4
  • C. (a + 3) / 4 * 4
  • D. a - a % 4 + 4

正确答案:C. (a + 3) / 4 * 4

解析:

  • A. a * 4:不正确,计算的是a的四倍。
  • B. a / 4 * 4:不正确,计算的是a四舍五入到最近的4的倍数。
  • C. (a + 3) / 4 * 4:正确,计算大于等于a且是4的倍数的最小值。
  • D. a - a % 4 + 4:不正确,计算的是下一个4的倍数,不一定大于等于a。

第 13 题 在下列代码的横线处填写( ),可以使得输出是"20 10"。

cpp 复制代码
#include <iostream>
using namespace std;
int main(){
int a = 10, b = 20;
a = ______________;//在此处填入代码
b = a / 100;
a = a % 100;
cout << a << " " << b << endl;
return 0;
  • A. a + b
  • B. (a + b) * 100
  • C. b * 100 + a
  • D. a * 100 + b

正确答案:D. a * 100 + b

解析:

  • A. a + b:不正确,a + b 的值是 30,不符合题意。
  • B. (a + b) * 100:不正确,(a + b) * 100 的值是 3000,不符合题意。
  • C. b * 100 + a:不正确,b * 100 + a 的值是 2010,不符合题意。
  • D. a * 100 + b :正确,a * 100 + b 的值是 1020,当 b = a / 100 时,b 的值是 10,当 a = a % 100 时,a 的值是 20,符合题意。

第 14 题 在下列代码的横线处填写( ),可以使得输出是"1248"。

cpp 复制代码
#include <iostream>
using namespace std;
int main(){
for(int i = 1; i <= 8;______)//在此处填入代码
cout << i;
return 0;
}
  • A. i++
  • B. i *= 2
  • C. i += 2
  • D. i * 2

正确答案:B. i *= 2

解析:

  • A. i++:不正确,i++的值是1到8,不符合题意。
  • *B. i = 2:正确,i *= 2的值是1, 2, 4, 8,符合题意。
  • C. i += 2:不正确,i += 2的值是1, 3, 5, 7,不符合题意。
  • D. i * 2:不正确,i * 2不是一个合法的表达式。

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

cpp 复制代码
#include <iostream>
using namespace std;
int main(){
int sum = 0;
for(int i = 1; i <= 20; i ++)
if(i % 3 == 0 || i % 5 == 0)
sum += i;
cout << sum << endl;
return 0;
}
  • A. 210
  • B. 113
  • C. 98
  • D. 15

正确答案:C. 98

解析:

  • A. 210:不正确,210是1到20之间能被3或5整除的数(3, 5, 6, 9, 10, 12, 15, 18, 20)的和,但题目中只加和20以内的数。
  • B. 113:不正确。
  • C. 98:正确,程序对能被3或5整除的数(3, 5, 6, 9, 10, 12, 15, 18)的和进行累加,结果为98。
  • D. 15:不正确,15不是正确的和。

2 判断题

第 1 题 在Windows 系统中通过键盘完成对选定文本移动的按键组合是先Ctrl+X,移动到目标位置后按Ctrl+V。( √ )

解析:

  • 这个描述是正确的。在Windows系统中,Ctrl+X用于剪切选定的文本,然后Ctrl+V用于在目标位置粘贴该文本。

第 2 题 程序员用C、C++、Python、Scratch等编写的程序能在 CPU 上直接执行。( × )

解析:

  • 程序员编写的代码需要经过编译或解释才能在CPU上执行。C和C++程序需要编译,Python和Scratch程序需要解释。

第 3 题 在C++语言中,注释不宜写得过多,否则会使得程序运行速度变慢。( × )

解析:

  • 注释在编译过程中会被忽略,不影响程序的运行速度。注释的作用是帮助程序员理解代码。

第 4 题 在C++语言中,标识符中可以有数字,但不能以数字开头。( √ )

解析:

  • 在C++中,标识符可以包含字母、数字和下划线,但不能以数字开头。

第 5 题 '3'是一个int类型常量。( × )

解析:

  • '3'是一个字符常量,其类型是char,而不是int。

第 6 题 if 语句中的条件表达式的结果必须为bool类型。( × )

解析:

  • 在C++中,if语句中的条件表达式结果不一定必须是bool类型。C++会将条件表达式的结果隐式转换为bool类型,任何非零值都被视为true,零值被视为false。

第 7 题 for 语句的循环体至少会执行一次。( × )

解析:

  • 这是错误的。for语句的循环体可能一次也不执行,这取决于初始条件是否满足。

第 8 题 如果a为int类型的变量,则赋值语句a = a + 3;是错误的,因为这条语句会导致a无意义。( × )

解析:

  • 这是错误的。赋值语句a = a + 3是合法的,表示将a的当前值增加3。

第 9 题 如果a为int类型的变量,则表达式(a / 4 == 2)和表达式(a >= 8 && a <= 11)的结果总是相同的。( √ )

解析:

  • a / 4 == 2:表示 a 除以 4 的结果等于 2,这只有当 a 为 8、9、10 或 11 时才为真。
  • a >= 8 && a <= 11:表示 a 的值在 8 到 11 之间,包括 8 和 11。
  • 因此,这两个表达式的结果总是相同的。

第 10 题 表达式(3.5 * 2)的计算结果为7.0,且结果类型为double。( √ )

解析:

  • 这个描述是正确的。3.5和2都是浮点数,相乘结果为7.0,结果类型为double。

3 编程题

3.1 编程题1

题目名称:每月天数
题面描述

小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗?

输入格式

输入一行,包含两个整数,分别表示一个日期的年、月。

输出格式

输出一行,包含一个整数,表示输入月份有多少天。

样例

输入

2022 1

输出

31

输入

2020 2

输出

29

参考程序:

cpp 复制代码
#include <iostream> // 引入标准输入输出库
using namespace std;

int main() {
    int y = 0, m = 0; // 定义年和月的变量并初始化
    cin >> y >> m; // 读取输入的年和月
    bool leap = false; // 定义一个布尔变量用于判断是否为闰年
    if (y % 400 == 0) // 判断是否为闰年,能被400整除的是闰年
        leap = true;
    if (y % 4 == 0 && y % 100 != 0) // 判断是否为闰年,能被4整除但不能被100整除的是闰年
        leap = true;
    if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) // 判断是否为大月
        cout << 31 << endl; // 输出大月的天数
    else if (m == 4 || m == 6 || m == 9 || m == 11) // 判断是否为小月
        cout << 30 << endl; // 输出小月的天数
    else if (leap) // 判断是否为闰年的2月
        cout << 29 << endl; // 输出闰年2月的天数
    else // 平年的2月
        cout << 28 << endl; // 输出平年2月的天数
    return 0; // 程序结束
}

解释:

这个程序首先读取输入的年份和月份。然后通过一系列条件判断确定该月份的天数。如果年份是闰年且月份是2月,则该月有29天;如果不是闰年的2月,则该月有28天。对于大月和小月,通过月份的判断直接输出对应的天数。

3.2 编程题2

题目名称:长方形面积
题面描述

小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?

如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。

输入格式

输入一行,包含一个整数 ( A ),表示长方形的面积。约定 ( 2 ≤ A ≤1000 )。

输出格式

输出一行,包含一个整数 ( C ),表示有 ( C ) 种可能的长方形。

样例

输入

4

输出

2

输入

6

输出

2

参考程序:

cpp 复制代码
#include <iostream> // 引入标准输入输出库
using namespace std;

int main() {
    int area = 0, cnt = 0; // 定义面积变量和计数器变量并初始化
    cin >> area; // 读取输入的面积
    for (int w = 1; w * w <= area; w++) { // 遍历所有可能的宽度,直到宽度的平方超过面积
        if (area % w == 0) // 判断该宽度是否能整除面积
            cnt++; // 如果能整除,计数器加1
    }
    cout << cnt << endl; // 输出计数器的值
    return 0; // 程序结束
}

解释:

这个程序读取长方形的面积,然后通过遍历所有可能的宽度,判断是否可以整除面积来确定长方形的宽度。对于每一个可能的宽度,如果面积能被宽度整除,就增加计数器。最终输出计数器的值,即满足条件的长方形数量。

相关推荐
长弓聊编程8 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.15 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
暮色_年华30 分钟前
Modern Effective C++item 9:优先考虑别名声明而非typedef
c++
重生之我是数学王子38 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
做人不要太理性1 小时前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.2 小时前
2、桥接模式
c++·桥接模式
chnming19872 小时前
STL关联式容器之map
开发语言·c++
程序伍六七2 小时前
day16
开发语言·c++
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode