第 13 届蓝桥杯 C++ 青少组省赛中 / 高级组 2022 年真题
一、选择题
第 1 题
题目:已知char a; float b; double c;
,执行语句c = a + b + c;
后变量c
的类型是( )。
A. char B. float C. double D. int
正确答案:C
答案解析:
在 C++ 中,表达式运算会进行类型提升:
a
(char)与b
(float)相加时,char 提升为 float,结果为 float。- 该 float 结果再与
c
(double)相加时,float 提升为 double,最终结果类型为 double。
因此,变量c
的类型仍为 double。
讲解方法和教案:
- 教学目标:理解 C++ 中的类型转换规则(自动提升)。
- 重点:不同类型运算时,低精度类型向高精度类型提升(char→int→float→double)。
- 教学步骤:
- 举例说明类型提升:如
int + float
结果为 float,float + double
结果为 double。 - 强调表达式结果类型由参与运算的最高精度类型决定。
- 举例说明类型提升:如
第 2 题
题目:以下对main
函数描述正确的是( )。
A. main
函数必须写在所有函数的前面
B. main
函数必须写在所有函数的后面
C. main
函数可以写在任何位置,但不能放到其他函数里
D. main
函数必须写在固定位置
正确答案:C
答案解析:
C++ 中,main
函数是程序的入口,但没有规定其必须位于代码的特定位置。
- 它可以写在其他函数之前或之后,但不能被其他函数包含(即不能在某个函数内部定义
main
)。
选项 A、B、D 均错误,C 正确。
讲解方法和教案:
- 教学目标:明确
main
函数的特殊性和位置要求。 - 重点:
main
函数是程序执行的起点,独立定义,不被其他函数包含。 - 教学步骤:
- 展示不同位置定义
main
函数的合法代码(如main
在开头、中间、结尾)。 - 强调错误写法:在另一个函数内部定义
main
会导致编译错误。
- 展示不同位置定义
第 3 题
题目:二进制数1101111
转换为十六进制是( )。
A. 157 B. 111 C. 6f D. 3f
正确答案:C
答案解析:
二进制转十六进制需从右到左每 4 位分组(不足补前导 0):
1101111
→ 补前导 0 为0110 1111
0110
对应十六进制6
,1111
对应F
(小写为f
),故结果为6f
(选项 C)。
讲解方法和教案:
- 教学目标:掌握二进制与十六进制的转换方法(4 位分组法)。
- 重点:分组时从右往左,不足补 0;十六进制字符大小写不影响值(但题目选项需严格匹配)。
- 教学步骤:
- 演示分组过程,计算每组对应的十六进制值。
- 练习:将
10101010
转换为十六进制(A10→错误,正确为 AA)。
第 4 题
题目:下列函数中哪一个不能重载( )。
A. 构造函数 B. 析构函数 C. 成员函数 D. 非成员函数
正确答案:B
答案解析:
函数重载要求函数名相同,参数列表不同。
- 析构函数的名称固定为
~类名()
,且没有参数,无法通过参数列表区分,因此不能重载。 - 构造函数