C++综合实验四Word格式.docx

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

C++综合实验四Word格式.docx

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

C++综合实验四Word格式.docx

性别:

工资:

2500

1009

2600

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

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

编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;

提供函数用于输出日期类对象的日期,按照如下格式输出:

yyyy-mm-dd

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

程序有多个测试用例。

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

20101230

20121830

2012610

2010-12-30

ERRORDATE

2012-06-10

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

根据以下主函数的功能来设计复数类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;

}

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

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

1325

3+8i

-1-2i

4.二进制类

(1)——运算符重载

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

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

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

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

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

classbinary{//定义二进制类

charbits[16];

//二进制字模数组

public:

binary(char*);

//字符串参数构造函数

binary(int);

//整型参数构造函数

friendbinaryoperator+(binary,binary);

//重载“+”

friendbinaryoperator-(binary,binary);

//重载“-”

operatorint();

//类类型转换函数

voidprint();

};

主函数设计如下:

binaryn1="

1011"

;

binaryn2=int(n1)+15;

binaryn3=n1-binary(7);

n1.print();

n2.print();

n3.print();

cout<

<

int(n2)+5<

endl;

n2-binary(5)<

n3+binary(5)<

int(n3)-5<

}

01011

11010

00100

31

21

9

-1

5.二进制类

(2)——运算符重载

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

并且重载运算符~、&

、|,分别将二进制数按位取反、数按位与及按位或。

binaryn4=n1&

n2;

binaryn5=n1|n2;

binaryn6=~n1;

n4.print();

n5.print();

n6.print();

01010

11011

10100

6.简单集合运算 

10分

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

该集合类支持集合元素增加、删除、查询;

并支持集合并、交、差运算;

利用你设计的集合类,实现本题要求。

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

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

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

开始为两个正整数m,n;

后续m个整数构成集合A,再后续n个整数构成集合B

集合A、B和他们的并、交、差集;

每个集合元素间以,分隔;

不同集合显示在不同行

35

123

35821

{1,2,3}

{1,2,3,5,8}

{}

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

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

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

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

矩形类和等腰三角形类。

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

提示:

classpic

classrecg:

publicpic

classtag:

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

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

15

7.5

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

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

1元3角5分;

第2种:

1.35元。

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

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

第二行1个double型数据,代表第二个金额,采用的是人民币的第2种表达形式。

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

结果保留两位小数。

235

1.56

111

0.91

0.79

0.20

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

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

固定工资+课时补贴。

教授的固定工资为5000元,每个课时补贴50元;

副教授的固定工资为3000元,每个课时补贴30元;

讲师的固定工资为2000元,每个课时补贴20元。

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

输入有多个测试例组成。

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

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

p200

v250

j100

15000

10500

4000

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

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

请实现一个抽象类Shape及接口方法(doublearea();

doubleperimeter())和三个派生类Rect、Triagle、Circle,通过构造三种派生类的对象的方式来计算给出的矩形、三角形和圆形的面积area和周长perimeter。

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

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

Rectx1y1x2y2

Circlexyr

Trianglex1y1x2y2x3y3

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

3

Rect0024

Circle003

Triangle002220

8.0000012.00000

28.2743118.84954

2.000006.82843

11.简单高精度计算

整型是经常使用的数据类型,常用的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位十进制整数10。

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

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

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

2.关系运算

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

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

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

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

+、-、*、==、!

=、>

、>

=、<

、<

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

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

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

64550

+

71

8742

-

787310

1

*

24

47824

==

326

7682

!

=

5926221

45561173

828739

74

62

590492

315307

43221

178568

44

四、实验结果与数据处理

第一题

//文件名:

hp

//功能:

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

//完成时间:

2012-12-13

#include<

iostream>

string>

usingnamespacestd;

classEmployee

protected:

intnum,wage;

staticintcount;

staticinttotalWage;

charname[18],sex[3];

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

Employee(){};

~Employee();

ShowBase();

staticintShowStatic();

Employee:

:

ShowBase()

"

\n个人基本信息:

\n编号:

num;

\n:

name;

\n性别:

sex;

\n工资"

wage<

}

ShowStatic()

\n人数:

count<

总工资:

totalWage<

元"

returntotalWage;

intEmployee:

count=0;

totalWage=0;

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

num=nu;

wage=wg;

strcpy(name,nm);

strcpy(sex,sx);

++count;

totalWage+=wg;

~Employee(){}

intn;

n;

Employee*m=newEmployee[n];

intnu,wg;

charnm[18],sx[3];

for(inti=0;

i<

i++)

{

cin>

nu>

nm>

sx>

wg;

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

}

Employee:

ShowStatic();

for(i=0;

m[i].ShowBase();

delete[]m;

第二题

cc

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

iomanip>

classdate

inty,m,d;

staticintx;

date(inty,intm,intd);

date(){};

~date(){};

voiddisplay(inty,intm,intd);

staticintgetx();

intdate:

x=1;

getx()

returnx;

voiddate:

display(inty,intm,intd)

y<

-"

setw

(2)<

setfill('

0'

)<

m<

d<

date:

date(inty,intm,intd)

if(m>

12)

{cout<

ERRORDATE"

x=0;

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

if(d>

31)

{cout<

if(m==2)

if(y%4==0&

&

y%100!

=0||y%400==0)

{

if(d>

29)

{cout<

}

else

28)

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

30)

intk;

y>

m>

d;

dateA;

date(y,m,d);

k=A.getx();

if(k)

A.display(y,m,d);

第三题

g4

复数类Imaginary(友元函数)

2012-12-14

classImaginary

private:

floata,b;

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

Imaginary(floati,floatj);

~Imaginary();

friendImaginaryAdd(Imaginary&

A,Imaginary&

B);

friendImaginarySub(Imaginary&

voidprint()

if(a==0)

if(b==0)

cout<

a<

else

b<

i"

if(a)

cout<

a;

if(b>

0)

+"

if(b==0)

else

cout<

ImaginaryAdd(Imaginary&

B)

floatm=A.a+B.a;

floatn=A.b+B.b;

ImaginaryC(m,n);

C.print();

returnC;

ImaginarySub(Imaginary&

floatm=A.a-B.a;

floatn=A.b-B.b;

ImaginaryD(m,n);

D.print();

returnD;

Imaginary:

Imaginary(floati,floatj)

a=i;

b=j;

~Imaginary(){}

第四题

二进制类

(1)——运算符重载

iostream.h>

string.h>

classbinary

{//定义二进制类

friendbinaryoperator+(binary&

binary&

);

//重载"

friendbinaryoperator-(binary&

binary&

);

voidprint();

binary:

binary(char*a)

intm=strlen(a)-1;

intn=15;

while(m>

=0&

n>

=0)

bits[n--]=a[m--];

while(n>

bits[n--]='

binary(inta)

for(inti=15;

i>

=0;

i--)

bits[i]=a%2+'

a=a/2;

binaryoperator+(binary&

a,binary&

b)

binaryc("

00"

ints=0,n1=0,n2=0;

16;

n1=(a.bits[i]=='

?

0:

1)+n1*2;

n2=(b.

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

当前位置:首页 > 初中教育 > 语文

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

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