c++实验答案

内容发布更新时间 : 2024/5/13 7:34:38星期一 下面是文章的全部内容请认真阅读。

通过本次实验

(1)掌握类与对象的定义与使用方法;

(2)初步掌握构造函数、拷贝构造函数的定义与使用方法; (3)初步掌握析构函数的定义与使用方法; (4)理解构造函数与析构函数的调用过程。 2.实验要求

(1)编写实验程序;

(2)在VC++运行环境中,输入源程序; (3)编译运行源程序;

(4)输入实验测试数据,写出运行结果。 3.实验内容

(1)定义一个复数类Complex,复数的实部Real与虚部Image定义为私有数据成员。用复数类定义复数对象c1、c2、c3,用默认构造函数将c1初始化为c1=20+40i ,将c2初始化为c2=0+0i,用拷贝构造函数将c3初始化为c3=20+40i。用公有成员函数Dispaly()显示复数c1、c2与c3 的内容。 (2)定义一个学生成绩类Score,描述学生成绩的私有数据成员为学号(No)、姓名(Name[8])、数学(Math)、物理(Phi)、数据结构(Data)、平均分(ave)。定义能输入学生成绩的公有成员函数Write(),能计算学生平均分的公有成员函数Average(),能显示学生成绩的公有成员函数Display()。在主函数中用Score类定义学生成绩对象数组s[3]。用Write()输入学生成绩,用Average()计算每个学生的平均分,最后用Display()显示每个学生的成绩。 实验数据:

No Name Math Phi Data Ave

1001 Zhou 80 70 60 1002 Chen 90 80 85 1003 Wang 70 75 89

(3)定义一个矩形类Rectangle,矩形的左上角(Left,Top)与右下角坐标(Right,Bottom)定义为保护数据成员。用公有成员函数Diagonal()计算出矩形对角线的长度,公有成员函数Show()显示矩形左上角与右下角坐标及对角线长度。在主函数中用new运算符动态建立矩形对象r1,初值为(10,10,20,20)。然后调用Show()显示矩形左上角与右下角坐标及对角线长度。最后用delete运算符回收为矩形动态分配的存储空间。

(4)建立一个存放素数的类Prime,具体要求如下。 ①私有数据成员。

int a[25]:存放指定范围内的所有素数。 int n1,n2:存放指定范围的下限和上限 int num:存放素数的个数。 ②公有成员函数

Prime(int m1,int m2):构造函数,用参数m1、m2初始化n1、n2,同时初始化num。

void primef():求指定范围内的所有素数,把它们依次存放在数组a中。并将求出的素数个数赋给num。

void show():显示求出的素数的个数及所有的素数,每行输出5个素数。 ③在主函数中定义一个Prime类的对象p(100,200),通过p调用成员函数完成求素数及输出素数的工作。

4.解答参考 (1)

# include class Complex { private:

float Real,Image; public:

Complex(float r,float i) //定义有参构造函数 { Real=r; Image=i; }

Complex(Complex &c) //定义拷贝构造函数 { Real=c.Real; Image=c.Image; }

Complex() //定义无参构造函数 { Real=0; Image=0; }

void Display()

{ cout<

void main(void)

{ Complex c1(10,20),c2,c3(c1); c1.Display(); c2.Display();

c3.Display(); }

程序运行结果: 10+20i 0+0i 10+20i (2)

# include # include class Score { private: int No;

char Name[8];

float Math,Phi,Data,Ave; public:

void Write(int no,char name[],float math,float phi,float data) { No=no;

strcpy(Name,name); Math=math; Phi=phi;

Data=data; }

void Average(void)

{ Ave=(Math+Phi+Data)/3;}

void Display()

{ cout<

void main(void) { int i,no;

char name[8];

float math,phi,data; Score s[3];

cout<<\ for (i=0;i<3;i++) {

cin>>no>>name>>math>>phi>>data; s[i].Write(no,name,math,phi,data); s[i].Average(); }

cout<<\学号 姓名 数学 物理 数据结构 for (i=0;i<3;i++) s[i].Display(); }

程序运行结果: Input 3 student data 1001 Zhou 80 70 60 1002 Chen 90 80 85 1003 Wang 70 75 89

学号 姓名 数学 物理 数据结构 平均分 1001 Zhou 80 70 60 70 1002 Chen 90 80 85 85 1003 Wang 70 75 89 78 (3)

# include # include

平均分\\n\ class Rectangle { protected:

float Left,Top;

float Right,Bottom; public:

Rectangle(float l,float t, float r,float b) { Left=l;Top=t;

Right=r;Bottom=b; }

Rectangle(Rectangle & R) { Left=0;Top=0;

Right=R.Right;Bottom=R.Bottom; }

double Diagonal()

{ return sqrt((Left-Right)* (Left-Right)+(Top-Bottom)*(Top-Bottom));}

void Show()

{ cout<<\

cout<<\ cout<<\} } ;

void main(void)

{ Rectangle *r1=new Rectangle(10,10,20,20); r1->Show(); delete r1; }

程序运行结果: (Left,Top)=(10,10)

(Right,Bottom)=(20,20) Diagonal=14.1421 (4)

# include # include class Prime { protected:

int a[25],n1,n2,num; public:

Prime(int m1,int m2) { n1=m1;n2=m2; num=0; }

Prime()

{ n1=10;n2=50; num=0;

cout<<\:10~50 \ }

void prime() { int i,j,k=0;

for(i=n1;i<=n2;i++)

{ for(j=2;j<=sqrt(i);j++) if (i%j==0) break; if (j>sqrt(i)) { if (num<25) a[k++]=i; num++; } } }

void Show() { int i;

cout<<\ \ for (i=0;i=25)

cout<<\数组已存满!余下的素数不存放了。\ cout<

void main(void) { int b,e;

cout<<\ //输入求素数的区间 cin>>b>>e;

Prime *p=new Prime(b,e); //构造求素数的初始条件 p->prime(); //求出素数并存入数组 p->Show(); delete p; }

程序运行结果:

Input two integers: 250 300

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi