C++程序设计自考题模拟10.docx
《C++程序设计自考题模拟10.docx》由会员分享,可在线阅读,更多相关《C++程序设计自考题模拟10.docx(22页珍藏版)》请在冰豆网上搜索。
![C++程序设计自考题模拟10.docx](https://file1.bdocx.com/fileroot1/2023-2/24/d12f4e20-262d-4549-8994-472ea887f1a2/d12f4e20-262d-4549-8994-472ea887f1a21.gif)
C++程序设计自考题模拟10
C++程序设计自考题模拟10
(总分:
100.00,做题时间:
90分钟)
一、第Ⅰ部分选择题
单项选择题(总题数:
20,分数:
20.00)
1.关于C++主函数的描述,正确的是______
(分数:
1.00)
A.有且只能有一个,名称不限
B.可以有多个,名称不限
C.有且只能有一个,名称为main √
D.可以有多个,名称为main
解析:
[考点]本题主要考查的知识点为C++程序的主函数。
C++程序以.cpp作为文件扩展名,并且必须有一个且只能有一个名为main(不是C++关键字)的主函数。
2.定义析构函数时,说法正确的是______
(分数:
1.00)
A.其名与类名完全相同
B.返回类型是void类型
C.无形参,也不可重载 √
D.函数体中必须有delete语句
解析:
[考点]本题主要考查的知识点为析构函数。
析构函数名是在类名前加求反符号~,A项错误;析构函数不指定返回类型,B项错误;析构函数没有参数,因此析构函数不能重载,C项正确;析构函数函数体中并非必须有delete语句,D项错误。
本题正确答案为C。
3.C++类体系中,不能被派生类继承的有______
(分数:
1.00)
A.常成员函数
B.构造函数 √
C.虚函数
D.静态成员函数
解析:
4.假定一个类的构造函数为A(intaa,intbb){a=aa++;b=a*++bb;},则执行Ax(4,5);语句后,x.a和x.b的值分别为______
(分数:
1.00)
A.4和5
B.4和20
C.4和24 √
D.20和5
解析:
[考点]本题主要考查的知识点为构造函数对数据成员赋值。
执行构造函数给数据成员赋值,语句a=aa++;先将aa赋值给a,再自加1,故a=4。
语句b=a*++bb;先执行a*++bb再赋值给b,故b=a*(5+1)=24。
5.下面对静态成员的描述中,正确的是______
(分数:
1.00)
A.静态数据成员可以在类体内进行初始化
B.静态数据成员不可以被类的对象调用
C.静态数据成员不受private控制符限制
D.静态数据成员可以直接用类名调用 √
解析:
[考点]本题主要考查的知识点为静态数据成员。
静态数据成员不能在类体内进行初始化,A项错误;静态数据成员可以被类的对象调用,B项错误;静态数据成员同类的其他成员一样具有访问权限,C项错误;静态数据成员可以有两种方法访问,类名:
:
静态成员和对象.静态成员,D项正确。
6.使用下列哪个流格式控制符可设置转换基数为八进制______
(分数:
1.00)
A.dec
B.oct √
C.hex
D.endl
解析:
[考点]本题主要考查的知识点为数据的简单输入输出格式。
dec:
设置转换基数为十进制;oct:
设置转换基数为八进制;hex:
设置转换基数为十六进制;endl:
输出一个换行符并刷新流。
7.下列选项中,对类A的析构函数的正确定义是______
(分数:
1.00)
A.A:
:
~A(void) √
B.voidA:
:
~A(参数)
C.A:
:
~A(参数)
D.voidA:
:
~A()
解析:
8.对于int*pa[5];的描述,正确的是______
(分数:
1.00)
A.pa是一个指向数组的指针,所指向的数组是5个int型元素
B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量
C.pa[5]表示某个数组的第5个元素的值
D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针 √
解析:
9.关于new运算符的描述中,错误的是______
(分数:
1.00)
A.它可以用来动态创建对象和对象数组
B.使用它创建的对象或对象数组可以使用运算符delete删除
C.使用它创建对象时要调用构造函数
D.使用它创建对象数组时必须指定初始值 √
解析:
[考点]本题主要考查的知识点为new运算符。
new创建对象数组时不能指定初始值,D项错误。
10.下列给字符数组进行初始化中,正确的是______
(分数:
1.00)
A.chars1[]="/n";
B.chars2[3]="xyz";
C.chars3[][3]={"a","x","y"}; √
D.chars4[2,4]={"xyz","mnp"};
解析:
[考点]本题主要考查的知识点为字符数组初始化。
A项s1是字符数组,不是字符;B项数组长度不够,因为字符串最后的结束符占一个字节,所以应定义s2长度为4;D项表示方法不对,所以选择C项。
11.将一个函数声明为内联函数时所使用的关键字为______
(分数:
1.00)
A.signed
B.short
C.const
D.inline √
解析:
[考点]本题主要考查的知识点为内联函数。
在C++中,除具有循环语句、switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数,其中内联函数的关键字为inline。
12.若有以下定义,则说法错误的是______
inta=100,*p=&a;
(分数:
1.00)
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整型变量
D.变量p的值为100 √
解析:
13.在函数定义中的形参属于______
(分数:
1.00)
A.全局变量
B.局部变量 √
C.静态变量
D.寄存器变量
解析:
14.下列说法中正确的是______
(分数:
1.00)
A.所有的运算符都能被重载
B.运算符被重载时,它们的优先级与结合性不会改变 √
C.当需要时,我们可以自定义一个运算符来进行重载
D.每个运算符都可以被重载成成员函数和友元函数
解析:
[考点]本题主要考查的知识点为运算符重载。
运算符.、.*、->*、:
:
、?
:
不能被重载;运算符重载是针对C++中原有运算符进行的,不能通过重载创造出新的运算符;=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,故A、C、D项错误,B项正确。
15.对于类中的成员,使用protected修饰,表明该成员的访问权限是______
(分数:
1.00)
A.公有的
B.私有的
C.保护的 √
D.不可见
解析:
16.析构函数的参数个数为______
(分数:
1.00)
A.0个 √
B.1个
C.至少1个
D.多于1个
解析:
[考点]本题主要考查的知识点为析构函数。
析构函数没有参数,本题选A。
17.基类的protected成员,通过protected派生,其在派生类中为______
(分数:
1.00)
A.public
B.private
C.protected √
D.不可访问
解析:
[考点]本题主要考查的知识点为基类成员在派生类中的访问权限。
基类的protected成员,通过公有派生或保护派生,其在派生类中为protected;通过私有派生,其在派生类中为private。
18.下列哪个编译指令不属于条件编译指令______
(分数:
1.00)
A.#if
B.#else
C.#endif
D.#error √
解析:
[考点]本题主要考查的知识点为条件编译指令。
条件编译指令是#if、#else、#elif和#endif,其中#endif表示一条指令结束。
编译指令#if用于控制编译器对源程序的某部分有选择地进行编译。
编译指令#else在#if测试失效的情况下建立另外一种选择。
19.有关多态性说法不正确的是______
(分数:
1.00)
A.C++语言的多态性分为编译时的多态性和运行时的多态性
B.编译时的多态性可通过函数重载实现
C.运行时的多态性可通过模板和虚函数实现 √
D.实现运行时多态性的机制称为动态多态性
解析:
20.友元关系不能______
(分数:
1.00)
A.提高程序的运行效率
B.是类与类的关系
C.是一个类的成员函数与另一个类的关系
D.继承 √
解析:
二、第Ⅱ部分非选择题
填空题(总题数:
20,分数:
20.00)
21.一个const对象只能访问1成员函数。
(分数:
1.00)
解析:
常
22.如果一个引用不是用作函数参数或返回值,则在说明该引用时必须对它进行1。
(分数:
1.00)
解析:
初始化
23.A是一个类,已有语句“A*p;p=newA[10];”,要释放由p指向的动态空间,正确的语句应该是1。
(分数:
1.00)
解析:
delete[]p;
24.定义1函数时,应在参数个数或参数类型上有所不同。
(分数:
1.00)
解析:
重载
25.将指向对象的引用作为函数的形参,形参是对象的引用,实参是1。
(分数:
1.00)
解析:
对象名
26.在编译指令中,宏定义使用1指令。
(分数:
1.00)
解析:
#define
27.如果要把类B的成员函数voidfun()说明为类A的友元函数,则应在类A中加入语句1。
(分数:
1.00)
解析:
friendvoidB:
:
fun();
28.如果一个派生类只有一个唯一的基类,则这样的继承关系称为1。
(分数:
1.00)
解析:
单一继承
29.在保护派生中,基类权限为public的成员在派生类中为1。
(分数:
1.00)
解析:
保护类型
30.若函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的1语句。
(分数:
1.00)
解析:
声明
31.如果要把PI声明为值为3.14159的双精度实数的符号常量,该声明语句是1。
(分数:
1.00)
解析:
constdoublePI(3.14159);或者constdoublePI=3.14159;
32.在C++中要创建一个文件输入流对象fin,同时该对象打开文件“Test.txt”用于输入,则正确的声明语句是1。
(分数:
1.00)
解析:
ifstreamfin("Test.txt");
33.已知有20个元素的int型向量V1,若用V1初始化向量V2,语句是1。
(分数:
1.00)
解析:
vector<int>V2(V1);
34.若类的成员函数用关键字static进行修饰,这样的成员函数称为1。
(分数:
1.00)
解析:
静态成员函数
35.C++中能提供封装的关键字是1。
(分数:
1.00)
解析:
class
36.C++中有两种继承方式:
单一继承和1。
(分数:
1.00)
解析:
多重继承
37.类模板用来表达具有1的模板类对象集。
(分数:
1.00)
解析:
相同处理方法
38.预处理命令以1符号开头。
(分数:
1.00)
解析:
#
39.在C++中,利用向量类模板定义一个具有10个int的向量A,其元素均被置为1,实现此操作的语句是1。
(分数:
1.00)
解析:
vector<int>A(10,1);
40.类是用户定义的类型,具有类类型的变量称作1。
(分数:
1.00)
解析:
对象
三、改错题(总题数:
5,分数:
20.00)
41.下面程序实现数值、字符串的交换。
#include<iostream>
#include<string>
usingnamespacestd;
template<classT>
voidSwap(T&a,T&b)
{Ttemp;
temp=a;a=b;b=temp;
}
voidmain()
{inta=5,b=9;
chars1[]="Hello",s2[]="hi";
Swap(a,b);
Swap(s1,s2);
cout<<"a="<<a<<",b="<<b<<endl;
cout<<"s1="<<s1<<",s2="<<s2<<endl;
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
chars1[]="Hello",s2[]="hi";使用Swap(s1,s2)调用交换的是地址。
字符指针作实参,形参值发生改变,实参也就发生变化。
应改为char*s1="Hello",*s2="hi";。
42.#include<iostream>
classB
{inta,b;
constintc;
public:
B(inti=0,intj=0){a=i;b=j;c=i-j;}
};
voidmain()
{Ba,b(3,5);
Bx=a,z(5,9);
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
B(inti=0,intj=0){a=i;b=j;c=i-j;}c是常数据成员,必须在构造函数初始化列表中进行初始化。
应改为B(inti=0,intj=0):
c(i-j){a=i;b=j;}。
43.#include<iostream.h>
classfract
{private:
intden;
intnum;
public:
fraet(intd=0,intn=1):
den(d),num(n){}
friendfract&operator+=(fract&,fract&);
voidshow(){cout<<den<<"/"<<num;}
};
friendfract&operator+=(fract&f1,fract&t2)
{f1.den=f1.den*f2.num+f1.num*f2.den;
f1.num*=f2.num;
returnf1;
}
voidmain()
{fraetfr(3,4);
fr+=fract(5,7);
fr.show();
cout<<endl;
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
friendfract&operator+=(fract&f1,fract&f2)定义函数时,不能用friend修饰。
应改为fract&operator+=(fract&f1,fract&t2)。
44.#include<iostream.h>
classA
{private:
intx;
protected:
inty;
public:
A(inti,intj){x=i;y=j;}
};
classB:
publicA
{public:
B(inta,intb):
A(a,b){}
voidshow(){cout<<x<<","<<y<<endl;}
};
voidmain()
{Bb(8,9);
b.show();
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
private:
x在基类中是私有成员,采用公有派生时,在派生类无法访问。
应改为public:
或protected:
。
45.#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();
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
Base*p=newBase(6);因为基类有纯虚函数,即基类是抽象类,抽象类不能实例化。
应改为Base*p;。
四、完成程序题(总题数:
5,分数:
20.00)
46.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
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++)
______
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
:
a(j),b(i)b[i].show();
47.#include<iostream.h>
#include<stdlib.h>
classarr
{______
ints;
public:
arr(inta[],intn)
{v=a;
s=n;
}
intsize(){returns;}
int&operator()(intn);
};
______()(intn)
{if(n>s)
{cerr<<"下标越界!
"<<endl;
exit____;
}
returnv[n];
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
int*v;int&arr:
:
operator
48.输出数组中的最小数。
#include<iostream.h>
voidmain()
{inta[]={34,91,83,56,29,93,56,12,88,72};
intindex=0;
int______/sizeof(*a);
for(inti=1;i<n;i++)
{if(a[index]>a[i])
______
}
cout<<"a数组最小数:
"<<a[index]<<endl;
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
n=sizeof(a)
index=i;
49.下面程序中Base是抽象类。
请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
Der1called!
Der2called!
#include<iostream.h>
classBase
{public:
______;
};
classDer1:
publicBase
{public:
voiddisplay(){cout<<"Der1called!
"<<endl;
};
classDer2:
publicBase
{public:
voiddisplay(){cout<<"Der2called!
"<<endl;
};
voidfun(______)
{p->display();}
voidmain()
{Der1b1;
Der2b2;
Base*p=&b1;
fun(p);
p=&b2;
fun(p);
}
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
()
解析:
virtualvoiddisplay()=0Base*p
50.下面程序中用来求数组和。
请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
s=150。
#include<iostream.h>
classArr
{int*a,n;
public:
Arr():
a(0),n(0){}
Arr(int*aa,intnn)
{n=nn;
a=newint[n];
for(inti=0;i<nn;i++)
*(a+i)=*(aa+i);
}
~Arr(){deletea;}
______
{return*(a+i);}
};
voidmain()
{intb[5]={10,20,30,40,50};
Arra1(b,5);
int