全国2020年10月高等教育自学考试C++程序设计试题《程序设计题》答案
全国2020年10月高等教育自学考试C++程序设计试题《程序设计题》答案,答案是本人自己做的解答,不保证答案的正确性和完整性,内容仅供学习交流参考。
原题目如下:
五、程序设计题:本大题共2小题,第1小题5分,第2小题10分,共15分。
46.编写一个函数模板,实现将n个数据进行由小到大排序的功能。
47.有一个School类,保护数据成员Number和Name分别表示人的编号和姓名。学生类Student是School的派生类,新增数据成员班号Class_Num和总成绩Total.请用C++代码描述这两个类,并用Student
类的成员函数Display实现学生张小蒙的编号(2020150601)、姓名、班级(四班)和总成绩678的输出(要求编写派生类的构造函数)。
46题考查了模板函数的使用,以及基本的数据排序。
此函数实现可以参考教材第九章结9-3的示例程序。下载该文件sort.cpp.txt (UTF-8编码)。
// 交换数据函数
template<class T>
void mySwap(T &t1, T &t2) {
T temp = t1;
t1 = t2;
t2 = temp;
}
// 比较函数
template<class T>
int myCompare(T t1, T t2) {
if (t1 > t2) { return 1; }
if (t1 < t2) { return -1; }
if (t1 == t2) { return 0; }
}
// 排序函数
template<class T>
void mySort(T arr[], int length) {
int j;
for(int i=0; i<length; i++) {
j = i;
while( j > 0 && myCompare<T>(arr[j], arr[j-1]) < 0) {
mySwap(arr[j], arr[j-1]);
j--;
}
}
}
验证以上程序:
int main() {
int arr[10] = {1, 2, 3, 5, 4, 6, 9, 8, 7, 10};
mySort(arr, 10);
for (int i = 0; i < 10; ++i) {
cout << arr[i] << ",";
}
cout << endl;
char arr1[10] = {'a', 'c', 'b', 'd', 'f', 'e', 'h', 'i', 'j', 'g'};
mySort(arr1, 10);
for (int i = 0; i < 10; ++i) {
cout << arr1[i] << ",";
}
cout << endl;
return 0;
}
输出内容为:
1,2,3,4,5,6,7,8,9,10,
a,b,c,d,e,f,g,h,i,j,
47题简单考察了类的编写,类的继承和构造函数的编写,完整实现代码如下:
下载 stu.cpp.txt(GBK编码)。
#include <iostream>
using namespace std;
class School {
protected:
string Number;
string Name;
public:
School() {}
School(string number, string name): Number(number), Name(name) {}
};
class Student: public School {
string Class_Num;
int Total;
public:
Student() {}
Student(string number, string name, string class_num, int total) : School(number, name), Class_Num(class_num), Total(total){}
void display() {
cout << "学号:"<< Number << ",姓名:" << Name << ",班级:" << Class_Num << ",总成绩:" << Total << endl;
}
};
int main() {
Student student("2020150601", "张小蒙", "四班", 678);
student.display();
return 0;
}
编译后输出的内容为:
学号:2020150601,姓名:张小蒙,班级:四班,总成绩:678
代码中的School
及Student
类中的默认构造函数部分均可省略不写。如果编译运行出现乱码或报错,可能需要修改文件的编码为GBK。