发布时间:2025-06-19
发布者: 创始人
浏览量:0次
2020年8月高等教育自学考试全国统一命题考试
C++程序设计
(课程代码04737)
注意事项:
1.本试卷分为两部分,第一部分为选择题,第二部分为非选择题。
2.应考者必须按试题顺序在答题卡(纸)指定位置上作答,答在试卷上无效。
3.涂写部分、画图部分必须使用2B铅笔,书写部分必须使用黑色字迹签字笔。
第一部分选择题
一、单项选择题:本大题共20小题,每小题1分,共20分。在每小题列出的备选项中只有一项是最符合题目要求的,请将其选出。
1.下列选项中,对C++语言的描述正确的是
A.编译式的语言
B.不通用的语言
C.大小写不敏感
D.继承于Java语言
2.下列选项中,对函数参数默认值的描述正确的是
A.声明函数时不能为形参指定默认值
B.在调用有默认参数值的函数语句中,必须给出对应的实参
C.指定默认值时可以用任何有定义的表达式
D.指定默认值时可以是函数内定义的局部变量
3.下列选项中,面向对象的程序设计方法不属于分析待解决问题的是
A.事物有哪些特点
B.不同事物种类之间的关系
C.事物之间的相互作用
D.将问题分解为多个子问题
4.在定义类成员时,为体现类内成员的隐藏性,需要使用的关键字是
A.public
B.friend
C.protected
D.private
5.下列选项中,关于析构函数的描述错误的是
A.不能指定返回类型
B.函数体中可以有delete语句
C.不可以重载
D.返回类型可以是void类型
6,使用语句PerInfo d(1001.65);创建对象时,使用的构造函数的原型是
A.Perlnfo();
B.Perlnfo(int);
C.Perlnfo(int,int);
D.Perlnfo(int,int,int);
7.如果类A被声明为类B的友元,则下列选项中描述正确的是
A.类B不一定是类A的友元类
B.类A的成员即是类B的成员
C.类B的成员即是类A的成员
D.类A的成员函数不得访问类B的成员
8.下列选项中,关于运算符重载的描述正确的是
A.运算符重载可以改变运算符的优先级
B.运算符重载不能改变运算符操作数的个数
C.运算符重载可以改变运算符的结合性
D.运算符重载不能被重载为成员函数
9.如果表达式--p*g中的--和*都是通过友元进行的运算符重载,则采用运算符重载函数调用的格式,该表达式还可以表示为
A.operator*(p.operator--(),q)
B.operator--(p).operator*(q)
C.operator*(p.operator--(p),q)
D.operator--(p)."operator (q)
10.派生类的对象可以直接访问的基类成员是
A.公有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.私有继承的公有成员
11.假设已经定义好了类student,现在要定义类derived,它是从student私有派生的,则定义类derived的正确写法是
A.class derived:student private{ //............}
B.class derived:student public { //............}
C.class derived:public student { //............}
D.class derived:private student{ //...........}
12.设有基类B和C,共同派生子类A。类定义为:class A:public B,public C{//...........};,则创建类A的对象时,构造函数的调用次序依次是
A.A、B、C
B.C、B、A
C.B、C、A
D.A、C、B
13.下列选项中,关于虚函数的说明正确的是
A.从虚基类继承的函数都是虚函数
B,虚函数不得是静态成员函数
C.只能通过指针这一唯一形式调用虚函数
D.抽象类中的成员函数都是虚函数
14.下列选项中,将没有返回值的Printlnfo()函数声明为纯虚函数的正确形式是
A.void Printlnfo()=0;
B.virtual void Printlnfo()=0;
C.virtual void Printlnfo();
D.virtual void PrintInfo() {};
15.下列选项中,对于语句“cout<<sum<<endl;"中各个组成部分的叙述正确的是
A.“cout”是一个输入流对象
B.“sum”是求出和的常量
C.“endl"作用是输出一个回车
D.“<<”是插入运算符
16.getline()函数的功能是从输入流中的当前字符开始读取
A.一个字节
B.若干字节
C.一个字符
D.一行字符
17,下列选项中,不是C++标准类库中用于文件操作的文件流类是
A.ifstream
B.iomanip
C.ofstream
D.fstream
18,已知:int ans,以二进制方式将ans的值写入输出流文件对象outfile中,下列选项中正确的语句是
A.ofstream outfile(“result.txt”,ios::out|ios::binary);outfile.write((int*)&ans,sizeof(int));
B.ofstream outfile(“result.txt”,ios::out|ios::binary);outfile.write(char*)&ans,sizeof(int));
C.ifstream outfile(“result.txt”,ios::out|ios::binary);outfile.write((int*)&ans,ans);
D.ifstream outfile(“result.txt”,ios::out|ios::binary);outfile.write((char*)&ans,ans);
19.若有如下函数模板定义:
template<typename T>
Sum(T a,T b,T sum){sum=a+b;}则下列选项中正确的是
A.int x,y;char z;Sum(x,y,z);
B.double x,y,z;Sum(x,y.z);
C.int x,y;float z;Sum(x.y.z);
D.float x,double y,z;Sum(x,y,z);
20.类、类模板之间都允许继承,下列选项中不属于它们之间常见的派生关系是
A.普通类维承模板类
B.类模板继承普通类
C.模板类继承普通类
D.类模板继承模板类
第二部分 非选择题
二、填空题:本大题共15空,每空1分,共15分
21.C++语言的特点表现在两个方面,首先它是继承了C语言的特征,其次加入了面向( )的特征。
22.const int*b=&a;中,const修饰的是int,说明( )是指向常量的指针。
23.变量的生存期是指变量所占据的( )由分配到释放的时期。
24.若Student类中的一个成员函数score的说明为:void score(Student&s):则s是Student的对象引用,s用来做( )函数的形参。
25.( )表示的是隐藏的对象的指针,静态成员函数没有该指针。
26.类的普通成员函数是指声明中不含const和( )关键字的函数。
27.C++程序中,重载运算符[]时,不能用友元来重载运算符。只能用( )来重载。
28.如果运算符重载为全局函数,对于二元运算符需要为该函数传递( )个参数。
29.生成派生类对象时,先执行各基类的构造函数,调用顺序为派生类继承时的( )顺序,
30.当基类是一个封闭类,在具有继承关系的类层次体系中,析构函数执行的顺序是:首先是执行派生类本身的析构函数,然后执行对象成员的析构函数,最后是执行( )
31.面向对象程序设计语言有封装、( )和多态3种机制。
32.类Car公有派生出类RunCar,类Car和类RunCar中都定义了虚函数func(),p是指向类Car对象的指针,则p->func();将调用( )类中的函数func().
33.头文件( )包含操作所有输入输出流所需要的基本信息,因此大多数C++程序都
应该包含这个头文件。
34.C++根据存取方式不同分为顺序存取文件和( )文件。
35.编译器由类模板生成类的过程称为类模板的( )。
三、程序填空题:本大题共5小题,每小题4分,共20分。请按试题顺序和空格顺序填写答案,错填、不填均无分。
36.将下面程序补充完整,使程序输出的结果为:
ZhangMeng
####201902
最终分数为90.7
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
double score=90.657;
int id=201902;
string name="ZhangMeng";
cout.width(10);
___________<<endl;
cout<<setw(10)<<__________<<id<<endl;
cout<<“最终分数为:“<<setprecision(3)<<score<<endl;
return 0;
}
37将下面程序补充完整,使程序输出的结果为2050。
#include <iostream>
using namespace std;
class Sum
{
public:
static int x:
Sum(int i=2020){________;}
int GetSum(){return Sum::x+26;}
};
int Sum::x4;
int main()
{
Sum test;
__________<<endl;
return 0;
}
38.将下面类定义补充完整,类Point是坐标点,Line是两点间的直线,Distance求出
两点间的距离。
class Line;
class Point
{private:int x,y;
____________________;
public:Point(int i=0,int j=0){ x=i;y=j:}
};
class Line
{private:Point p1,p2;
public:Line(Point xpl,Point xp2):pl(xp1),p2(xp2){};
double Distance();
};
double Line::Distance()
{ double dx=p2.x-pl.x;
_______________;
return sqrt(dx*dx+dy*dy);
}
39.将下面程序补充完整,使程序输出的结果为167。
#include <iostream>
using namespace std;
class Integer
{
private:
int n;
public:
Integer(int m):n(m) {} ;
________________(){-n; return*this;}//重载前缀“--”运算符
void Show() const { cout <<n <<endl;}
} ;
int main()
{
______________;
--i;
i.Show();
return 0;
}
40.下面程序功能是使用函数模板求一个数组各元素的积。输出结果为362880。
#include <iostream>
using namespace std;
_________________;
Type Mul(Type a[],int n)
{
Type t=1;
for (int i=0;i<n;i++)
T*=a[i];
} ;
int main()
{
Inta[]={1,2,3,4,5,6,7,8,9};
cout<<__________<<endl;
return 0:
}
四、程序分析题:本大题共5小题,每小题6分,共30分。
41.写出以下程序的输出结果
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<”学习构造函数于";}
~A(){cout<<"类和对象进阶”<<endl;}
};
class B:A
{
public:
B(int i){cout<<i<<”年”<<endl;}
~B(){cout<<"第3章";}
};
int main()
{
B obj(2020);
return 0;
}
42.写出以下程序的输出结果
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string s1="20200404737";
string s2="c语言程序设计";
s2[1]=’+’;
s2[2]=s2[1];
s2[3]=s2[4]=’.’;
s1=s1.substr(6,5);
s1.swap(s2);
string str=s1.append(s2);
cout<<"str="<<str<<endl;
cout<<"字符串共含有"<<str.length()<<”个字符”;
return 0;
}
43.写出以下程序的输出结果
#include <iostream>
#include <cstring>
using namespace std;
class Compare
{ int a,b;
int getmax(){return(a>b?a:b);}
public:
int c;
void set Value(int datal,int data2,int data3)
{
a=data1;b=data2;c=data3;
cout<<a<<","<<b<<","<<c<<endl;
}
int GetMax();
};
int Compare::GetMax()
{
int d=getmax();
return(d=d>c?d:c);
}
int main()
{
Compare object1;
object1.setValue(4,20,19);
cout<<"这三个数据中最大的是:";
cout<<object1.GetMax()<<end1;
return 0:
}
44.写出以下程序的输出结果
include<iostream>
using namespace std;
class MyClass{
public:
MyClass(int i=0){cout<<1<<’’;}
MyClass(const MyClass&x){cout<<2<<’’;}
MyClass&operator=(const MyClass&x){cout<<3<<’’;return *this;}
~MyClass(){cout<<4<<’’;}
};
int main(){
MyClass obj1(1),obj2(2),obj3(obj1);
obj1=obj2;
obj1=obj3;
return 0;
}
45.写出以下程序的输出结果
#include <iostream>
using namespace std;
class A
{public:A(){cout<<"测量广场”;}
virtual~A(){cout<<”是否扩建?"<<endl;)
};
class B:public A
{public:int width,high;
B()
{ width=40;high=20;
cout<<"初始面积为:"<<width*high<<endl;
}
~B(){if(width*high<10000)cout<<"不超过最大面积值,";}
};
int main()
{ A*p=new B();
delete p;
return 0;
}
五、程序设计题:本大题共2小题,第1小题5分,第2小题10分,共15分,
46.编写程序以读方式打开当前文件夹下“address'”文本文件,并在屏幕显示该文件内容。
47.编写完成如下程序中“……”部分,程序定义一个抽象类Shape,由它派生3个类:Square(正方形)、Trapezoid(梯形)和Triangle(三角形),用虚函数分别计算几种图形的面积、并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。
#include <siostream>
using namespace std;
class Shape
{public:
virtual double area()const =0;
};
……
void main()
{Shape*p[3];
Square se(5);
Trapezoid td(2,5,4);
Triangle te(5,8);
p[O]=&se;
p[1]=&td;
p[2]=&te;
double da=0;
for(int i=0;i<3;i++)
{da+=p[i]->area();}
cout<<”总面积是:”<<da<<endl;
}
2020 年 8 月高等教育自学考试全国统一命题考试
C++程序设计参考答案及评分标准
(课程代码 04737)
一、单项选择题
1.A 2.C 3.D 4.D 5.D 6.C 7.A 8.B 9.A 10.A
11.D 12.C 13.B 14.B 15.C 16.D 17.B 18.B 19.B 20.C
二、填空题
21.对象/Objective
22.b
23.内存空间/内存/空间
24.score()/score
25.this/*this
26.static
27.成员函数
28.2/二/两
29.基类声明/基类说明/基类的声明/基类的说明
30.基类析构函数/基类的析构函数
31.继承
32.Car
33.iostream/iostream.h
34.随机存取。
35.实例/实例化/具体化/实现/具体实现
三、程序填空题
36.cout << name ,
setfill ('#') / ”####”
37.x= i+x / x=x+i / x+=i / Sum::x= i+ Sum::x / Sum::x= Sum::x+i / Sum::x+=i ,
cout<< test.GetSum() / cout<< test.GetSum(2020)
38.friend class Line / friend void Line::Distance() ,
double dy=p2.y-p1.y
39.Integer & operator-- / Integer operator-- ,
Integer i(168)
40.template <class Type> / template <typename Type>
Mul (a, 9)
注:每题答案有 2 处下划线,每答对一处得 2 分。
四、程序分析题
41.每答对一处划线内容得 1 分,每行划线处前后顺序正确得 2 分。
学习构造函数于 2020 年
第 3 章 类和对象进阶
42.每答对一处划线内容得 1 分。
str= c++..程序设计 04737
字符串共含有24个字符
43.每答对 1 个数据得 1 分,文字得 2 分。
4, 20, 19
这三个数据中最大的是: 20
44.每答对一处划线内容得 1 分,每行划线处前后顺序正确得 2 分。
1 1 2 3 3 4 4 4
45.每答对一处划线内容得 1 分,每行划线处前后顺序正确得 1 分。
测量广场 初始面积为: 800
不超过最大面积值, 是否扩建?
五、程序设计题
46. #include <iostream>
#include <ofstream>
#include <iomanip>
using namespace std;
int main()
{
char address[20];
ifstream inFile; -----能完成定义对象得 1 分
inFile.open("address.txt",ios::in); -----能完成只读方式得 1 分
while(inFile>>address) -----能完成文件写入得 2 分
cout<<address<<endl;
inFile.close(); -----能关闭文件得 1 分
return 0;
}
47. class Square:public Shape ----能完成继承得 1 分
{public:
Square(double s):side(s){}; ----构造函数正确得 1 分
double area() const{return side*side;} ----面积计算函数得 1 分
private:
double side;
};
class Trapezoid:public Shape ----能完成继承得 1 分
{public:
Trapezoid(double i,double j,double k):a(i),b(j),h(k){}; ----构造函数正确得 2 分
double area() const{return ((a+b)*h/2);} ----面积计算函数得 1 分
private:
double a,b,h;
};
class Triangle:public Shape ----能完成继承得 1 分
{public:
Triangle(double i,double j):w(i),h(j){}; ----构造函数正确得 1 分
double area() const{return(w*h/2);} ----面积计算函数得 1 分
private:
double w,h;
}