1、
C++程序设计
练习题
学院: 计算机学院
专业班级: 物联网1002
学号:0121010340705
姓名: 徐 远 志
第八章
1.下面是一个类的测试程序,试设计出能是用如下测试程序的类.
Int main()
{
Test x;
x.initx(30,20);
x.printx();
return 0;
}
解:
#include
2、d initx(int i,int j);
void printx();
private:
int x,y;
};
void Test::initx(int i,int j)
{
x=i;
y=j;
}
void Test::printx()
{
cout< 3、ctangle。该类包含了下列成员函数。
Crectangle(): 累的构造函数,根据需要可以定义多个构造函数
SetTop(),SetLeft(): 设置矩形的左上角坐标
SetLength(),SetWidth(): 设置矩形的长和宽
Perimeter(): 求矩形的周长
Area(): 求矩形的面积
GetWidth(): 返回矩形的宽度
Getlength(): 返回矩形的长度
IsSquare(): 4、 判断矩形是否为正方形
Move(): 将矩形从一个位置移动到另一个位置
Size(): 改变矩形的大小
Where(): 返回矩形的左上角的坐标
PrintRectangle(): 输出矩形的四个顶点的坐标
数据成员
int top,left;
int length,width;
解:
#include 5、始
{
int top,left;
int length,width;
public:
Crectangle(int t=0,int l=0,int len=1,int w=1)
{
top=t;left=l;
if (len>0) length=len;
else length=0;
if (w>0) width=w;
else width=0;
}
void SetTop(int t)
{
top=t;
}
void SetLeft(int l)
{
left=l;
}
6、 void SetLength(int len)
{
length=len;
}
void SetWidth(int w)
{
width=w;
}
int Perimeter()
{
return 2*(width+length);
}
int Area()
{
return width*length;
}
int GetWidth()
{
return width;
}
int GetLength()
{
return length;
}
int IsSquare() 7、
{
if(width==length)
{
cout<<"该矩形是正方形"< 8、tangle()
{
cout<<"左上方的点为:("< 9、5,5);
a.PrintRectangle();
a.SetTop(2);
a.SetLeft(3);
a.SetLength(4);
a.SetWidth(5);
a.IsSquare();
cout<<"周长为:"< 10、"< 11、到底排列输出。
解:
(1)CompetitionResult::CompetitionResult()
{
num=0; strcpy(name,"");
for(int i=0;i 12、
float CompetitionResult::MaxScore()
{ int max=score[0];
for(int i=0;i 13、petitionResult::SetAvg()
{ int i;float sum=0.0;
for(i=0;i 14、Result::SetNo(int i) {num=i;}
char CompetitionResult::* GetName() {return name ;}
float CompetitionResult::GetScore(int j) {return score[j];}
void CompetitionResult::Setscore(int k,float av) { score[k]=av; }
void Sort(CompetitionResult *pr,int n)
{
int i,j ,k;
CompetitionResult te 15、mp;
for(i=0;i 16、tionResult(1,"one"),
CompetitionResult(2,"two"),CompetitionResult(3,"there"),
CompetitionResult(4,"four"),CompetitionResult(5,"five"),
CompetitionResult(6,"six"),CompetitionResult(7,"seven"),
CompetitionResult(8,"eight"),CompetitionResult(9,"nine"),
CompetitionResult(10,"ten")};
float 17、a;
for(int i=0;i 18、)
{cout< 19、Base {
public:
void set(int i,int j) {a=i;b=j;}
void show() {cout<<"a="< 20、ow();
obj.sets();
obj.shows();
return 0;
}
解:可以访问a和b;因为a,b为保护成员,经公有继承,成为派生类中得保护成员,所以派生类Derived 的成员函数sets()能访问基类base中得变量a和b。
如果定义为私有,则不能通过编译。因为派生类中的成员函数不能访问基类中得私有成员
2.声明一个图形基类Shape,在它的基础上派生出矩形类Rectangle和圆形类Circle,它们都有计算面积的和周长、输出图形信息的成员函数,再在Rectangle类的基础上派生方形类Square。编写程序和各类的定义和实现,以及类的使用。
解: 21、
#include 22、Area()
{ return height*width;
}
double getPerimeter()
{ return 2*(height+width);
}
};
class Circle:public Shape{
public:
Circle(double x):r(x){}
double getPerimeter()
{
return 2*3.1416*r;
}
double getArea()
{
return r*r*3.1416;
}
private:
double r;
};
class S 23、quare:public Rectangle
{
public:
Square(double x)
{
height=x;
width=x;
}
};
int main()
{
Rectangle a1(2.2,3.2);
Circle a2(4.2);
Square a3(5.3);
cout<<"Area="< 24、rimeter="< 25、e类派生Salesman类。Salesman类包含两个新数据成员commrate和sales,还包括了用于输入销售额并计算销售员工工资的成员函数pay()和用于输出打印的print()。
(3) 由Salesman派生Salemanager,Salesmmanage类包含新数据成员monthlypay,以及用于输入销售额并计算销售经理工资的成员函数pay()和用于输出的print()。
(4) 编写main()函数中测试所设计的类结构。
解:
(1)class Employee
{
public:
Employee(long num,char *n)
{
number 26、num;
strcpy(name,n);
}
protected:
long number;
char name[20];
double salary;
};
(2)class Salesman:public Employee
{
public:
Salesman(long num,char *n,float c=0.005):Employee(num,n)
{ commrate=c;}
void pay()
{
cout<<"ÇëÊäÈë"< 27、alary=commrate*sales;
}
void print(){
cout< 28、pay(){
cout<<"ÇëÊäÈë"< 29、 s1.print();
s2.pay();
s2.print();
return 0;
}
第十章
1.定义一个辅助类Complex,重载运算符+、-、*、/使之能用于复数的加减乘除运算。运算符重载函数为Complex类的成员函数。编写程序,分别求出两个复数之和、差、积、商。
解:
#include 30、rator + (Complex);
friend Complex operator - (Complex,Complex);
Complex operator * (Complex);
friend Complex operator / (Complex,Complex);
void display();
private:
double real,imag;
};
Complex Complex::operator + (Complex c)
{
return Complex(real+c.real,imag+c.imag);
}
Complex oper 31、ator - (Complex c1,Complex c2)
{
return Complex(c1.real-c2.real,c1.imag-c2.imag);
}
Complex Complex::operator * (Complex c)
{
return Complex(real*c.real-imag+c.imag,imag*c.imag+real*c.real);
}
Complex operator / (Complex c1,Complex c2)
{
double r,i;
r=(c1.real*c2.real+c1.imag*c2.imag) 32、/(c2.real*c2.real+c2.imag*c2.imag);
i=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
return(r,i);
}
void Complex::display()
{
cout<<"("< 33、play();
c3=c1+c2;
cout<<"c1+c2=";c3.display();
c3=c1-c2;
cout<<"c1-c2=";c3.display();
c3=c1*c2;
cout<<"c1*c2=";c3.display();
c3=c1/c2;
cout<<"c1/c2=";c3.display();
return 0;
}
2.定义一个日期类Date,包括年,月,日等私有数据成员。要求为所定义的Date类设计如下重载运算符函数:
Date operator+(int days); 返回一日起加天数days后得到的日期
34、Date operator-(int days); 返回一日起减天数days后得到的日期
Int operator-(Date &b); 返回两日期相差的天数
解:
#include 35、void setmon(int m) {mon=m;}
void setyear(int y) {year=y;}
int getday() {return day;}
int getmon() {return mon;}
int getyear() {return year;}
Date operator + (int days)
{
static Date date;
int number=dton(*this);
number-=days;
date=ntod(number);
return date;
}
Date op 36、erator - (int days)
{
static Date date;
int number=dton(*this);
number-=days;
date=ntod(number);
return date;
}
int operator - (Date &b)
{
int days=dton(*this)-dton(b)-1;
return days;
}
void disp()
{cout< 37、year,mon,day;
int leap(int);
int dton(Date &);
Date ntod(int);
};
int Date::leap(int year)
{
if(year%4==0&&year&100!=0||year%400==0)
return 1;
else return 0;
}
int Date::dton(Date &d)
{
int y,m,days=0;
for(y=1;y<=d.year;y++)
if(leap(y))
days+=366;
else
days+=36 38、5;
day_tab[1]=leap(d.year)?29:28;
for(m=0;m 39、
y--;
day_tab[1]=leap(y)?29:28;
while(1)
{
if(rest>day_tab[m-1])
rest-=day_tab[m-1];
else
break;
m++;
}
d=rest;
return Date(y,m,d);
}
int main()
{
Date now(2011,12,22),Nationday(1949,10,1);
cout<<"now:";now.disp();
cout<<"Nationday:";Nationday.disp();
cout< 40、<"Ïà²îÌìÊý:"<<(now-Nationday)< 41、 42、le v()
{return data*data*data;
}
};
class Sphere:public Body
{
public:
Sphere(double r):Body(r){};
double s()
{
return data*data*3.1416*4;
}
double v()
{
return 4*data*data*data/3;
}
};
class Cylinder:public Body
{
double height;
public:
Cylinder(double r,double 43、height): Body(r){Cylinder::height=height;}
double s()
{
return (2*3.1416*data*data+2*data*3.1416*height);
}
double v()
{
return data*data*3.1416*height;
}
};
int main()
{
Body *p;
Cube obj1(5);
Sphere obj2(5);
Cylinder obj3(5,5);
p=&obj1;
cout<<"正方体的表面积:"< 44、dl;
cout<<"正方体的体积:"< 45、个例子,起功能是将数组a中得前size个元素按从小到大的顺序依次排列。是设计函数模板。
解:#include 46、int main()
{
int a[]={4,5,8,9,3};
double b[]={3,5,6.7,2,5.2,9.2,10.3};
Sort(a,6);
Sort(b,6);
for(int i=0;i<6;i++)
cout< 47、al;}
Void SetData2(doule val) {data2=val;}
int GetData1(){ return data1;}
double GetData2() {return data2;}
private:
int data1;
double data2;
}
试将此类声明为类模板的声明,使得数据成员data1和data2可以使任何类型
#include 48、
public:
void SetData1(T1 val) {data1=val;}
void SetData2(T2 val) {data2=val;}
T1 GetData1() { return data1;}
T2 GetData2() {return data2;}
private:
int data1;
double data2;
};
int main()
{
Test 49、GetData1()<<" "< 50、 Istack
{
Public:
Istack();
void Push(int &n);
void pop();
int GetTop();
bool Empty();
int size();
boid ClearStack();
~Istack();
Private:
Int elem[MaxSize];
Int top;
}
编写一个栈的类模板,以便为任何类型的对象提供栈结构的数据操作。
解:
#include
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818