绝密 ★ 考试结束前
2024年10月高等教育自学考试
C++程序设计试题
课程代码:04737
1. 请考生按规定用笔将所有试题的答案涂、写在答题纸上。
2. 答题前,考生务必将自己的考试课程名称、姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸规定的位置上。
注意事项:
每小题选出答案后,用2B铅笔把答题纸上对应题目的答案标号涂黑。如需改动,用橡皮擦干净后,再选涂其他答案标号。不能答在试题卷上。
选择题部分
一、单项选择题:本大题共20 小题,每小题1分,共20分。在每小题列出的备选项中只有一项是最符合题目要求的,请将其选出。
1. 关于C++的描述,正确的是
A.不支持泛型编程
C.不支持面向对象编程
B.不支持过程化编程
D. 支持结构化程序设计
2. 关于C++“动态内存分配”机制的描述,正确的是
A.程序编译期间分配内存
B.程序运行期间分配内存
C. 程序编译时即可确定占用内存的大小
D. 程序运行时也不能确定占用内存的大小
3. 在面向对象的程序设计方法中,将同一类事物的共同特点概括出来的过程称为
A. 抽象 B. 封装
C. 继承 D. 多态
4.关于类和对象的说法,正确的是
A.类的对象不占用内存空间
B.类的成员函数必须由类来调用
C. 类的对象具有成员函数的副本
D. 编译器为每个对象的成员变量分配内存
5. 若一个类的构造函数为T(int i=20,int j=10){y=i;m=j;},则执行语句“T d(24);”后,
d.y 和d.m 的值分别是
A.20 和 0 B.20 和10
C.24 和 0 D.24 和10
6. 在函数中声明的静态变量
A. 只执行一次初始化
B. 不能存储在全局数据区
C.在程序的所有位置都可见
D. 函数执行结束时释放占用的空间
7. 关于运算符重载的说法,不正确的是
A. 解决对象之间的运算问题
B.用于类运算的运算符无须重载
C. 其实质是编写以运算符为名称的函数
D. 使得 C++中的运算符能够用来操作对象
8. 若表达式++a 中的“++”是作为成员函数重载的运算符,则++a 可被编译器解释为
A. operator++(a)
B. a.operator++(1)
C. a.operator++()
D. operator++(a,1)
9.若有类的定义“class DerivedClass : public BaseClass{ int v; };”,则表述正确的是
A. public 是私有继承
B. v是私有成员变量
C. 继承类是 BaseClass
D. 基类是 DerivedClass
10. 公有派生情况下,正确的兼容规则是
A.基类对象赋值给派生类对象
B.基类对象初始化派生类引用
C. 基类对象的地址赋值给派生类指针
D. 派生类对象的地址赋值给基类指针
11. 当基类指针指向其公有派生的派生类对象时,正确的说法是
A.会发生语法错误
B. 必须进行强制类型转换
C.能调用派生类的全部成员函数
D. 不能调用基类中没有的成员函数
12.类 Car 是类 Traffic 的公有派生类,两个类中都定义了虚函数 vc(),p是一个指向类Traffic 对象的指针,p->Traffic::vc()将
A. 调用两个类中的函数
B. 调用类 Car 中的函数 vc)
C.调用类 Traffic 中的函数 vc()
D. 根据p所指的对象类型确定类
13. 关于纯虚函数与抽象类的描述,不正确的是
A. 抽象类是指具有纯虚函数的类
B. 纯虚函数是一种特殊的函数,它允许没有具体的实现
C. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
D.一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类
14. 若类 Abs Class 为抽象类,则正确的语句是
A. AbsClass p;
B. AbsClass *p;
C. AbsClass p(int)
D. int p(AbsClass)
15. 关于C++输入/输出的描述,正确的是
A. 使用输入/输出语句
B. 输入/输出通过流完成
C. istream是文件输入流类
D. ofstream 是通用输入流类
16. 关于循环语句“while(cin>>n){cnt++;}”的解释,正确的是
A. <Ctrl+Z>退出循环
B.完成一批数据的输出
C.输入回车结束数据输入
D. 计算输入数据的累加和
17. 关于文件的基本操作,描述正确的是
A.写文件是将文件中的数据输入到内存中
B. 读文件是将内存中的数据输出到文件中
C. 使用一个文件必须包含2个步骤:打开-操作
D. 使用流类完成打开、读、写、关闭等文件操作
18. 关于“ifstream outFile(“d:\\c2024\\DataFile”, ios: outlios::binary);”参数的解释可以是
A.第1个参数是文件的打开模式
B.第2个参数是文件的绝对路径
C. ios::out 表示以写方式打开文件
D. ios::binary 表示用文本模式打开文件
19. 函数和函数模板名字相同时,先调用的是
A. 参数完全匹配的模板函数
B. 参数完全匹配的普通函数
C. 实参经过自动类型转换后能够匹配的模板函数
D. 形参经过自动类型转换后能够匹配的普通函数
20. 类模板“template<class T>classX{…};”若使函数 f(X<int>&)成为X<int>模板类的友元函数,则其说明可以是
A. friend void f();
B. friend void C(T);
C. friend void A::f();
D. friend void f(X<T>&);
非选择题部分
注意事项:
用黑色字迹的签字笔或钢笔将答案写在答题纸上,不能答在试题卷上。
二、填空题:本大题共10空,每空1分,共10分。
21.一个C++源文件中包含3个函数,main()、fl()和f2()函数,在f2()函数中可以非递归调用函数____。
22.语句“____ =&ss; ”使用指针 sp 访问类 Student 的对象ss。
23.成员函数定义在类体外的格式是“返回值类型____成员函数名(参数列表){…}”。
24.语句“myDate::~myDate(){cout<<“…”<<endl;}”为类 myDate 添加____函数。
25. 使用 new 运算符创建的变量直到用____运算符或程序结束时,变量生存期结束。
26. 即使两个操作数的类型不匹配也要完成赋值操作,就需要对“=”进行____。
27. 派生类继承了基类中除____和析构函数之外的全部成员函数。
28. 使用____能够增强程序的可扩充性,也能起到精简代码的作用。
29.语句“cout<<scientific<<setprecision(4)<<12345.6789;”输出的数据,使用____计数法且保留小数点后4位。
30. 类模板使得类中的某些成员变量、某些成员函数的返回值及局部变量能取____。
三、程序填空题:本大题共5小题,每小题4分,共20分。请按试题顺序和空格顺序在答题卡(纸)指定位置上填写答案,错填、不填均无分。
31.以下程序输出圆面积的数值 12.56,请将程序补充完整。
#include <iostream>
using namespace std;
class Circle{
public:
int r;
double s;
(1){ return s=3.14*r*r; }
};
int main()
{
Circle c;
c.r=2;
(2)
cout<<c.s<<endl;
}
32. 以下程序输出数值2024,请将程序补充完整。
#include <iostream>
using namespace std;
class INTEGER
{
public:
INTEGER(int a) { (1) ; }
private:
int a;
(2) (const INTEGER& obj);
};
void Print(const INTEGER & obj) { cout<<obj.a; }
int main()
{
INTEGER obj(2024);
Print(obj);
}
33. 以下程序输出“C++等级成绩:优秀”,请将程序补充完整。
#include <iostream>
#include <string>
using namespace std;
class Base{
public:
Base(const char *na) { strcpy(s,na); }
char s[80];
};
(1) {
public:
Derived(const char *nm):Base(nm){ }
void show);
};
void Derived::show() { cout<< (2)<<endl; }
int main()
{
Derived bl("优秀");
b1.show();
}
34. 以下程序输出“程序设计100分”,请将程序补充完整。
#include <iostream>
using namespace std;
class A{
public:
int i;
virtual void fl() { cout<<"C++"; }
(1) { cout<<"100分"; }
};
class B:public A{
int j;
void fl() { cout<<"程序设计"; }
};
int main()
{
A *a;
Bb;
(2)
}
a->fl();
a->f2();
}
35. 以下程序输出“相等不相等”,请将程序补充完整。
#include <iostream>
using namespace std;
(1)
class Sample{
Tn;
public:
Sample(T i) { n=i; }
int operator == (Sample &);
};
template <class T>
int Sample<T>::operator == (Sample &s)
{
if(n==s.n) return 1;
else return 0;
}
int main()
{
(2), s2(1);
cout<< s1 === s2 ?"相等":"不相等");
Sample<double>s3(2.4),s4(3.5);
cout<< s3 === s4 ?"相等":"不相等");
}
四、程序分析题:本大题共5小题,每小题6分,共30分。阅读程序后,填写程序的正确运行结果。
36.
#include <iostream>
using namespace std;
void setzero(int &a) { a=0; }
int main(){
int a=1,b=2;
const int *p=&a;
cout<<a<<' '<<b<<' '<<*p<<endl;
setzero(a);
setzero(b);
cout<<a<< '<<b<< '<<*p<<endl;
return 0;
}
37.
#include <iostream>
using namespace std;
class A{
public:
static int num;
double x,y;
A()
{
x=0; y=0; num++;
}
A(double a,double b)
{
x=a; y=b; num++;
}
void Print(){cout<<"The num = "<<num<<endl;}
};
int A::num=0;
int main()
{
A obj(1,2),*p;
cout<<A::num<<' '<<obj.num<<endl;
p=new A(3.4,5.6);
cout<<A::num<<' '<<p->num<<endl;
obj.Print();
}
38.
#include <iostream>
using namespace std;
class A{
public:
A(int a=100) { m_a = a; }
int get() { return m_a++; }
private:
int m_a;
};
int operator +(A &a1, A &a2) { return a1.get()+a2.get()-14; }
int main()
{
A a1(10000),a2,a3=1;
cout<<"输出1: "<<al+a2<<endl;
cout<<"输出 2: "<<a2+a3<<endl;
}
39.
#include <iostream>
using namespace std;
class A{
public:
void f1() { cout<<"A::fl"<<endl; }
virtual void f2() { cout<<"A::f2"<<endl; }
}:
class B:public A{
public:
virtual void fl() { cout<<"B::fl"<<endl; }
virtual void f2) }
cout<<"B::f2"<<endl; }
};
class C:public B{
public:
virtual void fl) { cout<<"C::fl"<<endl; }
virtual void f2()
{
cout<<"C::f2"<<endl; }
};
int main()
{
C obj;
A *pa = &obj;
B *pb = &obj;
pa->f1();
pa->f2();
pb->f1();
}
40.
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
double x=123.456;
cout<<"x="<<setw(10)<<setprecision(5)<<x<<endl;
char str[20]="123_Hi";
cout<<"str="<<setfill('*')<<setw(8)<<str<<endl;
int i=0,cnt=0;
while(str[i])
{
if(str[i]>='0'&&str[i]<='9') cnt++;
i++;
}
}
cout.setf(ios::showpos);
cout<<"cnt="<<cnt;
五、程序设计题:本大题共2小题,每小题10分,共20分。
41. 读取 c盘根目录 score.txt 文件中的数据(数据为学生的姓名和总成绩),在屏幕上显示这些排序前的数据,按学生成绩由高到低的顺序排序后,将结果存放在当前文件夹名为out.txt 的文件中。
42. 商品类定义为基类 Product,包括名称 name、数量 count、单价 price 和总价 total (数量与单价的乘积);定义它的两个派生类,手表类 Watch (增加质保年限属性)和书籍类 Book(增加作者属性);为这三个类添加构造函数完成输入,添加成员函数
output()完成各自商品全部信息的输出。主函数如下,请完成其余程序代码的编写。
#include <cstdlib>
using namespace std;
int main()
{
Watch w;
Book b;
w.output();
b.output();
}
2024 年 10 月高等教育自学考试全国统一命题考试
04737C++ 程序设计 答案及评分参考
一、单项选择题:本大题共 20 小题,每小题 1 分,共 20 分。
1.D 2. B 3. A 4. D 5. D
6.A 7. B 8. C 9. B 10. D
11.D 12. C 13. D 14. B 15. B
16.A 17. D 18. C 19. B 20. D
二、填空题:本大题共 10 空,每空 1 分,共 10 分。
21. f1 或 f1 ()
22. Student *sp
23. 类名::
24. 析构
25. delete
26. 重载
27. 构造 或 构造函数
28. 多态
29. 科学
30. 任意类型
三、程序填空题:本大题共 5 小题,每小题 4 分,共 20 分。
31.(1)double c_s (int r) (2 分)
(2)c.c_s (c.r) (2 分)
32.(1)this->a=a (2 分)
(2)friend void Print (2 分)
33.(1)class Derived:public Base (2 分)
(2)”C++ 等级成绩:”<<s (2 分)
34.(1)virtual void f2 () (2 分)
(2)a=&b (2 分)
35.(1)template <class T> (2 分)
(2)Sample<int>s1 (1) (2 分)
四、程序分析题:本大题共 5 小题,每小题 6 分,共 30 分。
36. 1 2 1 (3 分:每个数据 1 分)
0 0 0 (3 分:每个数据 1 分)
37. 1 1 (2 分:每个数据 1 分)
2 2 (2 分:每个数据 1 分)
The num = 2 (2 分:格式和数据各 1 分)
38. 输出 1:10086 (3 分:格式 1 分,数据 2 分)
输出 2:88 (3 分:格式 1 分,数据 2 分)
39. A::f1 (2 分)
C::f2 (2 分)
C::f1 (2 分)
40. x= 123.46 (2 分:格式和数据各 1 分)
str=**123_Hi (2 分:格式和数据各 1 分)
cnt=+3 (2 分:格式和数据各 1 分)
五、程序设计题:本大题共 2 小题,每小题 10 分,共 20 分。
41.
#include <cstdlib>
using namespace std;
class Student{
public:
char name[30];
int score;
}stu[20];
int scoreCompare(const void e1,const void e2)
{
return(((Student)e2).score-((Student) e1).score);
}
int main ()
{
ifstream fin ("c:\score.txt");
ofstream fout ("out.txt");
int i=0;
while (fin>>stu [i].name>>stu [i].score)
{
cout<<stu [i].name<<' '<<stu [i].score<<endl;
i++;
}
int n=i;
qsort (stu,n,sizeof (Student),scoreCompare);
for (i=0;i<n;i++)
fout<<stu [i].name<<' '<<stu [i].score<<endl;
fin.close ();
fout.close ();
}
(评分说明:学生数据定义 1 分,打开文件 2 分,输出排序前数据 2 分,排序 2 分,写数据 1 分,关闭文件 2 分,满分 10 分)
42.
class Product {
protected:
string name;
int count;
double price,total;
public:
Product (){cin>>name>>count>>price;}
void output ()
{
cout<<"name:"<<name<<"count:"<<count<<"price"<<price;
cout<<"total:"<<price*count<<endl;
}
};
class Watch:public Product {
int year;
public:
Watch (){cin>>year;}
void output ()
{
Product::output ();
cout<<"year:"<<year<<endl;
}
};
class Book:public Product {
string z;
public:
Book (){cin>>z;}
void output ()
{
Product::output ();
cout<<"z:"<<z<<endl;
}
};
(评分说明:Product 类 4 分,Watch 类 3 分,Book 类 3 分,满分 10 分)
(2)本站自学考试信息供自考生参考,权威信息以各省(市)考试院官方为准。
暂无评论内容