资源描述
2026上半年计算机二级(C++)编程真题与解题技巧
(考试时间:90分钟 满分100分)
班级______ 姓名______
第I卷(选择题 共40分)
(总共20题,每题2分,每题给出的四个选项中,只有一项是符合题目要求的,请将正确选项前的字母填在题后的括号内)
1. 以下关于C++中函数重载的说法,正确的是( )
A. 函数名相同,参数列表不同
B. 函数名不同,参数列表相同
C. 函数名和参数列表都相同
D. 函数名和返回值类型都相同
答案:A
2. 若有定义int a[5] = {1, 2, 3, 4, 5};,则对数组元素的正确引用是( )
A. a[5]
B. a[0.5]
C. a(2)
D. a[3]
答案:D
3. 以下关于C++类的说法,错误的是( )
A. 类中的成员函数可以访问类的私有成员
B. 类中的成员变量可以是不同的数据类型
C. 类可以有多个构造函数
D. 类的对象不能作为另一个类的成员
答案:D
4. 下列关于C++指针的描述,不正确的是( )
A. 指针可以指向不同类型的数据
B. 指针变量中存放的是地址值
C. 可以通过指针访问其所指向的变量
D. 指针在使用前必须初始化
答案:A
5. 若有定义int p;,则p是( )
A. 整型变量
B. 指向整型变量的指针变量
C. 指向指针的指针变量
D. 以上都不对
答案:B
6. 以下关于C++引用的说法,正确的是( )
A. 引用必须在定义时初始化
B. 引用可以多次赋值
C. 引用和指针没有区别
D. 引用可以指向不同的对象
答案:A
7. 若有定义int a = 10, b = 20;,int &r = a;,则执行r = b;后,a的值为( )
A. 10
B. 20
C. 30
D. 不确定
答案:B
8. 以下关于C++继承的说法,错误的是( )
A. 派生类可以继承基类的成员
B. 继承方式有公有继承、私有继承和保护继承
C. 派生类对象可以访问基类的私有成员
D. 派生类可以有自己的成员
答案:C
9. 若有类定义class B : public A { … };,则B类称为( )
A. 基类
B. 派生类
C. 父类
D. 以上都不对
答案:B
10. 以下关于C++多态性的说法,正确的是( )
A. 同一操作作用于不同的对象,可以有不同的解释
B. 多态性只能通过函数重载实现
C. 多态性与继承无关
D. 多态性在编译时确定
答案:A
11. 若有定义void fun(int a, int &b) { a++; b++; },int x = 1, y = 2;,则执行fun(x, y);后,x和y的值分别为( )
A. 1, 2
B. 2, 2
C. 1, 3
D. 2, 3
答案:C
12. 以下关于C++模板的说法,错误的是( )
A. 模板可以提高代码的复用性
B. 模板分为函数模板和类模板
C. 模板在实例化时才确定具体的数据类型
D. 模板只能处理一种数据类型
答案:D
13. 若有函数模板定义template <typename T> T max(T a, T b) { return a > b? a : b; },则调用max(3, 5.5)的返回值类型是( )
A. int
B. double
C. 不确定
D. 错误调用
答案:B
14. 以下关于C++输入输出的说法,正确的是( )
A. 使用cin和cout进行输入输出需要包含iostream头文件
B. cout只能输出整型数据
C. cin输入数据时必须指定数据类型
D. 输出语句cout << endl;只起到换行作用
答案:A
15. 若有定义int a;,则输入a值的正确语句是( )
A. scanf("%d", a);
B. cin >> a;
C. scanf("%d", &a);
D. cout << a;
答案:B
16. 以下关于C++异常处理的说法,错误的是( )
A. 异常处理可以提高程序的稳定性
B. 使用try块捕获异常
C. 使用catch块处理异常
D. 异常只能由系统抛出
答案:D
17. 若有定义try { … } catch(int e) { … },则catch块捕获的异常类型是( )
A. 整型
B. 字符串型
C. 任意类型
D. 以上都不对
答案:A
18. 以下关于C++文件操作的说法,正确的是( )
A. 打开文件使用open函数
B. 关闭文件使用close函数
C. 读写文件可以使用cin和cout
D. 文件操作不需要包含头文件
答案:B
19. 若有定义fstream file("test.txt", ios::in | ios::out);,则打开的文件test.txt可以( )
A. 只能读
B. 只能写
C. 可读可写
D. 以上都不对
答案:C
20. 以下关于C++命名空间的说法,错误的是( )
A. 命名空间可以避免命名冲突
B. 使用namespace关键字定义命名空间
C. 命名空间中的成员可以直接访问
D. 可以使用using关键字引入命名空间成员
答案:C
第II卷(非选择题 共60分)
二、填空题(每题2分,共10分)
1. C++中,函数返回值类型不能是______。
2. 若有定义int a[3][4];,则a数组元素的个数为______。
3. 类中的成员函数可以分为______和______。
4. 若有定义int p = new int[5];,则使用完该动态数组后,应使用______释放内存。
5. 模板实例化时,编译器会根据______来确定具体的数据类型。
三、程序分析题(每题5分,共15分)
1. 阅读以下程序,写出程序的输出结果。
```cpp
include <iostream>
using namespace std;
void fun(int &a) {
a = a 2;
}
int main() {
int x = 5;
fun(x);
cout << x << endl;
return 0;
}
```
2. 阅读以下程序,写出程序的输出结果。
```cpp
include <iostream>
using namespace std;
class A {
public:
void print() { cout << "A::print()" << endl; }
};
class B : public A {
public:
void print() { cout << "B::print()" << endl; }
};
int main() {
B b;
A p = &b;
p->print();
return 0;
}
```
3. 阅读以下程序,写出程序的输出结果。
```cpp
include <iostream>
using namespace std;
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
int x = 3, y = 5;
double m = 3.5, n = 5.5;
cout << add(x, y) << endl;
cout << add(m, n) << endl;
return 0;
}
```
四、编程题(每题15分,共30分)
1. 编写一个C++程序,定义一个类Rectangle表示矩形,包含成员变量长和宽,以及计算矩形面积和周长的成员函数。编写主函数测试该类。
材料:已知矩形的长和宽,计算其面积和周长。
要求:
- 定义Rectangle类,包含长和宽的成员变量。
- 编写计算面积和周长的成员函数。
- 在主函数中创建Rectangle对象,输入长和宽,调用成员函数计算并输出面积和周长。
2. 编写一个C++程序,定义一个函数模板max,用于返回两个数中的较大值。编写主函数测试该函数模板,要求测试不同数据类型的情况。
材料:有两个数,需要找出其中较大的数。
要求:
- 定义函数模板max。
- 在主函数中分别测试整型、浮点型等数据类型。
五、综合应用题(5分)
编写一个C++程序,实现一个简单的学生成绩管理系统。定义一个类Student,包含学生姓名、学号和成绩等成员变量,以及输入学生信息、计算平均成绩等成员函数。编写主函数,实现输入多个学生信息,计算并输出每个学生的平均成绩。
材料:需要管理多个学生的成绩信息,计算每个学生的平均成绩。
要求:
- 定义Student类,包含相关成员变量和函数。
- 在主函数中输入多个学生信息并计算平均成绩输出。
答案:
1. 填空题答案:
- 函数类型
- 12
- 成员函数、友元函数
- delete[] p
- 实际参数的类型
2. 程序分析题答案:
- 10
- B::print()
- 8
- 9
3. 编程题答案:
- 参考代码:
```cpp
class Rectangle {
private:
double length;
double width;
public:
Rectangle(double l = 0, double w = 0) {
length = l;
width = w;
}
double area() {
return length width;
}
double perimeter() {
return 2 (length + width);
}
};
include <iostream>
using namespace std;
int main() {
double l, w;
cout << "请输入矩形的长和宽:";
cin >> l >> w;
Rectangle rect(l, w);
cout << "矩形面积为:" << rect.area() << endl;
cout << "矩形周长为:" << rect.perimeter() << endl;
return 0;
}
```
- 参考代码:
```cpp
include <iostream>
using namespace std;
template <typename T>
T max(T a, T b) {
return a > b? a : b;
}
int main() {
int x = 3, y = 5;
double m = 3.5, n = 5.5;
cout << max(x, y) << endl;
cout << max(m, n) << endl;
return 0;
}
```
4. 综合应用题答案:
- 参考代码:
```cpp
class Student {
private:
string name;
int id;
double scores[5];
int scoreCount;
public:
Student() {
scoreCount = 0;
}
void inputInfo() {
cout << "请输入学生姓名:";
cin >> name;
cout << "请输入学生学号:";
cin >> id;
cout << "请输入学生成绩(输入-1结束):";
double score;
while (cin >> score && score != -1) {
scores[scoreCount++] = score;
}
}
double averageScore() {
double sum = 0;
for (int i = 0; i < scoreCount; i++) {
sum += scores[i];
}
return sum / scoreCount;
}
};
include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入学生人数:";
cin >> n;
Student students[n];
for (int i = 0; i < n; i++) {
students[i].inputInfo();
cout << "学生" << students[i].name << "的平均成绩为:" << students[i].averageScore() << endl;
}
return 0;
}
```
展开阅读全文