C++综合实验四.docx

上传人:b****5 文档编号:12188144 上传时间:2023-04-17 格式:DOCX 页数:46 大小:158.48KB
下载 相关 举报
C++综合实验四.docx_第1页
第1页 / 共46页
C++综合实验四.docx_第2页
第2页 / 共46页
C++综合实验四.docx_第3页
第3页 / 共46页
C++综合实验四.docx_第4页
第4页 / 共46页
C++综合实验四.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

C++综合实验四.docx

《C++综合实验四.docx》由会员分享,可在线阅读,更多相关《C++综合实验四.docx(46页珍藏版)》请在冰豆网上搜索。

C++综合实验四.docx

C++综合实验四

《程序设计语言》实验报告

实验序号:

 04       实验项目名称:

面向对象的程序设计

学  号

姓  名

专业、班

实验地点

文波楼219

指导教师

时间

2012/12/19

一、实验目的及要求

1.掌握类和对象的定义

2.掌握面向对象的程序设计方法

3.掌握类的继承与派生

4.掌握基类和虚函数的用法

5.掌握运算符重载的方法

6.掌握I/O流类的操作

二、实验设备(环境)及要求

1.软件需求:

VisualC++6.0

2.硬件需求:

PentiumIII450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间

 

三、实验内容与步骤

1.设计员工类Employee(静态数据成员)分

a)题目描述

定义一个描述员工(Employee)基本情况的类,数据成员包括编号(num)、姓名(name)、性别(sex)、工资(wage)、人数(count)、总工资(totalWage)。

其中姓名定义为长度为18的字符数组,性别定义为长度为3的字符数组,其它数据类型为整型,总工资和人数为静态数据成员,函数成员包括构造函数、显示基本函数(ShowBase)和显示静态数据函数(ShowStatic),其中构造函数由已知参数编号(nu),姓名(nm)、性别(sx)和工资(wg)构造对象,显示基本数据函数用于显示学生的编号、姓名、性别和工资,显示静态数据函数为静态成员函数,用于显示人数和总工资;要求所有数据成员为protected访问权限,所有成员函数为public访问权限,在主函数中定义若干个员工对象,分别显示员工基本信息,以及显示员工人数和总工资。

b)输入描述

第一行要求输入一个小于10的数字n,表示即将录入的员工数量,换行后从键盘录入每个员工的数据,依次是编号,姓名,性别,工资,每个员工占一行

c)输出描述

第一行显示“人数:

”,第二行显示“总工资:

”,后面分别显示每个员工的信息,每个员工之间空一行

d)样例输入

2

1008张三男2500

1009李四女2600

e)样例输出

人数:

2

总工资:

5100元

个人基本信息:

编号:

1008

姓名:

张三

性别:

工资:

2500

个人基本信息:

编号:

1009

姓名:

李四

性别:

工资:

2600

2.日期类Date的设计(构造函数) 

a)题目描述

定义一个日期类Date,能提供和设置由年、月、日组成的日期。

编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:

yyyy-mm-dd

b)输入描述

初始化日期类Date对象的数据,分别是年、月、日。

程序有多个测试用例。

c)输出描述

按照指定格式输出的日期。

d)样例输入

20101230

20121830

2012610

e)样例输出

2010-12-30

ERRORDATE

2012-06-10

3.复数类Imaginary(友元函数)

a)题目描述

根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。

类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。

设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。

intmain()

{

floatx1,y1,x2,y2;

cin>>x1>>y1>>x2>>y2;//输入4个数据,分别表示进行运算的两个复数的实部和虚部

Imaginaryimag1(x1,y1),imag2(x2,y2);//用x1、y1创建Imaginary类对象imag1

Add(imag1,imag2);//调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)

Sub(imag1,imag2);//求两个复数之差并显示运算结果

return0;

}

b)输入描述

输入4个数据,分别表示进行运算的两个复数的实部和虚部

c)输出描述

2行,分别显示两个复数进行加、减运算的结果

d)样例输入

1325

e)样例输出

3+8i

-1-2i

4.二进制类

(1)——运算符重载

a)题目描述

将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。

在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。

因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。

另外有一个类型转换函数int(),用来将类类型向整型转换。

两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。

classbinary{//定义二进制类

charbits[16];//二进制字模数组

public:

binary(char*);//字符串参数构造函数

binary(int);//整型参数构造函数

friendbinaryoperator+(binary,binary);//重载“+”

friendbinaryoperator-(binary,binary);//重载“-”

operatorint();//类类型转换函数

voidprint();

};

主函数设计如下:

intmain()

{

binaryn1="1011";

binaryn2=int(n1)+15;

binaryn3=n1-binary(7);

n1.print();

n2.print();

n3.print();

cout<

cout<

cout<

cout<

return0;

}

b)输入描述

c)输出描述

d)样例输入

e)样例输出

0000000000001011

0000000000011010

0000000000000100

31

21

9

-1

5.二进制类

(2)——运算符重载

a)题目描述

在上一题的基础上,将+、-运算符定义为binary类的成员函数。

并且重载运算符~、&、|,分别将二进制数按位取反、数按位与及按位或。

主函数设计如下:

intmain()

{

binaryn1="1011";

binaryn2=int(n1)+15;

binaryn3=n1-binary(7);

n1.print();

n2.print();

n3.print();

binaryn4=n1&n2;

binaryn5=n1|n2;

binaryn6=~n1;

n4.print();

n5.print();

n6.print();

return0;

}

b)输入描述

c)输出描述

d)样例输入

e)样例输出

0000000000001011

0000000000011010

0000000000000100

0000000000001010

0000000000011011

111111*********0

6.简单集合运算 10分

a)题目描述

请设计实现集合类,元素类型为整形。

该集合类支持集合元素增加、删除、查询;并支持集合并、交、差运算;利用你设计的集合类,实现本题要求。

程序应体现面向对象程序设计思想,结构合理。

为保证结果唯一,集合元素递增排列。

假设集合元素个数不超100个

b)输入描述

开始为两个正整数m,n;后续m个整数构成集合A,再后续n个整数构成集合B

c)输出描述

集合A、B和他们的并、交、差集;每个集合元素间以,分隔;不同集合显示在不同行

d)样例输入

35

123

35821

e)样例输出

{1,2,3}

{1,2,3,5,8}

{1,2,3,5,8}

{1,2,3}

{}

7.图形类——继承和派生

a)题目描述

定义一个图形类,其中有保护类型的成员数据:

高度和宽度,一个公有的构造函数。

由该图形类建立两个派生类:

矩形类和等腰三角形类。

在每个派生类中都包含一个函数Area(),分别用来计算矩形和等腰三角形的面积。

提示:

classpic

{

};

classrecg:

publicpic

{

};

classtag:

publicpic

{

};

b)输入描述

输入矩形的长和宽以及等腰三角形的底边长和高。

c)输出描述

矩形的面积和等腰三角形的面积

d)样例输入

35

35

e)样例输出

15

7.5

8.人民币类(类型转换)

a)题目描述

人民币类有两种表达形式,如,第1种:

1元3角5分;第2种:

1.35元。

设计一个人民币类RMB,实现求两个金额之差。

b)输入描述

多组测试用例,每组数据包括两行,第一行3个整数,代表第一个金额,采用的是人民币的第1种表达形式;第二行1个double型数据,代表第二个金额,采用的是人民币的第2种表达形式。

c)输出描述

对应输出第一个金额减第二个金额的差。

结果保留两位小数。

d)样例输入

235

1.56

111

0.91

e)样例输出

0.79

0.20

9.教师工资计算(抽象类)

a)题目描述

某学校对教师每月工资的计算公式如下:

固定工资+课时补贴。

教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。

定义教师抽象类,派生不同职称的教师类,编写程序求若干教师的月工资。

b)输入描述

输入有多个测试例组成。

每个测试例含一个字符p表示教授,v表示副教授,j表示讲师,接下来一个正整数n表示工作时间。

c)输出描述

每个测试例对应一行输出教师的工资。

d)样例输入

p200

v250

j100

e)样例输出

15000

10500

4000

10.计算图形面积和周长(抽象类)

a)题目描述

一个矩形可用两个点表示,一个三角形可用三个点来表示,一个圆可用一个点和一个半径来表示。

请实现一个抽象类Shape及接口方法(doublearea();doubleperimeter())和三个派生类Rect、Triagle、Circle,通过构造三种派生类的对象的方式来计算给出的矩形、三角形和圆形的面积area和周长perimeter。

b)输入描述

有多行输入,第一行为几何形状的数目n,其余n行,每行代表一个形状,其中每行第一个字符串为几何形状字符串,矩形为Rect,三角形为Triangle,圆形为Circle(请注意大小写)。

其余为相应形状的几何数据数字,之间用空格分隔(每个点用x,y两个坐标表示,x坐标在前,y坐标在后),如

Rectx1y1x2y2

Circlexyr

Trianglex1y1x2y2x3y3

c)输出描述

有多行结果,每行为对应几何形状的面积和周长(PI=3.14159,保留到小数点后5位),两个数字之间用一个空格分隔.

d)样例输入

3

Rect0024

Circle003

Triangle002220

e)样例输出

8.0000012.00000

28.2743118.84954

2.000006.82843

11.简单高精度计算

a)题目描述

整型是经常使用的数据类型,常用的32位整数表示精度不超过10位十进制整数。

在很多运算中往往需要更高的精度,这时就必须自己编程突破系统已经定义数据类型的限制。

一个可行的方法是采用一个数组表示一个大的整数,每一个数组元素表示这个大整数的一位。

例如定义一个数组a[30],其各个元素分别为:

9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,则可以用来表示30位十进制整数987654321098765432109876543210。

请你编写程序(不考虑负数):

i.定义一个非负整数类BigInteger,在类中使用动态分配存储空间来存放整数的各个数位,并实现非负大整数的

1.初始化、复制、赋值、输入、显示;

2.关系运算

3.加法、减法(求两个操作数之差的绝对值,结果非负)、乘法运算;

ii.编写主程序利用非负整数类BigInteger完成各类运算,并输出结果

b)输入描述

输入有多组样例,每组样例由三行组成,第一行为操作数a,第二行为运算符op,第三行为操作数b。

其中a,b均为位数少于1000位的非负整数,op为下列运算之一:

+、-、*、==、!

=、>、>=、<、<=(其中减法定义为求两个操作数之差的绝对值)

c)输出描述

计算aopb的结果(算术运算的结果少于1000位),针对每组输入样例输出一行。

输出的算术运算结果要符合一般的数学表示习惯(例如,最高有效位的左边不能有前导的’0’),输出的关系运算结果以1表示真,0表示假。

d)样例输入

7798422038462027206418091570017038214954325158287284501126509864550

+

6644654478671

154455686168668608742

-

570620325535649714352477856211346877690604957811744787310

138********264274782575849549700031

*

104278462284302057284605155421424724

261800913745549144387657570462003847824

==

30945390762104982326

61806052973400618783421149497858757508903905734886054976023347098394999878472342427167682

!

=

550319305638993185926221

33485160132480328875209155849017229

>

48706055658499024618501666452069820990222680543730745561173

223255953006515880343449832824383387870686263650800589681213456312563835423612992344693965267757962348828739

>=

8459231671237698245612414056673245577830476701292941849484054454038774

712609293697698786056941590556285144547080247621820218851422961751623938783603762

<

180********49773972123323007151923718757730213899815509196276039659381252042527294867590492

136********1754460256400172008142164350078857012092315307

<=

907145092560931574534094350840314027165670909824872

e)样例输出

7798422038462027206418091570017038214954325158287284507771164343221

570620325535649714352477856211346877536149271643076178568

1439720272653527639853476844171700671299791197920011931807664846966444

0

1

0

1

1

0

四、实验结果与数据处理

第一题

//文件名:

hp

//功能:

设计员工类Employee(静态数据成员)

//完成时间:

2012-12-13

#include

#include

usingnamespacestd;

classEmployee

{

protected:

intnum,wage;

staticintcount;

staticinttotalWage;

charname[18],sex[3];

public:

Employee(intnu,char*nm,char*sx,intwg);

Employee(){};

~Employee();

ShowBase();

staticintShowStatic();

};

Employee:

:

ShowBase()

{

cout<<"\n个人基本信息:

";

cout<<"\n编号:

"<

cout<<"\n姓名:

"<

cout<<"\n性别:

"<

cout<<"\n工资"<

}

Employee:

:

ShowStatic()

{

cout<<"\n人数:

"<

cout<<"总工资:

"<

returntotalWage;

}

intEmployee:

:

count=0;

intEmployee:

:

totalWage=0;

Employee:

:

Employee(intnu,char*nm,char*sx,intwg)

{

num=nu;wage=wg;

strcpy(name,nm);

strcpy(sex,sx);

++count;

totalWage+=wg;

}

Employee:

:

~Employee(){}

intmain()

{

intn;cin>>n;

Employee*m=newEmployee[n];

intnu,wg;

charnm[18],sx[3];

for(inti=0;i

{

cin>>nu>>nm>>sx>>wg;

m[i]=Employee(nu,nm,sx,wg);

}

Employee:

:

ShowStatic();

for(i=0;i

m[i].ShowBase();

return0;

delete[]m;

}

 

 

第二题

//文件名:

cc

//功能:

日期类Date的设计(构造函数) 

//完成时间:

2012-12-13

#include

#include

usingnamespacestd;

classdate

{

protected:

inty,m,d;

staticintx;

public:

date(inty,intm,intd);

date(){};

~date(){};

voiddisplay(inty,intm,intd);

staticintgetx();

};

intdate:

:

x=1;

intdate:

:

getx()

{

returnx;

}

voiddate:

:

display(inty,intm,intd)

{

cout<

(2)<

(2)<

}

date:

:

date(inty,intm,intd)

{

if(m>12)

{cout<<"ERRORDATE"<

if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

{

if(d>31)

{cout<<"ERRORDATE"<

}

if(m==2)

{

if(y%4==0&&y%100!

=0||y%400==0)

{

if(d>29)

{cout<<"ERRORDATE"<

}

else

{

if(d>28)

{cout<<"ERRORDATE"<

}

}

if(m==4||m==6||m==9||m==11)

{

if(d>30)

{cout<<"ERRORDATE"<

}

}

 

intmain()

{

inty,m,d;

intk;

cin>>y>>m>>d;

dateA;

date(y,m,d);

k=A.getx();

if(k)

A.display(y,m,d);

return0;

}

 

 

 

 

第三题

//文件名:

g4

//功能:

复数类Imaginary(友元函数)

//完成时间:

2012-12-14

#include

usingnamespacestd;

classImaginary

{

private:

floata,b;

public:

Imaginary(){a=0,b=0;}

Imaginary(floati,floatj);

~Imaginary();

friendImaginaryAdd(Imaginary&A,Imaginary&B);

friendImaginarySub(Imaginary&A,Imaginary&B);

voidprint()

{

if(a==0)

{

if(b==0)

cout<

else

cout<

}

if(a)

{

cout<

if(b>0)

cout<<"+"<

else

if(b==0)

cout<

else

cout<

}

}

};

ImaginaryAdd(Imaginary&A,Imaginary&B)

{

float

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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