2023年自考类计算机类(工学类)C++程序设计2010-2022历年真题选编带答案难题含解析_第1页
2023年自考类计算机类(工学类)C++程序设计2010-2022历年真题选编带答案难题含解析_第2页
2023年自考类计算机类(工学类)C++程序设计2010-2022历年真题选编带答案难题含解析_第3页
2023年自考类计算机类(工学类)C++程序设计2010-2022历年真题选编带答案难题含解析_第4页
2023年自考类计算机类(工学类)C++程序设计2010-2022历年真题选编带答案难题含解析_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年自考类计算机类(工学类)C++程序设计2010-2022历年真题选编带答案难题含解析(图片大小可自由调整)第1卷一.历年考点试题黑钻版(共75题)1.定义复数类complex,采用成员函数的形式对复数加法计算“+”进行运算符重载。2.#include<iostream.h>

classA

{public:

voidf(){cout<<"a.f()"<<endl;}

};

classB

{public:

voidf(){cout<<"b.f()"<<endl;}

voidg(){cout<<"b.g()"<<endl;}

};

classC:publicA,publicB

{private:

intb;

public:

voidg(){cout<<"c.g()"<<endl;}

};

voidmain()

{Cobj;

obj.f();

obj.g();

}3.#include<iostream>

usingnamespacestd;

voidswap(int&,int&);

voidmain()

{inta=5,b=10;

swap(a,b);

cout"a="a",b="bendl;

}

voidswap(intx,inty)

{inttemp;

temp=x;

x=y;

y=temp;

}4.#include<iostream.h>

classBase

{protected:

intx;

public:

virtualvoidfun()=0;

};

classDerived:publicBase

{intz;

public:

Derived(inti){z=5;}

voidfun()

{cout<<"派生类fun():"<<"z="<<z<<endl;}

};

voidmain()

{Derivedb

;

Base*p=newBase(6);

p=&b;

p->fun();

}5.使用STL库中的算法对数组进行升幂排序、反转、复制数组的内容等操作,需要包含头文件______。6.下列标识符中正确的是

A.abcB.3abC.intD.+ab7.在下面程序横线处填上适当的语句,使其输出结果为0,15,15。

#include<iostream.h>

classbase

{public:

______f(){return0;}

};

classderived:publicbase

{public:

inta,b,c;

______set(intx,inty,intz){a=x;b=y;c=z;}

intf(){returna+b+c;}

};

voidmain()

{baseb;

derivedd;

cout<<b.f()<<",";

d.set(3,5,7);

cout<<d.f()<<",";

base&p=d;

cout<<p.f()<<endl;

}8.执行下列代码

intb=100;

cout<<"Oct:"<<oct<<b;

程序的输出结果是______。9.文件流类的______成员函数的功能是打开一个文件。10.对象使用自己的成员函数的方法是通过以下哪个运算符______A.&B.*C.->D..11.下面可以做标识符首个字符的是______A.aB.1C.&D.+12.继承的方式有公有继承、私有继承和______。13.在下面的二维数组定义正确的是______A.intary[5][];B.intary[][5]={{0,1,2}};C.intary[][5];D.intary[5,5];14.用______修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。15.供外部调用类中的函数成员,其访问属性通常被定义为______。16.关于函数重载的描述正确的是______A.函数的参数个数不能相同B.函数参数的数据类型不能相同C.函数的返回值可以相同D.函数的返回值不能相同17.设int&max(int&,int&)返回两参数中较大者,如有两整型变量inta=5;intb=10;在执行max(a,b)++后,a,b的值分别为______A.5,10B.6,10C.5,11D.6,1118.定义一个Box(盒子)类,在该类定义中包括数据成员——length(长)、width(宽)和height(高);成员函数——构造函数Box,设置盒子长、宽和高三个初始数据;用函数volume计算并输出盒子的体积。在main函数中,要求创建Box对象,并求盒子的体积。19.UML中对象之间的静态关系是通过对象属性之间的连接反映的,称之为______。20.完成下面类中构造函数的定义。

#include<iostream.h>

classA

{private:

inty;

intx;

public:

A(int,int);

A(constA&);

voidshow()

{cout<<"x="<<x<<",y="<<y<<endl;

}

};

A::A(inti,intj):______

{}

A::A(______)

{x=t.x;y=t.y;}

voidmain()

{Aa1(3,5);

a1.show();

Aa2(a1);

a2.show();

}21.下列关于向量的描述中,不正确的是______A.size()方法指返回当前向量中已经存放的对象的个数B.erase(iteratorit)方法是删除it所指向的容器对象C.向量可以改变赋值目标的大小D.向量是类模板,具有成员函数,但它不可以使用构造类型22.在下面程序横线处填上适当内容,使程序执行结果为:40:15程序如下:

#include<iostream.h>

template<classT>

Tfunc(Tx,Ty){

if(sizeof(T)==8)

return______;

else

return______;

}

voidmain(){

cout<<func(8,5)<<":"<<func(5.0,10.0)<<endl;

intd;cin>>d;

}23.下列对派生类的描述中,错误的是______A.派生类至少应有一个基类B.派生类的成员除了自己定义的成员外,还包含了它的基类成员C.基类中成员访问权限继承到派生类中都保持不变D.一个派生类可以作为另一个派生类的基类24.友元函数可以存取类的______。25.#include<iostream>

#include<string>

usingnamespaeestd;

classA

{

intm;

staticintn;

public:

A(inti=0){n++;m=i;}

voidshow(){cout<<"n:"<<n<<endl;}

};

A::n=0;

classD:publicA

{public:

D(inti=0):A(i){}

};

voidmain()

{Dd(3);

D.show();}26.在C++中,可将多态性分为:编译时的多态性和______。27.修改程序中的错误,使其输出为10,20。

#include<iostream>

usingnamespacestd;

voidswap(inta,intb)

{inttemp;

temp=a;a=b;b=temp;}

voidmain()

{intx=20,y=10;

swap(x,y);

cout<<x<<"

"<<y<<endl;

}28.C++中类的成员默认为______A.publicB.privateC.protectedD.static29.#include<iostream>

usingnamespacestd;

voidmain(){

intx=32,y=37;

constint*p=&x;

*p=y;

cout<<*P<<endl;

}30.与操作对象的数据类型相互独立的算法称为______。31.将一个函数声明为内联函数时所使用的关键字为______A.signedB.shortC.constD.inline32.下面程序是求表达式5!+4!+3!+2!+1!的值,请完成填空。

#include<iostream>

usingnamespacestd;

intfun(inta);

voidmain(){

ints(0);

for(inti(1);i<=5<i++)

cout<<"5!+4!+3!+2!+1!="<<s<<endl;

}

intfun(inta){

;

b*=a:

returnb;

}33.下列表达式,哪一是声明p为指向常量的指针

A.constint*pB.int*constp;C.constint*constpD.int*p34.对于指针p,禁止修改指针p,也禁止修改指向的数据,这样的指针应定义为______A.constchar*p="ABCD";B.char*constp="ABCD";C.charconst*p="ABCD";D.constchar*constp="ABCD";35.设存在函数intsum(int,int)返回两个参数的和,若求20、45、100三个数的和,下列表达式不正确的是______A.intm=sum(20,45,100);B.intm=sum(sum(20,45),100);C.intm=sum(20,sum(45,100));D.intm=sum(45,sum(20,100));36.局部对象和全局对象中,在同一程序中______生存期最长。37.#include<iostream.h>

classA

{public:

virtual~A(){}

virtualvoidf()

{cout<<"A::f()"<<endl;}

virtualvoidg()

{cout<<"A::g()"<<endl;}

};

classB:publicA

{public;

virtualvoidg()

{cout<<"B::g()"<<endl;}

virtualvoidk()

{cout<<"B::k()"<<endl;}

};

voidmain()

{A*P=newB;

P->f();

P->g();

P->k();

deletep;

}38.如果调用函数时,需要改变实参或者返回多个值,应该采取______方式。39.在下面程序横线处填上适当内容,使程序执行结果为:

n=2,sum=2

n=3,sum=5

n=5,sum=10

程序如下:

#include<iostream.h>

classTest

{

intn;

staticintsum;

public:

Test(intx){n=x;}

voidadd(){______;}

voiddisp()

{

cout<<"n="<<n<<",sum="<<sum<<endl;

}

};

int______=0;

voidmain()

{

Testa(2),b(3),c(5);

a.add();

a.disp();

b.add();

b.disp();

c.add();

c.disp();

}40.以面向对象方法构造的系统,其基本单位是______。41.______要求一个对象应具备明确的功能,并具有接口以便和其他对象相互作用。A.抽象B.封装C.继承D.多态性42.下列有关重载函数的说法中错误的是______A.重载函数必须具有不同的返回值类型B.重载函数名必须相同C.重载函数参数个数可以不同D.重载函数必须有不同的形参列表43.对C++中主函数描述正确的是______A.名称为main,可为多个B.名称不限,可为多个C.名称为main,必须有且只能有一个D.名称不限,必须有且只能有一个44.使用下列哪个流格式控制符可设置转换基数为十六进制______A.decB.octC.hexD.endl45.下列访问成员的方式哪个是正确的______A.对象名.对象成员名B.对象指针名.对象成员名C.对象名->对象成员名D.类名->对象成员名46.classSample{

intnum;

public:

voidset(int);

};

intnunber=num;

voidSample::set(inti){

num=i;

}47.在下面程序中的下划线处填上适当的程序,使程序的输出结果如下:

x=1,y=2

x=30,y=40

源程序如下:

#include<iostream.h>

classSample

{

intx,y;

public:

Sample(){x=y=0;}

Sample(inti,intj){x=i;y=j;}

voidcopy(Sample&s);

voidsetxy(inti,intj){x=i;y=j;}

voidprint(){cout<<"x="<<x<<",y="<<y<<endl;}

};

voidSample::copy(______)

{

x=s.x;y=s.y;

}

voidfunc(______)

{

s1.setxy(10,20);

s2.setxy(30,40);

}

voidmain()

{

Samplep(1,2),q;

q.copy(p);

func(p,q);

p.print();

q.print();

}48.函数fun的返回值是一个整型数据的引用,有两个参数都是int,声明fun函数的原型是______。49.______是一种可视化建模语言,主要用于面向对象分析和建模。50.在下面程序横线处填上适当内容,使程序执行结果为:Y=1,Y=3,Z=5。

#include<iostream.h>

classB

{private:

intY;

public:

B(inty=0){Y=y;}

voidprint(){cout<<"Y="<<Y<<",";}

};

classD:publicB

{private:

Bb;

intZ;

public:

D(intx,inty,intz):B(X),b(y){Z=z;}

voidprint()

{______;//打印基类B中的成员Y

______;//打印类成员b中的Y值

cout<<"Z="<<Z<<endl;

}

};

voidmain()

{Dd(1,3,5);

d.print();

}51.如果在类模板的定义中有一个静态数据成员,则在程序进行中会产生______静态变量。52.插入符“<<”和提取符“>>”的重载必须作为类的______重载。53.定义派生类时,若不使用类关键字显式地规定采用何种继承方式,则默认方式为______继承。54.至少包含一个______函数的类称为抽象类。55.设为类A添加一个纯虚函数Fun,其第一个参数类型为整型,第二个参数类型为字符型,函数返回值类型为整型。实现此操作的语句是______。56.如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生______静态变量。57.下列哪个不是函数重载需要满足的条件

A.返回值类型不同B.参数个数不同C.参数个数相同时,参数类型不同D.函数名相同58.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:

11,10

13,12

#include<iostream.h>

classA

{inta;

public:

A(inti=0){a=i;}

intGeta(){returna;}

voidshow(){cout<<a<<endl;}

};

classB

{Aa;

intb;

public:

B(inti,intj)______

{}

voidshow(){cout<<a.Geta()<<","<<b<<endl;}

};

voidmain()

{Bb[2]={B(10,11),B(12,13)};

for(inti=0;i<2;i++)

______

}59.对于类中的成员,使用protected修饰,表明该成员的访问权限是

A.公有的B.私有的C.保护的D.不可见的60.C++语言的跳转语句中,对于break和continue说法正确的是______A.break语句只应用于循环体中B.continue语句只应用于循环体中C.break是无条件跳转语句,continue不是D.break和continue的跳转范围不够明确,容易产生问题61.C++函数的返回值类型可以是除______和函数以外的任何类型。62.在派生中,访问控制方式没有下列哪种

A.publishB.publicC.protectedD.private63.下述静态成员的特性中,错误的是

A.静态成员函数不能利用this指针B.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符D.静态数据成员不是所有对象所共有的64.C++输入/输出操控符中,含义是输出一个换行符并刷新流的是______。65.#include<iostream.h>

voidmain(){

intx=5;

constint*constp=&x;

*p=88;

cout<<*p<<endl;

}66.有关属于同一个类的所有的对象的属性的描述正确的是______A.属性的个数不必相同B.属性的名称、属性值必须相同C.属性的数据类型必须相同D.属性值不可随着程序的执行而变化67.对象的构造函数调用顺序取决于

A.对象成员在初始化列表中给出的顺序B.对象成员在类中声明的顺序C.对象成员与在初始化列表中顺序和类中声明顺序均有关D.随机顺序68.一个类中是否可以允许一个无参数构造函数和一个全部都是默认参数的构造函数共存

A.不允许B.允许C.无法确定D.视构造函数的函数,可确定69.如果运算符自减1“--”是重载的类成员函数运算符,采用运算符函数调用格式时,该表达式应表示为______。70.在C++语言程序设计中,编程的单位是______。71.C++输入/输出操控符中,含义是设置转换基数为八进制的是______。72.用于标识十六进制前缀或后缀的是______A.无B.后缀L或eC.前缀零D.前缀0x73.在C++中,函数原型不能标识______A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能74.#include<iostream>

usingnamespacestd;

classSample{

public:

Sample(inta=0,intb=1);

voidfun();

private:

intx,y;

}

Sample::Sample(inta=0,intb=1)

{

x=a;y=b;

}

voidSample::fun()

{

cout<<"x="<<x<<",y="<<y<<endl;

}75.基类的公有成员在派生类中的访问权限由______决定。第1卷参考答案一.历年考点试题黑钻版1.参考答案:#include<iostream>

usingnamespacestd;

classcomplex{

public:

complex(){real=imag=0;}

complex(doubler){real=r;imag=0;}

complex(doubler,doublei){real=r;imag=i;}

complexoperator+(constcomplex&c);

friendvoidprint(constcomplex&c);

private:

doublereal,imag;

};

inlinecomplexcomplex::operator+(constcomplex&c)

{returncomplex(real+c.real,imag+c.imag);}

voidprint(constcomplex&c)

{if(c.imag<0)cout<<c.real<<c.imag<<'i';

elsecout<<c.real<<'+'<<c.imag<<'i';}

voidmain(){

complexc1(2.5),c2(3.6,-1.2),c3;

c3=c1+c2;cout<<"c1+c2=";print(c3);

cout<<endl;

}[考点]运算符“+”的重载[解析]采用成员函数的形式对复数加法运算“+”进行运算符重载。complex&c是形参表,c是类complex的引用对象,所以使用对象名。c.real、c.imag代表对象c的数据成员real、imag,用以完成两个复数的加法运算。2.参考答案:obj.f();调用函数f产生歧义,所以应明确指出调用哪个基类的函数。应改为obj.A::f();或者obj.B::f();。3.参考答案:voiclswap(intx,inty)改为voidswap(int&x,int&y)4.参考答案:Base*p=newBase(6);因为基类有纯虚函数,即基类是抽象类,抽象类不能实例化。应改为Base*p;。5.参考答案:<algorithm>[考点]数组操作[解析]使用STL库中的算法,可以实现对数组简单的操作,不过需要在程序源文件中包含头文件<algorithm>。6.参考答案:A[解析]本题主要考查的知识点为C++的标识符。[要点透析]C++的标识符由字母、下划线和数字组成,而且第一个字符不能为数字,故B、D错误。int为关键字,标识符不能与关键字同名,故C错。本题正确答案为A。7.参考答案:virtualint

void8.参考答案:Oct:1449.参考答案:open10.参考答案:D[考点]成员函数的调用[解析]对象使用自己的成员函数的方法格式是:对象名.成员函数。11.参考答案:A[考点]C++标识符[解析]C++标识符以大小写字母或下画线开始,由大小写字母下画线、数字组成。所以只有A项是正确的。12.参考答案:保护继承13.参考答案:B[考点]数组的定义[解析]A、C、D均不符合二维数组的声明,只有B正确。14.参考答案:const[考点]使用const保护数据[解析]C++为了提高系统的自身安全,用const修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。15.参考答案:public(或公有)[考点]定义类[解析]访问权限用于控制对象的某个成员在程序中的可访问性,若类中的函数成员声明为public,则其可供类外部调用。16.参考答案:D[考点]C++中函数重载[解析]函数重载的形参必须不同,或者个数不同或者类型不同(无论函数返回值类型如何)。17.参考答案:C[考点]本题主要考查的知识点为引用作为函数参数。[解析]执行max(a,b)++后,函数返回变量b后加1,即b=11。因为函数参数采用的是引用方式,所以改变的是实参变量b的值。18.参考答案:#include<iostream>

usingnamespacestd;

classBox

{public:

Box(doublel,doublew,doubleh)

{length=l;

width=w;

height=h;}

voidvolume()

{cout<<"volume="<<length*width*height<<endl;}

private:

doublelength,width,height;

};

intmain()

{BOXbox1(1,3,5);

box1.volume();

BOXbox2(2,4,6);

box2..volume();

}[考点]类和对象[解析]C++中声明类的一般形式如下:

Class类名{

private:私有数据和函数

public:公有数据和函数

protected:保护数据和函数

C++中成员函数的定义如下:

返回类型类名::成员函数名(参数列表)

{

成员函数//内部实现

{19.参考答案:实例连接20.参考答案:x(i),y(j)

constA&t21.参考答案:D[考点]向量[解析]向量可以使用构造类型,它提供了四种构造函数,用来定义由各元素组成的列表,所以D选项有误。22.参考答案:x+y

x*y23.参考答案:C24.参考答案:所有成员[考点]C++类的友元函数[解析]友元函数不是当前类的成员函数,是独立于当前类的外部函数,但它可以访问该类的所有成员,包括私有成员、保护成员、公共成员。25.参考答案:A::n=0;语句有误[考点]静态数据成员[解析]静态数据成员需要在类外进行初始化,但这里格式不正确,应该改为intA::n=0;。26.参考答案:运行时的多态性27.参考答案:voidswap(inta,intb)语句有误[考点]引用作为函数参数[解析]可以使用引用作为函数参数,实参对象名传给形参对象名,实参对象和形参对象代表同一个对象,所以改变形参对象的值就是改变实参对象的值。28.参考答案:B[考点]类的成员函数[解析]类成员均有一个访问权限,通过关键字private、public、protected来定义。如果没有使用关键字,则所有成员默认声明为private权限。故选B。29.参考答案:*p=y;p为指向常量的指针,不能将*p作为左值进行操作。可修改为p=&y;。30.参考答案:泛型算法31.参考答案:D[考点]本题主要考查的知识点为内联函数。

[解析]在C++中,除具有循环语句、switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数,其中内联函数的关键字为inline。32.参考答案:s+=fun(i);

staticintb=1;[考点]静态成员[解析]静态成员只声明一次,生存周期是整个程序运行期间,所以每次进行函数调用时,b值为上次保存的值,不再重新定义为1;累计调用fac函数,即可得阶乘的和。33.参考答案:A34.参考答案:D[考点]const对象[解析]constchat*p说明禁止p修改所指向的数据。char*constp则说明不能修改指针p的地址。因此constchar*constp="ABCD";表示既禁止修改指针p本身,又禁止修改p所指向的数据。35.参考答案:A[考点]本题主要考查的知识点为函数返回值作为函数的参数。[解析]函数返回值作为函数的参数,该返回值类型必须与参数的类型一致,B、C、D项正确;sum函数只有两个参数,而A选项有三个参数,参数个数不同,故A项错误。36.参考答案:全局对象37.参考答案:p->k();错误,在类A中无k()函数。可在类A中增加k()函数的定义。38.参考答案:传地址值39.参考答案:sum+=n或sum=sum+n

Test::sum40.参考答案:对象[考点]面向对象方法[解析]面向对象方法是以对象作为构成系统的基本单位,将对象的数据和操作紧密结合。41.参考答案:B[考点]封装[解析]按照面向对象的封装原则,一个对象的属性和操作紧密结合,对象的属性只能由这个对象的操作来存取,所以封装要求一个对象应具备明确的功能,并具有接口以便和其他对象相互作用。42.参考答案:A43.参考答案:C[考点]C++主函数[解析]C++主函数有且只有一个,即为main()函数。故选C。44.参考答案:C[考点]本题主要考查的知识点为操控符的含义。

[解析]dec:设置转换基数为十进制;oct:设置转换基数为八进制;hex:设置转换基数为十六进制;endl:输出一个换行符并刷新流。故本题选C。45.参考答案:A[考点]本题主要考查的知识点为访问对象成员的方式。

[解析]访问对象成员的方式为对象名.对象成员名。46.参考答案:intnumber=num;[考点]类的作用域[解析]在类作用域中声明的标识符只在类中可见。47.参考答案:Sample&s

Samples1,Sample&2或Sample&s2,Samples148.参考答案:int&fun(int,int);49.参考答案:UML[考点]面向对象的标记图[解析]主要用于面向对象分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论