赛氪
个人中心

【初赛练习题库指南】--C语言/C++编程巅峰赛

2026.07.30 11:46:38

题库指南:线上答题,题目类型为客观题,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 唯一的核心区别就是默认访问权限不同:

关键字

默认权限

struct

public(公开)

class

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 中使用会导致编译错误。

 

证书查询
取消 确认

同学~下载赛氪APP就可以进群咯~
先不聊 去下载