c++机考题目加答案.docx
《c++机考题目加答案.docx》由会员分享,可在线阅读,更多相关《c++机考题目加答案.docx(31页珍藏版)》请在冰豆网上搜索。
c++机考题目加答案
1.实现一个大小固定的整型数据元素集合及其相应操作(元素的添加、删除;判断两个集合是否相等;判断一个数是否为集合中的元素;交集;并集)。
P76.列3.24
#include
constmaxCard=16;//集合中元素个数的最大值,默认为int型
enumErrCode{noErr,overflow};//错误代码
enumBool{False,True};//Bool类型定义
classSet//定义集合类
{
intelems[maxCard];//存储元素的数组
intcard;//集合中元素的个数
public:
voidEmptySet(){card=0;}
BoolMember(int);//判断一个数是否为集合中的元素
ErrCodeAddElem(int);//向集合中添加元素
voidRmvElem(int);//删除集合中的元素
voidCopy(Set*);//把当前集合拷贝到形参指针指向的集合中
BoolEqual(Set*);//判断两个集合是否相等
voidPrint();
voidIntersect(Set*,Set*);//交集
ErrCodeUnion(Set*,Set*);//并集
};
BoolSet:
:
Member(intelem)
{
for(inti=0;iif(elems[i]==elem)
returnTrue;
returnFalse;
}
ErrCodeSet:
:
AddElem(intelem)
{
if(Member(elem))
returnnoErr;
if(card{
elems[card++]=elem;
returnnoErr;
}
returnoverflow;
}
voidSet:
:
RmvElem(intelem)
{
for(inti=0;iif(elems[i]==elem)
{
for(;ielems[i]=elems[i+1];
--card;
return;
}
}
voidSet:
:
Copy(Set*set)
{
for(inti=0;iset->elems[i]=elems[i];
set->card=card;
}
BoolSet:
:
Equal(Set*set)
{
if(card!
=set->card)
returnFalse;
for(inti=0;i//判断当前集合的某元素是否是set所指集合中的元素
if(!
set->Member(elems[i]))
returnFalse;
returnTrue;
}
voidSet:
:
Print()
{
cout<<"{";
for(inti=0;icout<cout<<"}\n";
}
voidSet:
:
Intersect(Set*set,Set*res)//交集:
*this∩*set->*res
{
res->card=0;
for(inti=0;ifor(intj=0;jcard;++j)
if(elems[i]==set->elems[j]){
res->elems[res->card++]=elems[i];
break;
}
}
ErrCodeSet:
:
Union(Set*set,Set*res)//并集:
*set∪*this->*res
{
set->Copy(res);
for(inti=0;iif(res->AddElem(elems[i])==overflow)
returnoverflow;
returnnoErr;
}
//下面是测试用的主程序
voidmain()
{
Sets1,s2,s3;
s1.EmptySet();
s2.EmptySet();
s3.EmptySet();
s1.AddElem(10);
s1.AddElem(20);
s1.AddElem(30);
s1.AddElem(40);
s2.AddElem(30);
s2.AddElem(50);
s2.AddElem(10);
s2.AddElem(60);
cout<<"s1=";s1.Print();
cout<<"s2=";s2.Print();
s2.RmvElem(50);
cout<<"s2-{50}=";s2.Print();
if(s1.Member(20))
cout<<"20isins1\n";
s1.Intersect(&s2,&s3);
cout<<"s1intsecs2=";s3.Print();
s1.Union(&s2,&s3);
cout<<"s1unions2=";s3.Print();
if(!
s1.Equal(&s2))
cout<<"s1!
=s2\n";
}
2.实现一个大小可变的整型数据元素集合,集合可存储的数据元素个数在对象构造时给定,由构造函数为数据元素分配存储空间,在对象被释放时由析构函数释放存储空间。
P78.3.25
#include
constmaxCard=16;//集合中元素个数的缺省最大值
enumErrCode{noErr,overflow};//错误代码
enumBool{False,True};//Bool类型定义
classSet
{intsize;//元素的最大个数
int*elems;//存储元素的数组
intcard;//集合中元素的个数
public:
Set(intsz=maxCard)
{card=0;size=sz;elems=newint[size];}
~Set(){delete[]elems;}
BoolMember(int);
ErrCodeAddElem(int);
voidRmvElem(int);
voidCopy(Set*);
BoolEqual(Set*);
voidPrint();
voidIntersect(Set*,Set*);
ErrCodeUnion(Set*,Set*);
};
BoolSet:
:
Member(intelem)
{
for(inti=0;iif(elems[i]==elem)
returnTrue;
returnFalse;
}
ErrCodeSet:
:
AddElem(intelem)
{
if(Member(elem))
returnnoErr;
if(card{
elems[card++]=elem;
returnnoErr;
}
returnoverflow;
}
voidSet:
:
RmvElem(intelem)
{
for(inti=0;iif(elems[i]==elem)
{
for(;ielems[i]=elems[i+1];
--card;
return;
}
}
voidSet:
:
Copy(Set*set)
{
if(set->size{
delete[]set->elems;
set->elems=newint[size];
set->size=size;
}
for(inti=0;iset->elems[i]=elems[i];
set->card=card;
}
BoolSet:
:
Equal(Set*set)
{
if(card!
=set->card)
returnFalse;
for(inti=0;iif(!
set->Member(elems[i]))
returnFalse;
returnTrue;
}
voidSet:
:
Print()
{
cout<<"{";
for(inti=0;icout<if(card>0)
cout<cout<<"}\n";
}
voidSet:
:
Intersect(Set*set,Set*res)
{
if(res->size{
delete[]res->elems;
res->elems=newint[size];
res->size=size;
}
res->card=0;
for(inti=0;ifor(intj=0;jcard;++j)
if(elems[i]==set->elems[j])
{
res->elems[res->card++]=elems[i];
break;
}
}
ErrCodeSet:
:
Union(Set*set,Set*res)
{
if(res->sizesize)
{
delete[]res->elems;
res->elems=newint[size+set->size];
res->size=size+set->size;
}
set->Copy(res);
for(inti=0;iif(res->AddElem(elems[i])==overflow)
returnoverflow;
returnnoErr;
}
voidmain()
{
Sets1,s2,s3;
s1.AddElem(10);
s1.AddElem(20);
s1.AddElem(30);
s1.AddElem(40);
s2.AddElem(30);
s2.AddElem(50);
s2.AddElem(10);
s2.AddElem(60);
cout<<"s1=";s1.Print();
cout<<"s2=";s2.Print();
s2.RmvElem(50);
cout<<"s2-{50}=";s2.Print();
if(s1.Member(20))
cout<<"20isins1\n";
s1.Intersect(&s2,&s3);
cout<<"s1intsecs2=";s3.Print();
s1.Union(&s2,&s3);
cout<<"s1unions2=";s3.Print();
if(!
s1.Equal(&s2))
cout<<"s1!
=s2\n";
}
3.设计一个学生类student,它具有的私有数据成员是:
注册号、姓名、数学成绩、英语成绩、计算机成绩;具有的公有成员函数是:
求三门课程总成绩的函数sum();求三门课平均成绩average();显示学生数据信息的函数print();获取学生注册号的函数get_reg_num;设置学生数据信息的函数set_stu_inf()。
P81。
6
编制主函数,说明一个student类对象的数组并进行全班学生信息的输入与设置,而后求出每一个学生的总成绩、平均成绩、全班学生总成绩最高分、全班学生总平均分,并在输入一个注册号后,输出该学生有关的全部数据信息。
#include
#include
usingnamespacestd;
classStudent{
private:
intnum;
charname[10];
floatmath;
floatenglish;
floatcomputer;
public:
voidset_stu_inf(intn,char*ch,floatm,floate,floatc)
{
num=n;strcpy(name,ch);math=m;english=e;computer=c;
}
floatsum()
{
return(math+english+computer);
}
floataverage()
{
return(math+english+computer)/3;
}
intget_reg_num()
{
returnnum;
}
voidprint()
{
cout<<"学号:
"<<<"姓名:
"<<<"数学:
"<