完整版c++机考题目加答案.docx

上传人:b****5 文档编号:7195161 上传时间:2023-01-21 格式:DOCX 页数:31 大小:23.67KB
下载 相关 举报
完整版c++机考题目加答案.docx_第1页
第1页 / 共31页
完整版c++机考题目加答案.docx_第2页
第2页 / 共31页
完整版c++机考题目加答案.docx_第3页
第3页 / 共31页
完整版c++机考题目加答案.docx_第4页
第4页 / 共31页
完整版c++机考题目加答案.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

完整版c++机考题目加答案.docx

《完整版c++机考题目加答案.docx》由会员分享,可在线阅读,更多相关《完整版c++机考题目加答案.docx(31页珍藏版)》请在冰豆网上搜索。

完整版c++机考题目加答案.docx

完整版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;i

if(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;i

if(elems[i]==elem)

{

for(;i

elems[i]=elems[i+1];

--card;

return;

}

}

voidSet:

:

Copy(Set*set)

{

for(inti=0;i

set->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;i

cout<

cout<<"}\n";

}

voidSet:

:

Intersect(Set*set,Set*res)//交集:

*this∩*set->*res

{

res->card=0;

for(inti=0;i

for(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;i

if(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;i

if(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;i

if(elems[i]==elem)

{

for(;i

elems[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;i

set->elems[i]=elems[i];

set->card=card;

}

BoolSet:

:

Equal(Set*set)

{

if(card!

=set->card)

returnFalse;

for(inti=0;i

if(!

set->Member(elems[i]))

returnFalse;

returnTrue;

}

voidSet:

:

Print()

{

cout<<"{";

for(inti=0;i

cout<

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;i

for(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;i

if(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<<"学号:

"<

<<"姓名:

"<

<<"数学:

"<

<<"英语:

"<

<<"计算机:

"<

<<"总分:

"<

<<"平均分:

"<

}

};

intmain()

{

Studentstu[50];

inti,q,a,z,x,max=0,aver=0;//i为循环变量,q:

学号;a:

数学成绩;

//z:

英语成绩;x:

计算机成绩

intcount=0;//表示学生人数

char*we=newchar[10];

//输入学生信息

for(;;)

{

cout<<"请输入学生的学号、姓名、数学成绩、英语成绩、计算机成绩:

(若输入的学号为0则表示退出)"<

cin>>q>>we>>a>>z>>x;

if(q==0)

break;

stu[count++].set_stu_inf(q,we,a,z,x);

if(max>a+z+x);

elsemax=a+z+x;

aver+=(a+z+x);

}

//输出所有学生信息

cout<<"学生信息为:

"<

for(i=0;i

stu[i].print();

cout<

}

cout<<"全班学生总成绩最高分为"<

<<"全班学生总平均分为"<

cout<<"请输入要查的学生的学号:

"<

cin>>q;

for(i=0;i

if(q==stu[i].get_reg_num())

{

cout<<"此学生信息为:

"<

stu[i].print();

break;

}

}

if(i==count)

cout<<"查无此人"<

return0;

}

4.定义复数类complex,使用友元函数,完成复数的加法、减法、乘数运算,以及复数的输出。

P95.4.8

#include

classComplex

{

doublereal;

doubleimage;

public:

Complex(doubler=0,doublei=0)

{

real=r;image=i;

}

friendvoidinputcomplex(Complex&comp);

friendComplexaddcomplex(Complex&c1,Complex&c2);

friendComplexsubcomplex(Complex&c1,Complex&c2);

friendComplexmulcomplex(Complex&c1,Complex&c2);

friendvoidoutputcomplex(Complex&comp);

};

voidinputcomplex(Complex&comp)

{

cin>>comp.real>>comp.image;

}

Complexaddcomplex(Complex&c1,Complex&c2)

{

Complexc;

c.real=c1.real+c2.real;

c.image=c1.image+c2.image;

returnc;

}

Complexsubcomplex(Complex&c1,Complex&c2)

{

Complexc;

c.real=c1.real-c2.real;

c.image=c1.image-c2.image;

returnc;

}

Complexmulcomplex(Complex&c1,Complex&c2)

{

Complexc;

c.real=c1.real*c2.real-c1.image*c2.image;

c.image=c1.real*c2.image+c1.image*c2.real;

returnc;

}

voidoutputcomplex(Complex&comp)

{

cout<<"("<

}

 

voidmain()

{

Complexc1,c2,result;

cout<<"请输入第一个复数的实部和虚部:

"<

inputcomplex(c1);

cout<<"请输入第二个复数的实部和虚部:

"<

inputcomplex(c2);

result=addcomplex(c1,c2);

outputcomplex(c1);

cout<<"+";

outputcomplex(c2);

cout<<"=";

outputcomplex(result);

cout<<"\n-------------------------"<

result=subcomplex(c1,c2);

outputcomplex(c1);

cout<<"-";

outputcomplex(c2);

cout<<"=";

outputcomplex(result);

cout<<"\n-------------------------"<

result=mulcomplex(c1,c2);

outputcomplex(c1);

cout<<"*";

outputcomplex(c2);

cout<<"=";

outputcomplex(result);

cout<

}

5.某单位所有员工根据领取薪金的方式分为如下几类:

时薪工(hourlyworker)、计件工(pieceworker)、经理(manager)、佣金工(commissionworker)。

时薪工按工作的小时支付工资,对于每周超过50小时的加班时间,按照附加50%薪水支付工资。

按生产的每件产品给计件工支付固定工资,假定该工人仅制造一种产品。

经理每周得到固定的工资。

佣金工每周得到少许的固定保底工资,加上该工人在一周内总销售的固定百分比。

试编制一个程序来实现该单位的所有员工类,并加以测试。

P1255.15

#include

#include

classemployee//雇员类

{

protected:

charname[10];//姓名

charemp_id[8];//职工号

doublesalary;//薪金数

public:

voidsetinfo(char*empname,intempsex,char*empid)//设置雇员的基本信息

{

strcpy(name,empname);

strcpy(emp_id,empid);

}

voidgetinfo(char*empname,char*empid)//取得雇员的基本信息

{

strcpy(empname,name);

strcpy(empid,emp_id);

}

doublegetsalary()//取得所应得的总薪金数

{

returnsalary;

}

};

classhourlyworker:

publicemployee//时薪工

{

protected:

inthours;//工作的小时数

doubleperhourpay;//每小时应得的报酬

public:

hourlyworker()

{

hours=0;

perhourpay=15.6;

}

intgethours()//取得某人工作的小时数

{

returnhours;

}

voidsethours(inth)//设置某人工作的小时数

{

hours=h;

}

doublegetperhourpay()//取得每小时应得的报酬

{

returnperhourpay;

}

voidsetperhourpay(doublepay)//设置每小时应得的报酬

{

perhourpay=pay;

}

voidcomputepay()//计算工资

{

if(hours<=40)

salary=perhourpay*hours;

else

salary=perhourpay

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

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1