太原理工大学C++实验报告.docx
《太原理工大学C++实验报告.docx》由会员分享,可在线阅读,更多相关《太原理工大学C++实验报告.docx(34页珍藏版)》请在冰豆网上搜索。
太原理工大学C++实验报告
本科实验报告
课程名称:
C++面向对象程序设计
实验项目:
C++语言编程
实验地点:
明向校区
专业班级:
软件1431学号:
201400XXXX
学生姓名:
白建兴
指导教师:
崔晓红
2015年5月10日
实验内容
实验2.3
(1)
(2)(3)
实验记录
1.运行例题程序:
#include
usingnamespacestd;
voidfn1(intz=5);
intx=1,y=2;
intmain()
{
cout<<"Begin..."<cout<<"x="<cout<<"y="<cout<<"Evaluaexandyinmain()..."<intx=10,y=20;
cout<<"x="<cout<<"y="<cout<<"Stepintofn1()..."<fn1();
fn1(10);
cout<<"Baceinmain"<cout<<"x="<cout<<"y="<return0;
}
voidfn1(intz)
{
staticintx=100;
inty=200;
cout<<"x="<cout<<"y="<x=x+y+z;
}运行结果:
2.编写重载函数max1可分别求取2个整数,3个整数,3个双精度数,3个双精度数的最大值
#include
usingnamespacestd;
intmax(intx,inty);
doublemax(doublex,doubley);
intmax(intx,inty,intz);
doublemax(doublex,doubley,doublez);
intmain()
{
inta,b,c;
cout<<"请输入3个整数"<cin>>a>>b>>c;
cout<<"2个整数的最大值:
"<cout<<"3个整数的最大值:
"<doublei,j,k;
cout<<"请输入3个双精度数"<cin>>i>>j>>k;
cout<<"2个双精度数的最大值:
"<cout<<"3个双精度数的最大值:
"<return0;
}
intmax(intx,inty)
{
returnx>y?
x:
y;
}
doublemax(doublex,doubley)
{
returnx>y?
x:
y;
}
intmax(intx,inty,intz)
{
return(max(x,y)>z)?
max(x,y):
z;
}
doublemax(doublex,doubley,doublez)
{
return(max(x,y)>z)?
max(x,y):
z;
}运行结果:
3.用new操作为一个包含10个整数的数组分配内存,输入若干个值到数组中,分别统计其中正数和负数的个数后再用delete操作释放内存。
#include
usingnamespacestd;
constintN=10;
intmain()
{
int*p,i,plus,minus;
p=newint[N];
if(!
p)
{
cout<<"内存分配错误!
"<exit
(1);
}
plus=0;
minus=0;
cout<<"请任意输入"<for(i=0;i{
cin>>p[i];
if(p[i]>0)
plus++;
elseif(p[i]!
=0)
minus++;
}
cout<<"正数的个数:
"<cout<<"负数的个数:
"<delete[]p;
return0;
}运行结果:
心得体会
在经过多次编写实验程序后,比较了C与C++,二者在编程的思想上完全不同,但是在C++的编译器中,也会用到很多C中的东西,虽然C++后期修改程序上比C要容易了很多,但是在编写过程中要比C要麻烦。
虽然编写了这么多的程序,但是对编写的程序如何变成软件还是有很多的疑惑以及更大好奇心。
实验内容
实验3.3
(1)
(2)(3)(4)
实验记录
1.程序:
#include
#definepi3.14
usingnamespacestd;
intmain()
{
cout<<"1计算圆面积"<<<"2计算矩形面积"<<<"3计算正方形面积"<<<"4退出"<<<"请输入对应程序代码"<intx;
doublearea;
cin>>x;
while(x!
=4)
{
if(x==1)
{
doubler;
cout<<"请输入圆半径:
";
cin>>r;
area=3.14*r*r;
cout<<"圆的面积:
"<
}
elseif(x==2)
{
doublem,n;
cout<<"请输入矩形的长和宽:
";
cin>>m>>n;
area=m*n;
cout<<"矩形的面积:
"<
}
elseif(x==3)
{
doublem;
cout<<"请输入正方形的边长:
";
cin>>m;
area=m*m;
cout<<"正方形的面积:
"<
}
else
{
cout<<"输入有误,请重新输入!
"<cout<<"输入代码:
";
cin>>x;
}
}
return0;
}运行结果:
2.定义一个复数类Complex,复数的实部Real与虚部Image定义为私有数据成员。
用复数类定义复数对象c1、c2、c3,用默认构造函数将c1初始化为c1=20+40i,将c2初始化为c2=0+0i,用拷贝构造函数将c3初始化为c3=20+40i。
用公有成员函数Dispaly()显示复数c1、c2与c3的内容。
程序:
#include
usingnamespacestd;
classComplex
{
private:
doublereal,image;
public:
Complex(doubler,doublei);
Complex(Complex&c);
voidDisplay();
};
Complex:
:
Complex(doubler,doublei)
{
real=r;
image=i;
}
Complex:
:
Complex(Complex&c)
{
real=c.real;
image=c.image;
}
voidComplex:
:
Display()
{
cout<}
intmain()
{
Complexc1(20,40),c2(0,0),c3(c1);
cout<<"c1=";c1.Display();
cout<<"c2=";c2.Display();
cout<<"c3=";c3.Display();
return0;
}运行结果:
3.定义一个学生成绩类Score,描述学生成绩的私有数据成员为学号(No)、姓名(Name[8])、数学(Math)、物理(Phi)、数据结构(Data)、平均分(ave)。
定义能输入学生成绩的公有成员函数Write(),能计算学生平均分的公有成员函数Average(),能显示学生成绩的公有成员函数Display()。
在主函数中用Score类定义学生成绩对象数组s[3]。
用Write()输入学生成绩,用Average()计算每个学生的平均分,最后用Display()显示每个学生的成绩。
实验数据:
NoNameMathPhiDataAve
1001Zhou807060
1002Chen908085
1003Wang707589
程序:
#include
#include
usingnamespacestd;
classScore
{
private:
intNo;
charName[10];
floatMath,Phi,Data,Ave;
public:
voidWrite(intno,charname[],floatmath,floatphi,floatdata)
{
No=no;
strcpy(Name,name);
Math=math;
Phi=phi;
Data=data;
}
voidAverage()
{
Ave=(Math+Phi+Data)/3;
}
voidDisplay()
{
cout<}
};
intmain()
{
inti,no;
charname[10];
floatmath,phi,data;
Scores[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();
return0;
}运行结果:
4.定义一个矩形类Rectangle,矩形的左上角(Left,Top)与右下角坐标(Right,Bottom)定义为保护数据成员。
用公有成员函数Diagonal()计算出矩形对角线的长度,公有成员函数Show()显示矩形左上角与右下角坐标及对角线长度。
在主函数中用new运算符动态建立矩形对象r1,初值为(10,10,20,20)。
然后调用Show()显示矩形左上角与右下角坐标及对角线长度。
最后用delete运算符回收为矩形动态分配的存储空间。
程序:
#include
#include
usingnamespacestd;
classRectangle
{
private:
floatLeft,Top,Right,Bottom;
public:
Rectangle(floatleft,floattop,floatright,floatbottom);
floatDiagonal();
voidShow();
};
Rectangle:
:
Rectangle(floatleft,floattop,floatright,floatbottom):
Left(left),Top(top),Right(right),Bottom(bottom)
{}
floatRectangle:
:
Diagonal()
{
floatdia;
dia=sqrt((Right-Left)*(Right-Left)+(Bottom-Top)*(Bottom-Top));
returndia;
}
voidRectangle:
:
Show()
{
cout<<"矩形左上角坐标:
<"<"<cout<<"矩形右下角坐标:
<"<"<cout<<"矩形对角线长度:
"<:
Diagonal()<}
intmain()
{
Rectangle*r1;
r1=newRectangle(10,10,20,20);
r1->Diagonal();
r1->Show();
deleter1;
return0;
}运行结果:
遇到的问题和解决方法
实验内容
实验5.3
(1)
(2)(3)(4)
实验记录
1.程序:
#include
usingnamespacestd;
classPoint
{
public:
Point(intxx,intyy):
x(xx),y(yy){}
private:
intx,y;
};
classRectangle:
publicPoint
{
public:
Rectangle(Pointpr,intx,inty):
Point(pr),len(x),wid(y)
{cout<<"constructingrectangle\n";}
~Rectangle(){cout<<"destructingrectangle\n";}
intget_len(){returnlen;}
intget_wid(){returnwid;}
doublearea(){returnlen*wid;}
doublelength(){return2*(len+wid);}
private:
intlen,wid;
};
classCircle:
publicPoint
{
public:
Circle(Pointpc,intx):
Point(pc),r(x)
{cout<<"constructingcircle\n";}
~Circle(){cout<<"destructingCircle\n";}
doublearea(){returnr*r*3.14;}
doublelength(){return2*r*3.14;}
private:
intr;
};
classSquare:
publicPoint
{
public:
Square(Pointps,intx):
Point(ps),len(x)
{cout<<"constructingsquare\n";}
~Square(){cout<<"desttuctingSquare\n";}
doublearea(){returnlen*len;}
doublelength(){return4*len;}
private:
intlen;
};
intmain()
{
intx,y,len,wid,rad;
cin>>x>>y>>len>>wid;
Pointp1(x,y);
cout<<"p1hasbeenconstructed"<Rectangler1(p1,len,wid);
cout<<"r1hasbeenconstructed"<cout<<"矩形的周长:
"<cin>>x>>y>>rad;
Pointp2(x,y);
Circlec1(p2,rad);
cout<<"c1hasbeenconstructed"<cout<<"圆的周长:
"<cin>>x>>y>>len;
Pointp3(x,y);
Squares1(p3,len);
cout<<"s1hasbeenconstructed"<cout<<"正方形的周长:
"<return0;
}运行结果:
(坐标似乎没有用处)
2.程序:
#include
usingnamespacestd;
classPerson
{
charstrName[20];
intnAge;
public:
Person(char*name,intage)
{
strcpy(strName,name);
nAge=age;
cout<<"constructorofperson"<}
~Person(){cout<<"deconstrutorofperson"<};
classEmployee:
publicPerson
{
charstrDept[20];
PersonWang;
public:
Employee(char*name,intage,char*dept,char*name1,intage1):
Person(name,age),Wang(name1,age1)
{
strcpy(strDept,dept);
cout<<"constructorofEmployee"<}
~Employee(){cout<<"deconstrucorofEmployee"<};
intmain()
{
Employeeemp("张三",25,"财务部","李四",30);
return0;
}运行结果:
3.定义描述职工档案的类Archives,私有数据成员为职工号No,姓名Name[8],性别Sex,年龄Age。
成员函数有:
构造函数,显示职工信息的函数Show()。
再由职工档案类派生出职工工资类Laborage,在职工工资类Laborage中新增加数据成员:
应发工资(SSalary),社保金(Security),实发工资(Fsalary),其成员函数有:
构造函数,计算实发工资的函数Count()计算公式为:
实发工资=应发工资-社保金。
显示职工档案以及工资的函数。
在主函数中用Laborage类定义职工对象lab,并赋初始值(1001,””cheng,’M’,21,2000,100),然后显示职工档案与工资。
#include
#include
usingnamespacestd;
classArchives
{
private:
intNo;
charName[8],Sex;
intAge;
public:
Archives(intno,char*name,charsex,intage);
voidShow();
};
classLaborage:
publicArchives
{
private:
floatSSalary,Security,Fsalary;
public:
Laborage(intno,char*name,charsex,intage,floatsal,floatsec);
floatCount();
voidDisplay();
};
Archives:
:
Archives(intno,char*name,charsex,intage)
{
No=no;
strcpy(Name,name);
Sex=sex;
Age=age;
}
voidArchives:
:
Show()
{
cout<}
Laborage:
:
Laborage(intno,char*name,charsex,intage,floatsal,floatsec):
Archives(no,name,sex,age)
{
SSalary=sal;
Security=sec;
}
floatLaborage:
:
Count()
{
returnSSalary-Security;
}
voidLaborage:
:
Display()
{
Show();
cout<}
intmain()
{
Laboragelab(1001,"Cheng",'M',21,2000,100);
cout<<"职工号姓名性别年龄应发工资社保金实发工资"<lab.Display();
return0;
}运行结果:
4.定义个人信息类Person,其数据成员有姓名、性别、出生年月。
并以Person为基类定义一个学生的派生类Student,增加描述学生的信息:
班级、学号、专业、英语成绩和数学成绩。
再由基类Person定义一个职工的派生类Employee,增加描述职工的信息:
部门、职务、工资。
编写程序实现学生与职工信息的输入与输出。
#include
#include
usingnamespacestd;
classPerson
{
charName[8],Sex;
intBirth;
public:
Person(char*name,charsex,intbirth)
{
strcpy(Name,name);
Sex=sex;
Birth=birth;
}
voidShow()
{
cout<}
};
classStudent:
publicPerson
{
intClasses,No,Math,English;
charMajor[8];
public:
Student(char*name,charsex,intbirth,intcl,intno,char*m,inten,in