
题库指南:线上答题,题目类型为客观题,C语言赛道和C++赛道任选其一参加;每个赛道均已经开放练习题库;进入练习题库方法(手机同电脑):进入竞赛页面的报名管理页面——点击查看——点击立即进入——即可看到练习题库——每次进入随机刷新50道练习题;

样题展示
一、单选题(共 10 题)
第 1 题
C 语言中,以下哪个是合法的变量名?
A. 3abc B. int C. _count D. my-name
答案:C
解析: 变量命名规则:
- ✅ 可以包含字母、数字、下划线
- ✅ 必须以字母或下划线开头(不能以数字开头)
- ❌ 不能使用关键字(如
int、for、if)
- ❌ 不能包含特殊字符(如
-、#、@)
因此 _count 是唯一合法的选项。
第 2 题
C 语言中,表达式 5 % 3 的值是?
A. 1 B. 1.67 C. 2 D. 0
答案:A
解析: % 是取模运算符(求余数)。5 ÷ 3 = 1 余 2……等等,重新算:
5 = 3 × 1 + 2,所以 5 % 3 = 2。
⚠️ 更正:正确答案应为 C(2)。
5 % 3的结果是 2。
第 3 题
以下哪个不是 C 语言的基本数据类型?
A. int B. float C. string D. char
答案:C
解析: C 语言只有以下基本数据类型:
- 整数类型:
int、short、long
- 浮点类型:
float、double
- 字符类型:
char
string 不是 C 语言的基本类型,C 语言中字符串通过字符数组(char[])或字符指针(char*)来实现。
第 4 题
在 C 语言中,int a[5] = {1, 2, 3}; 则 a[4] 的值是?
A. 3 B. 4 C. 0 D. 不确定(垃圾值)
答案:C
解析: 数组部分初始化时,未赋值的元素会自动初始化为 0。
a[0]=1,a[1]=2,a[2]=3,a[3]=0,a[4]=0
? 注意:这只是局部数组带初始化列表时的规则。如果完全不初始化(如
int a[5];),局部数组的值是不确定的。
第 5 题
C 语言中,用于从键盘读取输入的标准库函数是?
A. printf() B. scanf() C. cout D. input()
答案:B
解析:
printf()→ 输出(打印)到屏幕
scanf()→ ✅ 从键盘输入读取数据
cout→ C++ 的输出方式,不属于 C 语言
input()→ Python 的输入函数,与 C/C++ 无关
第 6 题
以下关于 C++ 中 class 和 struct 的说法,正确的是?
A. 两者完全相同,没有任何区别 B. struct 的成员默认是 public,class 的成员默认是 private C. struct 不能有成员函数 D. class 不能被继承
答案:B
解析: C++ 中 class 和 struct 唯一的核心区别就是默认访问权限不同:
|
关键字 |
默认权限 |
|
|
public(公开) |
|
|
private(私有) |
两者都可以有成员函数、都可以被继承,功能上几乎完全等价。
第 7 题
C++ 中,用于动态分配内存的关键字是?
A. malloc B. new C. alloc D. create
答案:B
解析:
new→ ✅ C++ 的动态内存分配关键字(推荐使用)
malloc→ C 语言的内存分配函数(C++ 中也可用,但不调用构造函数)
alloc/create→ 不是标准 C/C++ 关键字
第 8 题
以下哪个关键字用于定义常量?
A. const B. static C. extern D. volatile
答案:A
解析:
const→ ✅ 定义常量,值不可修改
static→ 定义静态变量(生命周期延长)
extern→ 声明外部变量(跨文件共享)
volatile-> 防止编译器优化(告知变量可能被意外改变)
第 9 题
C++ 中,虚函数的作用是?
A. 提高程序运行速度 B. 实现多态(运行时动态绑定) C. 减少内存占用 D. 防止类被继承
答案:B
解析: 虚函数(virtual function) 是 C++ 实现运行时多态的核心机制。通过基类指针或引用调用虚函数时,会根据对象的实际类型来决定调用哪个版本的函数,而非编译时就固定下来。
第 10 题
以下哪种循环至少会执行一次循环体?
A. for 循环 B. while 循环 C. do-while 循环 D. 以上都至少执行一次
答案:C
解析:
for和while→ 先判断条件,再执行循环体(条件不满足则一次都不执行)
do-while→ ✅ 先执行一次循环体,再判断条件——所以无论条件是否满足,循环体至少执行一次
二、多选题(共 5 题)
第 1 题
以下哪些属于 C 语言的控制流语句?(多选)
A. if-else B. for C. switch-case D. define
答案:A、B、C
解析:
- ✅
if-else→ 条件判断语句
- ✅
for→ 循环语句
- ✅
switch-case→ 多分支选择语句
- ❌
define→ 预处理指令,不是 C 语言语句,在编译前由预处理器处理
第 2 题
关于 C 语言中的指针,以下说法正确的有?(多选)
A. 指针变量存储的是地址 B. 指针的类型决定了它所指向数据的解读方式 C. 空指针的值为 NULL(或 nullptr in C++) D. 指针只能指向基本类型,不能指向数组或函数
答案:A、B、C
解析:
- ✅ 指针的本质就是存放内存地址的变量
- ✅
int* p和char* p虽然都存地址,但解引用时按不同类型解读数据
- ✅ 空指针表示不指向任何有效地址,C 语言中用
NULL,C++ 推荐用nullptr
- ❌ 指针可以指向数组(
int* p = arr)、函数(void (*fp)())、甚至另一个指针(二级指针)
第 3 题
以下哪些是面向对象编程的特征?(多选)
A. 封装(Encapsulation) B. 继承(Inheritance) C. 多态(Polymorphism) D. 递归(Recursion)
答案:A、B、C
解析: 面向对象编程(OOP)的三大核心特征:
- 封装 → 把数据和方法打包,隐藏内部细节
- 继承 → 子类复用父类的属性和方法
- 多态 → 同一接口,不同实现
递归是一种通用的编程技巧(函数自己调用自己),属于面向过程和面向对象都可以使用的编程方法,并非 OOP 特征。
第 4 题
关于 C++ 中的函数重载,以下说法正确的有?(多选)
A. 函数重载是指多个函数可以使用相同的名字 B. 重载函数必须有不同的参数列表(个数或类型不同) C. 仅返回值不同可以构成函数重载 D. 构造函数可以被重载
答案:A、B、D
解析:
- ✅ 函数重载允许同名函数存在
- ✅ 编译器通过参数列表的不同来区分重载函数
- ✅ 构造函数可以重载(无参构造、带参构造、拷贝构造等)
- ❌ 仅返回值不同不能构成重载——因为调用时无法确定该调用哪一个版本
第 5 题
以下哪些属于 STL(标准模板库)中的容器?(多选)
A. vector B. map C. string D. iostream
答案:A、B、C
解析:
- ✅
vector→ 动态数组
- ✅
map→ 键值对映射容器
- ✅
string→ 字符串容器
- ❌
iostream→ 属于输入输出流库,不是容器
其他常见 STL 容器还有:list、set、queue、stack、deque 等。
三、判断题(共 5 题)
第 1 题
C 语言中,数组的下标从 1 开始。( )
答案:错误(×)
解析: C/C++ 中数组下标统一从 0 开始。长度为 n 的数组,其合法下标范围是 0 到 n-1。例如 int arr[5] 的元素分别是 arr[0] ~ arr[4],不存在 arr[5]。
第 2 题
C++ 中,一个类可以有多个析构函数。( )
答案:错误(×)
解析: 一个类只能有一个析构函数。析构函数名称固定为 ~类名,没有参数、没有返回值、不可重载。这与构造函数不同——构造函数可以重载(多个版本,参数不同)。
第 3 题
在 C 语言中,全局变量如果没有显式初始化,其值自动为 0。( )
答案:正确(✓)
解析: C 语言规定,全局变量和静态变量(static) 在未显式初始化时,会自动初始化为 0(数值型)或 '\0'(字符型)或 NULL(指针型)。但局部变量不会自动初始化,其初始值是随机的(垃圾值)。
第 4 题
C++ 中,const 修饰的变量的值在程序运行期间绝对不能被改变。( )
答案:正确(✓)
解析: const 关键字定义的是常量,一旦初始化后,其值就不可修改。如果尝试对 const 变量赋值,编译器会直接报错。这是 C/C++ 提供的一种安全机制,防止程序意外修改不该改变的值。
第 5 题
break 语句可以用于跳出 switch 和循环结构,而 continue 只能用于循环结构。( )
答案:正确(✓)
解析:
break→ 可用于 switch 和 for/while/do-while 循环,作用是立即跳出当前结构
continue→ 只能用于循环(for/while/do-while),作用是跳过本次循环剩余部分,直接进入下一次循环判断
continue 对 switch 无意义,如果在 switch 中使用会导致编译错误。