面向对象程序设计期末针对性训练Word格式文档下载.docx
《面向对象程序设计期末针对性训练Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计期末针对性训练Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
”,要将pv值赋给pc,则正确的赋值语句是pc=(___________)pv。
8.一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。
9.假定用户为类AB定义了一个构造函数“AB(intaa):
a(aa){}”,则__________是该类的数据成员。
10.在多文件结构的程序中,通常把含有main()函数的文件称为该程序的________。
三、程序填充题,根据题意在横线上填写合适的内容。
(每小题6分,共24分)
1.采用辗转相除法求出两个整数的最大公约数。
#include<
iostream.h>
voidmain()
{
inta,b。
cout<
<
"
请输入两个正整数:
。
cin>
>
a>
b。
while(a<
=0||b<
=0){cout<
重新输入:
}
while(b){
intr。
r=a%b。
______________。
______________。
//分别修改a和b的值
}
a<
endl。
//输出最大公约数
2.用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。
voidsort(char*table[],intsize){
for(inti=1。
i<
size。
i++){
char*p=table[i]。
for(intj=i-1。
j>
=0。
j--)
if(strcmp(p,table[j])<
0)table[j+1]=___________。
elsebreak。
table[j+1]=__________。
3.类A的定义
classA{
char*a。
public:
A(){a=NULL。
}//定义无参构造函数,使a为空指针
A(char*aa){
a=__________char[strlen(aa)+1]。
strcpy(a,aa)。
//用aa所指字符串初始化a所指向的动态存储空间
__________________//定义析构函数,删除a所指向的动态存储空间
}。
4.类Goods的定义
class
{
private:
charName[20]。
//商品名称
intWeight。
//商品重量
staticinttotalWeight。
//同类商品总重量
Goods(char*str,intw){//构造函数
strcpy(Name,str)。
Weight=w。
totalWeight+=Weight。
~Goods(){totalWeight-=Weight。
char*GetN(){__________________。
}//返回商品名称
intGetW(){returnweight。
staticintGetTotalWeight(){//定义静态成员函数返回总重量
____________________。
四、理解问答题,分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。
1.#include<
constintT=6。
voidmain()
inti,j,k=0。
for(i=1。
i<
=T。
i+=2){
for(j=2。
j<
j+=2)k++。
cout<
”k=”<
k<
运行结果:
2.#include<
classCE{
private:
intgetmax(){return(a>
b?
a:
b)。
public:
intc。
voidSetValue(intx1,intx2,intx3){
a=x1。
b=x2。
c=x3。
intGetMax()。
}。
intCE:
:
GetMax(){
intd=getmax()。
return(d>
c?
d:
c)。
intx=5,y=12,z=8。
CEex。
ex.SetValue(x,y,z)。
ex.GetMax()<
运行结果:
3.#include<
inti,p=1。
intN。
输入一个正整数:
N。
for(i=1。
=N。
i++)p*=i。
”N!
=”<
p<
程序功能:
4.intf(char*s)
inti=0。
while(*s++)i++。
returni。
函数功能:
五、编程题(每小题6分,共12分)
1.编写一个函数,分别求出由指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组b的相应元素中,该函数的原型声明如下:
voidfun(char*a,intb[])。
2.根据下面类中CompareBig函数成员的原型和注释写出它的类外定义。
classAA{
int*a。
intn。
intMS。
voidInitAA(intaa[],intnn,intms){
if(nn>
ms){cout<
Error!
exit
(1)。
MS=ms。
n=nn。
a=newint[MS]。
for(inti=0。
n。
i++)a[i]=aa[i]。
intCompareBig(AA&
b)。
//比较*this与b的大小,从前向后按两数组
//中的对应元素比较,若*this中元素值大则返回1,若b中
//元素值大则返回-1,若相等则继续比较下一个元素,直到
//一个数组中无元素比较,此时若两者的n值相同则返回0,
//否则若*this中的n值大则返回1,若b中的n值大则返回-1。
答案供参考
1.C2.C3.B4.A5.B
6.D7.C8.B9.A10.A
1./*2.353.相同4.195.文件
6.数组名7.char*8.析构9.a10.主文件
评分标准:
每空3分
1.a=b、b=r
2.table[j]、p
3.new、~A(){delete[]a。
4.returnName、returntotalWeight
1.k=9
2.12
3.计算并输出N阶乘的值,其中N值由键盘输入。
4.求出并返回字符指针参数s所指向的字符串长度。
评分标准:
按编程完整程度酌情给分。
1.voidfun(char*a,intb[])
inti。
for(i=0。
10。
i++)b[i]=0。
//2分
while(*a){
intj=*a-’0’。
if(j>
=0&
j<
=9)b[j]++。
a++。
}//6分
2.intAA:
CompareBig(AA&
b)
intk。
if(n>
b.n)k=b.n。
elsek=n。
//1分
k。
i++)
if(a[i]>
b.a[i])return1。
elseif(a[i]<
b.a[i])return-1。
//3分
if(k==n&
k==b.n)return0。
//4分
elseif(k<
n)return1。
elsereturn-1。
//6分
训练第二套
1.字符串”a+b=12\n”的长度为()。
A.6B.7C.8D.9
”,则元素a[2][1]的值为()。
A.0B.4C.8D.6
3.以下正确的描述是()。
A.函数的定义可以嵌套,函数的调用不可以嵌套
B.函数的定义不可以嵌套,函数的调用可以嵌套
C.函数的定义和函数的调用均可以嵌套
D.函数的定义和函数的调用均不可以嵌套
4.设有定义“doublearray[10]。
”,则表达式sizeof(array)/sizeof(array[0])的结果为array数组的()。
A.首地址B.元素个数
C.每个元素所占的字节数D.总字节数
5.若使p指向包含30个整型元素的动态数组空间,则使用的定义语句为()。
A.int*p=newint[30]。
B.int*p=newint(30)。
C.int*p=new[30]。
D.*p=newint[30]。
6.软件产品与其他软件产品组合成一个整体的难易程度叫做软件的()。
7.在多文件结构的程序中,通常把类的声明单独存放于()中。
A.主文件B.实现文件C.库文件D.头文件
8.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为()。
A.first+1B.(first+1)%MS
C.(first-1)%MSD.(first+length)%MS
9.假定一个类的构造函数为“A(intaa=1,intbb=0){a=aa。
b=bb。
}”,则执行“Ax(4)。
A.1和0B.1和4C.4和1D.4和0
10.假定AB为一个类,则执行“ABa
(2),b[3],*p[4]。
A.3B.4C.5D.9
二、填空题(每小题2分,共20分)
1.用于输出表达式值的标准输出流对象是____________。
2.假定x=5,y=6,则表达式x--*--y的值为__________。
3.假定x是一个逻辑量,则x||true的值为__________。
4.C++提供的预处理命令有宏定义命令,条件编译命令和____________命令。
5.假定a是一个一维数组,则a[i]的指针访问方式为________。
6.变量v定义为“doublev=23.4。
”,要使指针pv指向v,则定义pv的语句为______________。
7.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上________和两个冒号分隔符。
8.若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的x对象。
9.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为__________。
10.假定用户只为类AB定义了一个构造函数"
AB(intaa,intbb=0){a=aa。
}"
,则定义该类的对象时,其实参表中至多带有_________个实参。
1.下面函数是求两个整型参数a和b的最小公倍数。
intf2(inta,intb)
inti=2,p=1。
do{
while(a%i==0&
____________){
p*=i。
a/=i。
b/=i。
i++。
}while(a>
=i&
____________)。
returnp*a*b。
2.对数组a中的元素按相反次序重新排列。
voidPV(inta[],intn)
n/2。
i++){
intx=a[i]。
____________________。
3.假定有定义为“structNODE{intdata。
NODE*next。
”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。
NODE*f8(NODE*L)
if(L==NULL)returnNULL。
NODE*p=NULL,*q=L,*t。
//p为新链表的表头指针,初始值为空
while(q!
=NULL){
t=q。
q=q->
next。
t->
next=__________。
p=__________。
returnp。
4.类A的定义
int*a。
intn。
intMaxLen。
A():
a(0),n(0),MaxLen(0){}//无参构造函数
A(int*aa,intnn,intMM){//带参构造函数
MaxLen=MM。
MaxLen)exit
(1)。
a=newint[MaxLen]。
i++)____________。
//利用数组aa给数组a赋值
~A(){______________。
}//释放动态存储空间
intGetValue(inti){returna[i]。
}//函数体返回a[i]的值
1.#include<
constintB=2。
intp=1,s=1。
while(s<
50){
p*=B。
s+=p。
s="
s<
2.#include<
intgetmin(){return(a<
intGetMin()。
GetMin(){
intd=getmin()。
return(d<
CE*ep=newCE。
ep->
SetValue(x+y,y-z,10)。
ep->
GetMin()<
3.intff(intx,inty,charop){
intz。
switch(op){
case'
+'
x<
'
y<
='
z。
if(x+y==z)return1。
elsereturn0。
break。
-'
if(x-y==z)return1。
*'
if(x*y==z)return1。
/'
if(x/y==z)return1。
default:
运算符错,退出!
函数功能:
4.char*f(char*s){
intn=strlen(s)。
char*r=newchar[n+1]。
if(s[i]>
a'
&
s[i]<
z'
)r[i]=s[i]-'
A'
elser[i]=s[i]。
r[n]=’\0’。
returnr。
五、编程题(每小题6分,共12分)
1.按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。
intf(inta[],intn)。
2.根据下面类中拷贝构造函数的原型写出它的类外定义。
classArray{
int*a。
//指向动态分配的整型数组空间
//记录数组长度
Array(intaa[],intnn)。
//构造函数,利用aa数组长度nn初始化n,
//利用aa数组初始化a所指向的数组空间
Array(Array&
aa)。
//拷贝构造函数
一、单项选择题每小题2分,共20分)
1.B2.A3.B4.B5.A
6.C7.D8.B9.D10.B
1.cout2.253.true(或1)4.文件包含5.*(a+i)
6.double*pv=&
v。
7.类名8.*this9.~AB(){}10.2
每空3分。
1.b%i==0、b>
=i
2.a[i]=a[n-i-1]、a[n-i-1]=x
3.p、t
4.a[i]=aa[i]、delete[]a
第3、4小题根据叙述完整程度酌情给分。
1.s=63
2.4
3.以参数x和y作为运算对象,以参数op所存字符作为运算符,要求从键盘上输入运算结果,若正确则返回1否则返回0。
4.根据参数s所指向的字符串,生成一个由r所指向的新字符串并返回,该字符串使s字符串中的小写字母均变为大写。
1.intf(inta[],intn)
if(n==0)return0。
elsereturna[n-1]*a[n-1]+f(a,n-1)。
2.Array:
Array(Array&
aa){
n=aa.n。
a=newint[n]。
i++)a[i]=aa.a[i]。
训练第三套
一、单项选择题(每小题2分,共20分)
1.C++程序的基本功能模块为()。
A.表达式B.标识符C.语句D.函数
2.当处理特定问题的循环次数已知时,通常采用()来解决。
A.for循环B.while循环C.do循环D.switch语句
3.下面函数原型语句正确的是()。
A.intFunction(voida)。
B.voidFunction(int)。
C.intFunction(a)。
D.int(doublea)。
4.假定变