10级CPP2试题.docx

上传人:b****3 文档编号:10515053 上传时间:2023-05-26 格式:DOCX 页数:24 大小:21.71KB
下载 相关 举报
10级CPP2试题.docx_第1页
第1页 / 共24页
10级CPP2试题.docx_第2页
第2页 / 共24页
10级CPP2试题.docx_第3页
第3页 / 共24页
10级CPP2试题.docx_第4页
第4页 / 共24页
10级CPP2试题.docx_第5页
第5页 / 共24页
10级CPP2试题.docx_第6页
第6页 / 共24页
10级CPP2试题.docx_第7页
第7页 / 共24页
10级CPP2试题.docx_第8页
第8页 / 共24页
10级CPP2试题.docx_第9页
第9页 / 共24页
10级CPP2试题.docx_第10页
第10页 / 共24页
10级CPP2试题.docx_第11页
第11页 / 共24页
10级CPP2试题.docx_第12页
第12页 / 共24页
10级CPP2试题.docx_第13页
第13页 / 共24页
10级CPP2试题.docx_第14页
第14页 / 共24页
10级CPP2试题.docx_第15页
第15页 / 共24页
10级CPP2试题.docx_第16页
第16页 / 共24页
10级CPP2试题.docx_第17页
第17页 / 共24页
10级CPP2试题.docx_第18页
第18页 / 共24页
10级CPP2试题.docx_第19页
第19页 / 共24页
10级CPP2试题.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

10级CPP2试题.docx

《10级CPP2试题.docx》由会员分享,可在线阅读,更多相关《10级CPP2试题.docx(24页珍藏版)》请在冰点文库上搜索。

10级CPP2试题.docx

10级CPP2试题

上海大学2010~2011学年度春季学期试卷

课程名:

高级语言程序设计

(二)课程号:

08305002学分:

4

应试人声明:

我保证遵守《上海大学学生手册》中的《上海大学考场规则》,如有考试违纪、作弊行为,愿意接受《上海大学学生考试违纪、作弊行为界定及处分规定》的纪律处分。

应试人应试人学号应试人所在院系

题号

一(30)

二(20)

三(20)

四(30)

得分

——————————————————————————————————————

一、判断题(每小题2分,共30分)

1.当不指定访问属性时,类(class)的成员的默认访问属性是private,

而结构体(struct)的成员的默认访问属性为public。

(√)

2.类是对象的抽象,而对象是类的具体实例。

(√)

3.可以重载类的构造函数。

(√)

4.可以重载类的析构函数。

(×)

5.只要类的对象不带资源,就不需要定义复制构造函数,而直接利用系统提供的

默认复制构造函数即可。

(×)

6.所有对象(包括全局对象、局部对象、动态对象)都是先构造者后被析构。

(×)

7.对于classA;创建堆对象数组的语句A*p=newA[10];将会调用10次

默认的构造函数。

(√)

8.类的静态数据成员不占用具体对象的数据空间。

(√)

9.只能通过类的对象才能调用类的静态成员函数。

(×)

10.类的友元函数不能访问该类对象的protected及private成员。

(×)

11.系统提供的默认赋值运算符函数的功能是按非静态数据成员依次执行该数据

成员的赋值运算。

(√)

12.重载运算符不能改变运算符的优先级、操作数的个数、结合方向。

(√)

13.创建派生类的对象时,先调用基类的构造函数,后执行派生类的构造函数。

(√)

14.派生类没有继承基类的访问属性为private的数据成员和成员函数。

(×)

15.含有纯虚函数的类为抽象类。

可以创建抽象类的对象。

(×)

二、填空题(每空2分,共20分)如下是为了处理单向链表所设计的类模板,请根据代码及其运行结果,完成程序。

//LinkList.h(头文件)

#ifndefLINKLIST_H

#defineLINKLIST_H

#include

usingnamespacestd;

templatestructNode

{

Tx;

Node①*next;

};

templateclassLinkList

{

private:

Node*head;

public:

LinkList(intn=0,constT*a=NULL):

head(NULL)

{

Node*p;

if(n<=0||a==NULL)

return;

for(inti=n-1;i>=0;②i--)

{

p=newNode;

p->x=a[i];

p->next=head;

head=p;

}

}

LinkList(constLinkList&link):

head(③NULL或0)//深复制构造

{

*this=link;//利用深赋值运算

}

LinkList&④operator=(constLinkList&link)//深赋值运算

{

if(&link==this)return*this;

FreeList();

Node*p,*q;

for(p=link.head;p!

=NULL;p=p->next)

{

if(head==NULL)

head=q=newNode;

else

{

q->next=newNode;

q=q->next;

}

q->x=⑤p->x;

q->next=NULL;

}

return*this;

}

virtual~LinkList()

{

FreeList();

}

voidInsert(constT&t);//插入一个结点到链首结点前

voidFreeList();//释放所有结点

intNum()const;//统计并返回链表中结点的个数

LinkListoperator+(constLinkList&link)const;

//将两条链表拼接成一条新链表

templatefriend//友元函数,重载插入运算符

ostream&operator<<(ostream&out,constLinkList&link);

//限于篇幅,其他函数略

};

template

LinkList⑥LinkList:

:

operator+(constLinkList&link)const

{

if(head==NULL)returnlink;

if(link.head==NULL)return*this;

LinkListresult(*this);

Node*p,*q;

for(q=result.head;q->next!

=NULL;q=q->next)

;

for(p=link.head;p!

=NULL;p=p->next)

{

q->next=newNode;

q=q->next;

q->x=p->x;

q->next=NULL;

}

returnresult;

}

template

ostream&operator<<(ostream&out,constLinkList&link)

{

out<<"head";

for(Node*p=link.head;p!

=NULL;p=p->next)

out<<"->"<x;

out<<"->NULL";

return⑦out;

}

templatevoidLinkList:

:

Insert(constT&t)

{

Node*p=newNode;

p->x=t;

p->next=head;

head=p;

}

templatevoidLinkList:

:

FreeList()

{

Node*p;

while(head)

{

p=head;

⑧head=head->next;

deletep;

}

}

templateintLinkList:

:

Num()const

{

intn=0;

for(Node*p=head;⑨p!

=NULL或p;p=p->next)

n++;

returnn;

}

#endif

 

//testLinkList.cpp(源程序文件)

#include

#include

#include"LinkList.h"

usingnamespacestd;

intmain()

{

inta[5]={1,3,5,7,9},b[4]={2,4,6,8};

LinkList<⑩int>linkA(5,a),linkB(4,b),linkC;

cout<

linkC=linkA+linkB;

cout<

cout<<"====="<

charstr[]="Hello";

LinkListlinkX;

for(inti=strlen(str)-1;i>=0;i--)

linkX.Insert(str[i]);

LinkListlinkY=linkX;

cout<

return0;

运行结果:

head->1->3->5->7->9->NULL

head->2->4->6->8->NULL

head->NULL

head->1->3->5->7->9->2->4->6->8->NULL

=====

head->H->e->l->l->o->NULL

head->H->e->l->l->o->NULL

}

 

三、阅读程序写出运行结果或简答问题(共20分)以下各小题所涉及的类均为如下文件中所设计的classStudent;。

文件Student.h和Student.cpp文件的内容如下。

//Student.h(头文件)

#ifndefSTUDENT_H

#defineSTUDENT_H

#include

#include

usingnamespacestd;

classStudent

{

public:

Student(stringId="****",stringName="NoName",

charGender='m',doubleScore=100);//构造函数

Student(constStudent&s);//复制构造函数

~Student();//析构函数

Student&operator=(constStudent&s);//重载赋值运算符函数

voidChangeId(conststringId);//修改学号

voidChangeName(conststringName);//修改姓名

voidChangeScore(doubleScore);//修改成绩

voidChangeGender(charGender);//修改性别

friendostream&operator<<(ostream&out,constStudent&s);

//重载插入运算符函数

staticvoidShow(ostream&out);//输出平均分、性别比率

private:

//数据成员

stringid,name;//学号、姓名

chargender;//性别

doublescore;//成绩

staticintmale,female;//男生及女生人数(静态数据成员)

staticdoublesum;//所有学生成绩之和(静态数据成员)

};

#endif

―――――――――――――――――――――――――――――――――――――

//Student.cpp(源程序文件)

#include"Student.h"

#include

intStudent:

:

male=0;

intStudent:

:

female=0;

doubleStudent:

:

sum=0;

Student:

:

Student(stringId,stringName,charGender,doubleScore)

:

id(Id),name(Name),gender(Gender),score(Score)

{

if(gender=='m'||gender=='M')

{

gender='m';

male++;

}

else

{

gender='f';

female++;

}

sum+=score;

cout<<"构造对象"<<*this<

}

Student:

:

Student(constStudent&s)

:

id(s.id),name(s.name),gender(s.gender),score(s.score)

{

if(gender=='m')

male++;

else

female++;

sum+=score;

cout<<"复制构造对象"<<*this<

}

Student:

:

~Student()

{

sum-=score;

if(gender=='m')

male--;

else

female--;

cout<<"析构对象"<<*this<

}

Student&Student:

:

operator=(constStudent&s)

{

sum-=score;

if(gender=='m')

male--;

else

female--;

id=s.id;name=s.name;gender=s.gender;score=s.score;

if(gender=='m')

male++;

else

female++;

sum+=score;

return*this;

}

ostream&operator<<(ostream&out,constStudent&s)

{

out<

<

<

returnout;

}

voidStudent:

:

Show(ostream&out)

{

intn=male+female;

if(n==0)

out<<"**无信息**"<

else

out<<"average:

"<

<<"\tmale:

"<

<<"\tfemale:

"<

<

}

voidStudent:

:

ChangeId(conststringId){id=Id;}

voidStudent:

:

ChangeName(conststringName){name=Name;}

voidStudent:

:

ChangeScore(doubleScore)

{

sum+=Score-score;

score=Score;

}

voidStudent:

:

ChangeGender(charGender)

{

if(gender=='m')

male--;

else

female--;

gender=(Gender=='m'||Gender=='M')?

'm':

'f';

if(gender=='m')

male++;

else

female++;

}

运行结果

(1)

波浪号下划线处不需要填写(下同)

构造对象0001ZhangSanm86

构造对象0002LiSif88

return...

析构对象0002LiSif88

析构对象0001ZhangSanm86

(1)(4分)指出如下程序的运行结果

#include"Student.h"

intmain()

{

Students1("0001","ZhangSan",

'M',86);

Students2("0002","LiSi",

'f',88);

cout<<"return..."<

return0;

}

(2)(4分)指出如下程序的运行结果

#include"Student.h"

intmain()

{

Student:

:

Show(cout);

Student*p1,*p2;

p1=newStudent("0001","ZhangSan",'M',86);

p2=newStudent("0002","LiSi",'f',88);

Student:

:

Show(cout);

deletep2;

Student:

:

Show(cout);

deletep1;

return0;

}

运行结果

(2)

**无信息**

构造对象0001ZhangSanm86

构造对象0002LiSif88

average:

87male:

1(50%)female:

1(50%)

析构对象0002LiSif88

average:

86male:

1(100%)female:

0(0%)

析构对象0001ZhangSanm86

 

(3)(4分)指出如下程序的运行结果

#include"Student.h"

intmain()

{

Students1("0002","LiSi",'F',88),s2;

cout<

Student:

:

Show(cout);

s2=s1;

cout<

Student:

:

Show(cout);

return0;

}

 

运行结果(3)

构造对象0002LiSif88

构造对象****NoNamem100

0002LiSif88

****NoNamem100

average:

94male:

1(50%)female:

1(50%)

0002LiSif88

0002LiSif88

average:

88male:

0(0%)female:

2(100%)

析构对象0002LiSif88

析构对象0002LiSif88

 

(4)(4分)指出如下程序的运行结果

#include"Student.h"

intmain()

{

Students[4]={Student("0001","ZhangSan",'M',86),

Student("0002","LiSi",'f',88),s[0]};

cout<<"Changing..."<

s[2].ChangeId("0003");

s[2].ChangeName("WangWu");

s[2].ChangeScore(90);

s[2].ChangeGender('f');

s[3].ChangeId("0004");

s[3].ChangeName("ZhaoLiu");

s[3].ChangeScore(96);

s[3].ChangeGender('f');

Student:

:

Show(cout);

cout<<"ReturntoOperatingSystem."<

return0;

}

 

运行结果(4)

构造对象0001ZhangSanm86

构造对象0002LiSif88

复制构造对象0001ZhangSanm86

构造对象****NoNamem100

Changing...

average:

90male:

1(25%)female:

3(75%)

ReturntoOperatingSystem.

析构对象0004ZhaoLiuf96

析构对象0003WangWuf90

析构对象0002LiSif88

析构对象0001ZhangSanm86

 

(5)(4分)结合第

(1)-(4)小题,简述Student类的复制构造函数、赋值运算符函数、析构函数的必要性,即:

分别简述仅利用系统所提供的默认复制构造函数、默认赋值运算符函数、默认的析构函数将存在什么问题。

答:

①因为有些对象可能采用复制构造函数创建。

而默认的复制构造函数不修改类的静态数据成员的值,将会导致第(4)小题计算出错;

②仅利用系统提供的默认赋值运算符函数,则第(3)小题计算出错,因为默认的赋值运算符函数不修改类的静态数据成员的值;

③仅利用系统提供的默认析构函数,则第

(2)小题计算出错,因为默认的析构函数不修改类的静态数据成员的值。

四、设计向量类模板(templateclassVector;)能使如下测试程序输出指定的结果(30分)。

//测试程序testVector.cpp

#include"Vector.h"

intmain()

{

inta[]={1,3,5};

Vectorv1(3,a),v2;

cout<<"请输入一个整数向量,如:

(1,2,3,4,5,6)"<

cin>>v2;

cout<<"v1="<

v1.ReSize(5);

v2.ReSize(5);

cout<<"v1="<

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2