您当前的位置:首页 > 自考资料
湖北工业大学继续教育学院自考04737C++程序设计科目模拟题

发布时间: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(intint)

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 derivedstudent private{    //............}

B.class derivedstudent public {    //............}

C.class derivedpublic student {    //............}

D.class derivedprivate 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=iy=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,23,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 分。 

42019 

这三个数据中最大的是: 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; 

}

 湖北工业大学继续教育学院