南昌大学C++大作业.docx
《南昌大学C++大作业.docx》由会员分享,可在线阅读,更多相关《南昌大学C++大作业.docx(21页珍藏版)》请在冰豆网上搜索。
南昌大学C++大作业
软件学院大作业任务书
课程名称:
C++程序设计
题目:
C++综合编程(面向对象)
专业:
计算机网络技术
班级:
131
学号:
8001613
学生姓名:
完成人数:
起讫日期:
2014.6.3
任课教师:
李荣鑫职称:
教师
部分管主任:
完成时间:
2014.6.9
说明
1.本任务书由任课教师填写后,下达到学生。
2.任务完成后,任课教师需填写小结表。
3.任务书、学生成绩与学生完成后的大作业(纸质和电子两种)一并报送各教学研究部审核后转教务办。
4.另附一份全班大作业总结
大作业的要求和内容:
(包括题目选择范围、技术要求、递交时间、考核方法等)
1.要求独立完成下面的每一道题目。
(题目附后面)
2.每一道题均要求写出完整的程序代码,并要求调试运行通过。
程序要有输入和输出。
并将程序运行结果的窗口截屏(用Alt+Prt键),粘贴(用Ctrl+V键)到程序代码的后面。
3.不允许有程序代码雷同和抄袭的情况,若代码雷同率超过30%以上的,双方成绩均按不及格处理。
4.要求递交电子文档和打印纸质文档,由班长统一收取。
5.递交时间:
2014年6月12日之前。
教师小结:
成绩:
教师签名:
教研部负责人:
学生姓名:
康涛
《C++程序设计》编程试题
1. 设计一个圆柱体类,定义构造函数初始化圆柱体,定义两个成员函数分别计算它的底面积和体积。
2. 定义一个点类Point,有横坐标x和纵坐标y,定义构造函数初始化点,定义display()函数显示点的坐标。
再定义一个线段类Line,由两个点作为对象成员,定义不同的构造函数初始化线段,定义成员函数计算线段的距离。
3. 编写一个复数类。
实现各种常用构造函数,实现整数,实数向复数的转换函数,实现整数、实数和复数以及复数和复数之间的加、减、乘法运算。
4. 设计一个矩阵类,要求在矩阵类中重载加(+)、减(-)、乘(*)、复值(=)运算,在主函数中定义两个对象,并分别调用重载的运算符。
5. 设计一个基类Shapes,包括成员函数display(),声明为纯虚函数。
由该类派生出两个类:
矩形类Rectangle和圆类Circle, 再由长方形类派生出立方体类Box,由圆类派生出圆柱体类Cylinder。
分别定义display()函数显示图形的主要几何元素(如长宽高半径等),用GetS()计算图形的面积,用GetV计算图形的体积。
在主函数中定义相关的对象并显示相应的内容。
6. 定义一个日期类Cdate.,该类有year,month,day三个私有数据成员。
实现一下功能:
1)定义成员函数display()显示日期;2)定义成员函数setdate()设置日期;3)定义默认构造函数设置系统默认日期;4)重载++运算符。
7. 用类实现一个单链表的操作。
(包括链表的建立,链表的输出,链表的插入和删除操作)
大作业的要求和内容:
(包括题目选择范围、技术要求、递交时间、考核方法等)
1. 要求独立完成下面的每一道题目。
(题目附后面)
2. 每一道题均要求写出完整的程序代码,并要求调试运行通过。
程序要有输入和输出。
并将程序运行结果的窗口截屏(用Alt+Prt键),粘贴(用Ctrl+V键)到程序代码的后面。
3. 不允许有程序代码雷同和抄袭的情况,若代码雷同率超过30%以上的,双方成绩均按不及格处理。
4. 要求递交电子文档和打印纸质文档,由班长统一收取。
递交时间:
2014年6月12日之前。
1. 设计一个圆柱体类,定义构造函数初始化圆柱体,定义两个成员函数分别计算它的底面积和体积。
#include
#definePI3.14
usingnamespacestd;
classCylinder
{
private:
intradius;
intheight;
public:
Cylinder(intr,inth)
{
radius=r;
height=h;
};
doublearea(){return(PI*radius*radius);}
doublevolume(){returnPI*radius*radius*height;}
voidshow(){cout<<"theareais:
"<
"<};
voidmain()
{
intr,h;
cout<<"姓名:
康涛"<cout<<"学好:
8001613018"<cout<<"输入r和h"<cin>>r>>h;
CylinderCyli1(r,h);
Cyli1.show();
}
2. 定义一个点类Point,有横坐标x和纵坐标y,定义构造函数初始化点,定义display()函数显示点的坐标。
再定义一个线段类Line,由两个点作为对象成员,定义不同的构造函数初始化线段,定义成员函数计算线段的距离。
#include
#include
usingnamespacestd;
classPoint
{
private:
intx;
inty;
public:
Point(inta,intb){x=a;y=b;};
voiddisplay();
};
voidPoint:
:
display()
{
cout<<"("<}
classLine
{
public:
Line(inta,intb,intc,intd):
x1(a),y1(b),x2(c),y2(d){}
floatgetdist(){returnsqrt(pow((x1-x2),2)+pow((y1-y2),2));}
private:
intx1,y1;
intx2,y2;
};
intmain()
{cout<<"姓名:
康涛"<cout<<"学好:
8001613018"<Linel(3,4,6,2);
Pointp1(3,4);
Pointp2(6,2);
p1.display();
p2.display();
cout<<"thedistanceoftowpointsis:
"<cout<return0;
}
3. 编写一个复数类。
实现各种常用构造函数,实现整数,实数向复数的转换函数,实现整数、实数和复数以及复数和复数之间的加、减、乘法运算
#include
classComplex
{public:
Complex(){real=0;imag=0;}
Complex(doubler){real=r;imag=0;}//实数转换为复数的转换构造函数
Complex(doubler,doublei){real=r;imag=i;}
Complexoperator+(Complex&c2);//重载+号
Complexoperator+(int&i);//复数与实数相加
friendComplexoperator+(int&,Complex&);//实数与复数相加
Complexoperator-(Complex&c2);//重载—号
Complexoperator*(Complex&c2);//重载*号
voiddisplay();
voiddisplay_1();
private:
doublereal;
doubleimag;
};
ComplexComplex:
:
operator+(Complex&c)
{returnComplex(real+c.real,imag+c.imag);}
ComplexComplex:
:
operator+(int&i)
{returnComplex(real+i,imag);}
voidComplex:
:
display()
{cout<<"("<Complexoperator+(int&i,Complex&c)
{returnComplex(i+c.real,c.imag);}
ComplexComplex:
:
operator-(Complex&C2)
{
ComplexC;
C.real=real-C2.real;
C.imag=imag-C2.imag;
returnC;
}
ComplexComplex:
:
operator*(Complex&C2)
{
ComplexC;
C.real=real*C2.real-imag*C2.imag;
C.imag=imag*C2.real+real*C2.imag;
returnC;
}
voidmain()
{
cout<<"姓名:
康涛"<cout<<"学好:
8001613018"<Complexc1(2,3),c2(8,-6),c3;
inti=5;
c3=c1+c2;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c1+c2=";c3.display();
c3=i+c1;
cout<<"i+c1=";c3.display();
c3=c1+i;
cout<<"c1+i=";c3.display();
c3=c1-c2;
cout<<"c1-c2=";c3.display();
c3=c1*c2;
cout<<"c1*c2=";c3.display();
cout<<"将一个实数转换为复数:
"<c3=Complex(3.8);
c3.display();
}
4. 设计一个矩阵类,要求在矩阵类中重载加(+)、减(-)、乘(*)、复值(=)运算,在主函数中定义两个对象,并分别调用重载的运算符。
#include
classMatrix
{
friendostream&operator<<(ostream&out,Matrix&M);//重载<<运算符
friendistream&operator>>(istream&in,Matrix&M);//重载>>运算符
public:
Matrix(intr,intc);
Matrixoperator+(Matrix&M);
Matrixoperator-(Matrix&M);
Matrixoperator*(Matrix&M);
intGetCounts()
{
returnrows*cols;
}
private:
introws,cols;//定义矩阵的行数rows,列数cols
double*m;//矩阵中实际(物理)按行存放的元素
};
Matrix:
:
Matrix(intr,intc)
{
rows=r,cols=c;
m=newdouble[rows*cols];
}
istream&operator>>(istream&in,Matrix&M)//输入流重载
{
inti;
for(i=0;i{
in>>*(M.m+i);
}
returnin;
}
ostream&operator<<(ostream&out,Matrix&M)//输出流重载
{
inti,j=0;
for(i=0;i{
if(j==M.cols)j=0,out<out<<""<<*(M.m+i);
j++;
}
returnout;
}
MatrixMatrix:
:
operator+(Matrix&M)
{
inti;
MatrixtempM(rows,cols);
for(i=0;i*(tempM.m+i)=*(m+i)+*(M.m+i);
returntempM;
}
MatrixMatrix:
:
operator-(Matrix&M)
{
inti;
MatrixtempM(rows,cols);
for(i=0;i*(tempM.m+i)=*(m+i)-*(M.m+i);
returntempM;
}
MatrixMatrix:
:
operator*(Matrix&M)
{
inti,j,t,k=0;
MatrixtempM(rows,cols);
for(i=0;ifor(j=0;j{
for(t=0,*(tempM.m+k)=0;t*(tempM.m+k)=*(tempM.m+k)+*(m+i+t)**(M.m+j+t*rows);
k++;
}
returntempM;
}
voidmain()
{
cout<<"姓名:
康涛"<cout<<"学好:
8001613018"<MatrixA(3,3);
MatrixB(3,3);
MatrixC(3,3);
cout<<"输入第一个矩阵的"<"<cin>>A;
cout<<"输入第二个矩阵的"<"<cin>>B;
C=A+B;
cout<"<cout<cout<"<C=A-B;
cout<C=A*B;
cout<"<cout<}
5. 设计一个基类Shapes,包括成员函数display(),声明为纯虚函数。
由该类派生出两个类:
矩形类Rectangle和圆类Circle, 再由长方形类派生出立方体类Box,由圆类派生出圆柱体类Cylinder。
分别定义display()函数显示图形的主要几何元素(如长宽高半径等),用GetS()计算图形的面积,用GetV计算图形的体积。
在主函数中定义相关的对象并显示相应的内容。
#include
#definePI3.14
usingnamespacestd;
classShapes
{
public:
virtualvoiddisplay()=0;
};
classRectangle:
virtualpublicShapes//长方形类
{
protected:
intx,y;
public:
Rectangle(inta,intb){x=a;y=b;};
floatGetS_Rectangle(){return(x*y);}
virtualvoiddisplay()
{
cout<<"宽:
"<"<cout<<"长方形的面积是:
"<}
};
classCircle:
virtualpublicShapes//圆形类
{
protected:
intr;
public:
Circle(intradius){r=radius;};
floatGetS_Circle(){return(PI*r*r);}
virtualvoiddisplay()
{
cout<<"圆形半径是:
"<cout<<"圆形的面积是:
"<}
};
classBox:
publicRectangle//长方体类
{
protected:
intg;
public:
Box(inta,intb,intgao):
Rectangle(a,b),g(gao){}
floatGetV_Box(){returnRectangle:
:
GetS_Rectangle()*g;}
virtualvoiddisplay()
{
cout<<"长方体的高是:
"<cout<<"长方体的体积是:
"<:
GetS_Rectangle()*g<}
};
classCylinder:
publicCircle//圆柱体类
{
protected:
inth;
public:
Cylinder(intradious,intheight):
Circle(radious),h(height){}
floatGetV_Cylinder(){returnCircle:
:
GetS_Circle()*h;}
virtualvoiddisplay()
{
cout<<"圆柱体的高是:
"<cout<<"圆柱体的体积是:
"<:
GetS_Circle()*h<}
};
voidmain()
{
cout<<"姓名:
康涛"<cout<<"学好:
8001613018"<RectangleR1(2,3);
R1.display();
CircleC1
(2);
C1.display();
BoxB1(2,3,2);
B1.display();
CylinderCy1(2,3);
Cy1.display();
}
6. 定义一个日期类Cdate.,该类有year,month,day三个私有数据成员。
实现一下功能:
1)定义成员函数display()显示日期;2)定义成员函数setdate()设置日期;3)定义默认构造函数设置系统默认日期;4)重载++运算符。
#include
#include
usingnamespacestd;
classCdate
{
public:
Cdate(){year=0;month=0;day=0;}
Cdate(inty,intm,intd):
year(y),month(m),day(d){}
setdate(int,int,int);//设置一个时间
Cdateoperator++();
voiddisplay(){cout<private:
intyear;
intmonth;
intday;
};
Cdate:
:
setdate(inty,intm,intd)
{
year=y;
month=m;
day=d;
}
CdateCdate:
:
operator++()
{
++day;
++month;
++year;
return*this;
}
voidmain()
{cout<<"姓名:
康涛"<cout<<"学好:
8001613018"<Cdatesetdate(2013,9,15);
cout<<"setdate()设置的时间是:
";
setdate.display();//输出设置时间
cout<<"重载setdate()设置的timeis:
";
CdateCdat1(2013,9,15);
{
for(inti=0;i<1;i++)
{
++Cdat1;
Cdat1.display();
}
}
tm*year;//设置当前的系统时间
tm*month;
tm*day;
time_tt;
t=time(0);
year=localtime(&t);
month=localtime(&t);
day=localtime(&t);
cout<<"当前您的电脑系统时间是:
";
cout<<(year->tm_year+1900)<<"年"<<(month->tm_mon+1)<<"月"<tm_mday<<"日"<}
7. 用类实现一个单链表的操作。
(包括链表的建立,链表的输出,链表的插入和删除操作)
#include
usingnamespacestd;
typedefintelemtype;//数据类型模版
classLnode//结点
{
public:
elemtypedata;
Lnode*next;
};
/////////////建表
voidcreat_Link(Lnode*&head)
{
Lnode*p,*q;
intn;
p=newLnode;
head=p;
cout<<"输入链表长度:
"<cin>>n;
cout<<"输入数据:
"<cin>>p->data;
q=p;
for(inti=1;i<=n-1;i++)
{
p=newLnode;
cin>>p->data;
q->next=p;
q=p;
}
q->next=NULL;
}
/////////表的输出
voidoutput_Link(Lnode*&head)
{
if(head==NULL)
{cout<<"空链表!
"<return;}
Lno