2023年自考类计算机类(工学类)C++程序设计历年高频考题带答案难题附详解_第1页
2023年自考类计算机类(工学类)C++程序设计历年高频考题带答案难题附详解_第2页
2023年自考类计算机类(工学类)C++程序设计历年高频考题带答案难题附详解_第3页
2023年自考类计算机类(工学类)C++程序设计历年高频考题带答案难题附详解_第4页
2023年自考类计算机类(工学类)C++程序设计历年高频考题带答案难题附详解_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2023年自考类计算机类(工学类)C++程序设计历年高频考题带答案难题附详解(图片大小可自由调整)第1卷一.历年考点试题黑钻版(共50题)1.对于int*pa[5];的描述,正确的是______A.pa是一个指向数组的指针,所指向的数组是5个int型元素B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量C.pa[5]表示某个数组的第5个元素的值D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针2.函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为

A.1B.2C.4D.53.设要把一个文件输出流对象outfile与文件“d:\Text.txt”相关联,设置以二进制形式打开。所用的C++语句是______。4.对象之间以______传递的方式进行通信。5.文件流类的______成员函数的功能是打开一个文件。6.下列关于虚函数的叙述错误的是______A.虚函数只是类中的一个成员函数B.虚函数可以是类的静态成员C.当基类定义了虚函数,派生类中同名函数也自动为虚函数D.虚函数用关键字virtual声明7.#include<iostream>

usingnamespacestd;

classA

{private:

intden;

intnum;

public:

A(intd=0,intn=1):den(d),num(n){}

friendA&operator+=(A&,A&);

voidshow(){cout<<den<<'/'<<num;}

};

friendA&operator+=(A&f1,A&f2)

{f1.den=f1.den*f2.hum+f1.num*f2.den;

f1.num*=f2.num;

returnf1;

}

voidmain()

{Afr(3,4);

fr+=A(5,7);

fr.show();

cout<<endl;

}8.设intx=56;intr=x;若cout<<&x;显示0012FFTA,则cout<<&r;输出值为______A.56B.0012FF7AC.0012FF7BD.未知9.下面说法正确的是______A.生成对象时调用析构函数B.定义类时必须写出该类的构造函数C.调用构造函数时必须在主函数中明确写出调用格式D.析构函数不可以重载10.下列叙述中,错误的是______A.bad()函数功能表示如果进行非法操作,返回ture,否则返回falseB.ios_base::in打开文件用于输入(输入流的打开模式)C.ios_base::ate打开一个已有的输入或输出文件并查找到文件尾D.ios_base::out打开文件进行读操作11.在类中声明const数据成员时,只能通过______的方式来对该成员进行初始化。12.classpoint{

private:

intx,y;

public:

point(int,int);

point(point&);

};

point::point(inta,intb)

{

x=a;

______=b;

}

point::point(______)

{

x=z.x;

y=z.y;

}

voidmain(){

pointp1(2,3);

pointp2(p1);

}13.类的私有成员可在何处访问

A.通过子类的对象访问B.本类及子类的成员函数中C.通过该类对象访问D.本类的成员函数中14.派生类可以定义其______中不具备的数据和操作。15.intFunc(int,int);不可与下列哪个函数构成重载

A.intFunc(int,int,int);B.doubleFunc(int,int);C.doubleFunc(double,double);D.doubleFunc(int,double);16.在C++中,可将多态性分为:编译时的多态性和______。17.实现两个相同类型数加法的函数模板的声明是______A.add(Tx,Ty)B.Tadd(x,y)C.Tadd(Tx,y)D.Tadd(Tx,Ty)18.判断流对象是否成功地与文件关联的函数是______A.fail()B.clear()C.is_open()D.eof()19.定义派生类时,若不使用类关键字显式地规定采用何种继承方式,则默认方式为______继承。20.重载++运算符,执行后缀操作n++。

#include<iostream>

usingnamespacestd;

classnumber{

intnum;

public:

number(inti){num=i;}

friendintoperator++(number,int);

voidprint(){cout<<"num="<<num<<endl;}

};

intoperator++(numberaint)

{

inti=a.num++;

returni;

}21.重载的运算符的实质是保持其原有的运算符个数、______不变。22.类的构造函数可以重载,类的析构函数______重载。23.对于指针p,禁止修改指针p,也禁止修改指向的数据,这样的指针应定义为______A.constchar*p="ABCD";B.char*constp="ABCD";C.charconst*p="ABCD";D.constchar*constp="ABCD";24.已知类AB,假定用户为类AB定义了一个构造函数"AB(intaa){a=aa;}",该构造函数实现对数据成员______的初始化。25.以下程序实现交换a,b变量的值,请用下横线标出错误所在行并给出修改意见。

#include<iostream.h>

voidswap(int&a,int&b)

{a=a+b;

b=a-b;

a=a-b;

voidmain()

{inta=19,b=15;

cout<<"a="<<a<<",b="<<b<<endl;

swap(&a,&b);

cout<<"a="<<a<<",b="<<b<<endl;

}26.已知类base,"base*abc()const;"是该类中一个成员函数的原型,在该函数体中______(能够/不能够)向*this或其成员赋值。27.如果调用函数时,需要改变实参或者返回多个值,应该采取______方式。28.下列选项中,与实现运行时多态性无关的是______A.函数重载B.虚函数C.指针D.引用29.完成下面程序中的show函数的定义,使其运行结果如下:

Inbase

Inderived

程序清单如下:

#include______

usingnamespacestd;

classbase

{

public:

virtualvoidprint()

{

cout<<"Inbase"<<endl;

}

};

classderived:publicbase

{

public:

voidprint(){cout<<"Inderived"<<endl;}

};

voidshow(base*pb,void(base::*pf)())

{

______

}

voidmain()

{

baseb;

derivedd;

show(&b,base::print);

show(&d,base::print);

}30.用______修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。31.调用声明为intprint(inta,intb);的函数时,正确的方法是______A.print(0.5,0.8);B.print(2);C.print(1,2);D.print(1,2,3);32.在字符串类string中实现一个判断函数,该函数功能是统计某一字符串类对象(仅由单词和空格组成)有多少个单词,同时保存所有单词在字符串中的起始地址(设该字符串不超过100个单词)

#include<iostream.h>

#include<string>

classstr{

strings;intn,a[100],j,1;

public:str(string&a){s=a;n=0;j=0;l=0;}

....test(....);

int*geta(){returna;}

};

请写出test函数的过程(如果需要形式参数,请给出形参类型和数量以及返回值类型)33.假设inta=1,b=2;则表达式(++a/b)*b--的值为______。34.在面向对象的程序设计中,通过封装实现数据隐藏;通过______实现代码的复用。35.静态成员函数是______的成员,不是对象的成员。36.C++预处理语句不包括______A.宏定义B.文件包含C.条件编译D.命名空间37.所谓“引用”就是将一个新标识符和一块已经存在的______相关联,通常用于函数的参数表中或者作为函数的返回值。38.语句ofstreamf("TEMP.DAT",ios::app|ios::binary);的功能是建立流对象f,试图打开文件TEMP.DAT并与之连接,并且

A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件39.对象是对问题域中客观事物的抽象,它是一组属性和在这些属性上操作的______。40.C++程序的编译是以______为单位进行的。41.C++的类中,是否允许定义函数______A.仅允许定义构造函数B.允许C.不允许定义构造函数D.不允许42.UML中实例连接反映对象之间的静态关系,消息连接描述对象之间的______关系。43.设函数sum是由函数模板实现的,并且sum(3,6)和sum(4.6,8)都是正确的函数调用,则函数模板具有______个类型参数。44.C++中只有两个布尔常量:true和______。45.#include<iostream>

usingnamespacestd;

voidmain(){

stringstr1("wearehere");

cout<<str1<<endl:

}46.以下叙述错误的是______A.基类的保护成员在公有派生类中仍然是保护成员B.基类的保护成员在派生类中仍然是保护成员C.基类的保护成员在私有派生类中是私有成员D.基类的保护成员在私有派生类中能够被访问47.已有复数类Complex和主函数main(),编写一个类Root来实现求解一元二次方程的程序。

#include<iostream.h>

#include<iomanip.h>

#include<math.h>

classComplex

{public:

Complex(){}

voidsetC(doublei,doublej)

{real=i;image=j;}

voidshow();

protected:

doublereal,image;

};

voidComplex::show()

{cout<<"("<<real<<","<<image<<"i)"<<endl;}

voidmain()

{doublea,b,c;

cout<<"\n请输入一元二次方程的系数a,b,c:";

cin>>a>>b>>c;

Rootroot(a,b,c);

root.solve();

}48.定义复数类complex,采用成员函数的形式对复数加法计算“+”进行运算符重载。49.输入一行字符,按输入字符的反序建立一个字符结点的单向链表,并输出该链表中的字符。

#include<iostream>

usingnamespacestd;

structnode

{charch;

node*next;};

voidshow(node*head);

intmain()

{node*head,*p;

charc;

head=NULL;

while((c=getchar())!='\n')

//输入一行字符

{______//建立新结点

p->ch=c;

p->next=head;

//插入表头

head=p;

}

show(head);}

voidshow(node*head)

//输出链表

{node*p=head;

cout<<"链表中的字符是:\n";

while(p)

{cout<<p->ch;

______}

cout<<endl;

}50.给出下面程序的输出结果

#include<iostream>

usingnamespacestd;

template<classT>

TF(Tx)

{

returnx>5;

}

voidmain()

{

inta=15;

cout<<F(a)<<"\n";

doubleb=-5.8976;

cout<<F(b)<<"\n";

cout<<F(5)<<"\n";

}第1卷参考答案一.历年考点试题黑钻版1.参考答案:D2.参考答案:B[解析]本题主要考查的知识点为表达式的值作为函数参数。[要点透析](exp1,exp2)、(exp3,exp4,exp5)表示是两个逗号表达式,相当于两个参数,因此实参的个数是2。3.参考答案:outfile.open("d:\Text.txt",ios_base::out|ios_base::binary);4.参考答案:消息[考点]对象、类、消息[解析]对象之间以消息传递的方式进行通信。5.参考答案:open6.参考答案:B[考点]C++虚函数的定义[解析]当基类定义了虚函数,派生类中同名函数也自动为虚函数,虚函数只是类中的一个成员函数,但不能是类的静态成员,关键字virtual用于类中该函数的声明。7.参考答案:friendA&operator+=(A&f1,A&f2)有误[考点]运算符重载[解析]定义函数时,不能用friend修饰。应该改为A&operator+=(A&f1,A&f2)。8.参考答案:D[考点]本题主要考查的知识点为取地址运算符&。

x和r为两个整型变量,它们的值都为56,但语句cout<<&x;输出的为变量x的地址,而语句cout<<&r;输出的为变量r的地址,故本题选D。9.参考答案:D[解析]从函数重载角度分析,一个类只能定义一个析构函数且不能指明参数,以便编译系统自动调用。10.参考答案:D[考点]本题主要考查的知识点为文件的打开方式。[解析]ios_base::out是打开文件进行写操作,D项错误。11.参考答案:初始化列表12.参考答案:y

point&z13.参考答案:D[解析]主要考查的知识点为类的私有成员。[要点透析]类的私有成员在派生类中是隐藏的,只能在基类的成员函数中访问。14.参考答案:基类15.参考答案:B[解析]主要考查的知识点为函数重载。[要点透析]不能以形参名来区分函数;不能以函数返回值来区分函数。必须是形参的个数或者类型不同才能构成函数重载。16.参考答案:运行时的多态性17.参考答案:D[考点]本题主要考查的知识点为函数模板。

实现两个相同类型数的加法,结果应该和操作数具有相同类型。A项无返回值要用void;B项形参无类型,C项形参y没有类型,所以选择D项。18.参考答案:C[考点]错误处理函数[解析]clear()用来设置内部错误状态;eof()用来检测提取操作符是否已经到达文件尾;is_open()判断流对象是否成功地与文件关联;fail()在进行的操作失败时返回false,否则返回true。19.参考答案:私有20.参考答案:friendintoperator++(number,int);intoperator++(numberaint)友元函数的声明和定义有错[考点]友元运算符的重载[解析]使用友元运算符重载“++”运算符,因为“++”运算符需要修改操作数,所以必须使用引用参数,friendintoperator++(number&,int);intoperator++(number&aint);。21.参考答案:优先级和结合性[考点]运算符重载[解析]重载的运算符保持原有的运算符个数、优先级和结合性不变。22.参考答案:不可以23.参考答案:D[考点]const对象[解析]constchat*p说明禁止p修改所指向的数据。char*constp则说明不能修改指针p的地址。因此constchar*constp="ABCD";表示既禁止修改指针p本身,又禁止修改p所指向的数据。24.参考答案:a[考点]构造函数[解析]C++中定义构造函数,是为了实现对对象的初始化,AB(intaa){a=aa;},实现的是对数据成员a的初始化。25.参考答案:swap(&a,&b);函数的形参是变量的引用,调用时的实参应该是地址。应改为swap(a,b);。26.参考答案:不能够[考点]const对象[解析]const对象只能调用const函数,不能调用非const成员函数。27.参考答案:传地址值28.参考答案:A[考点]本题主要考查的知识点为运行时的多态性。

[解析]函数重载体现的是编译时的多态性,本题选A。29.参考答案:<iostream>

(pb->*pf)();30.参考答案:const[考点]使用const保护数据[解析]C++为了提高系统的自身安全,用const修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。31.参考答案:C[考点]本题主要考查的知识点为函数的调用。

函数调用时,实参的个数及类型要与函数声明时的参数个数及类型保持一致,所以本题中函数调用时实参个数须为2个且都是整型的,故选C。32.参考答案:inlinevpidstr::test()

{

intk=0

for(inti=0;i<s.size();++i)

{

if(s[i]==''&&i!=0)

//出现空格且空格不在字符串的首位置

{

a[n]=k;

//数组a[]记录单词的起始地址

n++;

//单词个数加1

k=i+1;

//k指向下个单词的起始位置

}

}

if(s[s.size()-1]!=")

//最后一个字符不是空格时,需单独统计最后一个单词

{

a[n]=k;

n++;

}

}[解析]本题是让设计一个统计字符串单词个数的函数,并记录每个单词的起始地址。可用n记录单词的个数,数组a[]记录有单词的起始地址。对于一个仅有单词和空格的字符串,用空格来区分各个单词。遍历字符串,当出现空格时,表明出现一个单词,则n加1,并记录该单词的起始地址。但要考虑一些特殊情况:如果字符串首位置出现空格,此时该空格前是没有单词的,是不用统计的;如果字符串末位置出现空格,表明已经将最后一个单词统计进去了,若末位置不是空格,说明最后一个单词为统计,此时需要将其单独统计。33.参考答案:234.参考答案:继承[考点]继承[解析]继承是一个类可以获得另一个类的特性的机制,实现了代码的复用。35.参考答案:类36.参考答案:D[考点]C++预处理程序[解析]C++预处理语句有三种,分别是宏定义、文件包含、条件编译。37.参考答案:存储区域38.参考答案:A[解析]本题主要考查的知识点为文件的打开方式。[要点透析]ios::binary:指定文件以二进制方式打开,默认为文本方式;ios::app:打开文件以便在文件的尾部添加数据。39.参考答案:封装体[考点]类和对象[解析]对象就是一类物体的实例,组成对象的不仅可以有数据,而且有对数据进行操作的函数。40.参考答案:文件[考点]程序的编辑、编译、和运行[解析]C++语言写成的源程序文件,经过编译、连接生成可执行文件,所以C++程序的编译是以文件为单位进行的。41.参考答案:B[考点]定义类[解析]类不仅可以有数据,而且可以有对数据进行操作的函数,不仅包括构造函数。42.参考答案:动态[考点]类和对象的UML标记图[解析]UML中实例连接反应对象之间的静态关系,消息连接捕述对象之间的动态关系。43.参考答案:2[考点]函数模板[解析]sum(3,6)两个参数都是int类型,sum(4.6,8)两个参数是两个类型。所以函数模板具有两个类型参数。44.参考答案:false[考点]新的数据类型[解析]C++语言比C语言多了布尔型,其值有两个:true和false。45.参考答案:stringstr1没有加头文件<string>46.参考答案:B[考点]本题主要考查的知识点为基类的保护成员在派生类中的访问权限。[解析]基类的保护成员在派生类中的访问权限是由派生方式决定的。如果是私有派生,则其在派生类中是私有的;如果是公有或保护派生,则其在派生类中是保护的。47.参考答案:完整的程序如下:

classRoot

{public:

Root(doublei,doublej,doublek)

{a=i,b=j,c=k;}

voidshow();

voidsolve();

protected:

doublea,b,c;

};

voidRoot::show()

{cout<<"方程";

cout<<a;

cout<<setiosflags(ios::showpos);

cout<<"*x*x":

cout<<b<<"*x";

cout<<c<<"=0\n";

cout<<resetiosflags(ios::showpos);

}

voidRoot::solve()

{show();

doublex=-b/2/a;

cout<<"的解是:\n";

doubledt=b*b-4*a*c;

Complexc1,c2;

if(fabs(dt)<1e-5)

{c1.setC(x,0),c2.setC(x,0);

cout<<"\nx1=x2=":

c1.show();

}

温馨提示

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

评论

0/150

提交评论