题目描述
设计一个用来表示直角坐标系的Location类,有两个double型私有数据成员x,y;主程序中,输入相应的值,创建类Location的两个对象a和b,要求a的坐标点在第3 象限,b的坐标点在第2象限;分别采用成员函数和友元函数计算给定两个坐标点之间的距离。
【提示】类Location的参考框架如下:
class Location
{
public:
Location(double a,double b);//构造函数
double getX(); //成员函数,取x坐标的值
double getY(); //成员函数,取y坐标的值
double distance1(Location &);//成员函数,求给定两点之间的距离
//友元函数,求给定两点之间的距离
friend double distance1(Location &,Location&);
private:
double x,y;
};
输入描述
二行,每行分别为一个点的坐标
输出描述
四行:
第一、二行分别为第一个点、第二个点的坐标
第三行为调用成员函数求出的点之间的距离
第四行为调用友元函数求出的点之间的距离
输入样例
1 2
6 7
输出样例
第一个点:A(1,2)
第二个点:B(6,7)
调用成员函数,Distance=7.07107
调用友元函数,Distance=7.07107
用户代码
#include
#include
#include
using namespace std;
class Location
{
public:
Location(double a,double b):x(a),y(b){}; //构造函数
double getX(){return x;}; //成员函数,取x坐标的值
double getY(){return y; }; //成员函数,取y坐标的值
double distance1(Location &c); //成员函数,求给定两点之间的距离
friend double distance1(Location &,Location&); //友元函数,求给定两点之间的距离
private:
double x,y;
};
double Location::distance1(Location &c){
return sqrt(pow(this->x - c.x,2)+pow(this->y - c.y ,2));
}
double distance1(Location &c,Location &d)
{
return sqrt(pow(c.x-d.x,2)+pow(c.y-d.y ,2) );
}
int main()
{
double a,b;
cin>>a>>b;
Location s1(a,b);
cin>>a>>b;
Location s2(a,b);
cout<<"第一个点:A("<<s1.getX()<<","<<s1.getY()<<")"<<endl;
cout<<"第二个点:B("<<s2.getX()<<","<<s2.getY()<<")"<<endl;
cout<<"调用成员函数,Distance="<<s1.distance1(s2)<<endl;
cout<<"调用友元函数,Distance="<<distance1(s1,s2)<<endl;
return 0;
}
题目描述
设计一个计算薪水的类Payroll,数据成员包括:单位小时工资、周工作小时、每周应付工资,其中每周应付工资=单位小时工资*周工作小时。要求:定义构造函数、析构函数、拷贝构造函数,常成员函数output()用来输出对象的数据成员值。主函数中定义两个对象:第一个对象的单位小时工资、周工作小时由键盘输入,第二个对象定义为常对象,他的单位小时工资为第一个对象的1.5倍,周工作小时相同,输出每个对象的信息。
输入描述
一行:第一个对象的单位小时工资、周工作小时
输出描述
两个对象的小时工资、周工作时数、周应付工资
函数调用的相关信息
输入样例
25 38
输出样例
Constructor is called!
小时工资:25 周工作时数:38 周应付工资:950
Copy constructor is called!
小时工资:37.5 周工作时数:38 周应付工资:1425
Destructor is called!
Destructor is called!
用户代码
#include
using namespace std;
class Salary
{
public:
Salary(double m,double h):money(m),hour(h){
cout<<"Constructor is called!"<<endl;
};
Salary(const Salary &c)
{
money=c.money*1.5;
hour=c.hour;
cout<<"Copy constructor is called!"<<endl;
}
~Salary(){
cout<<"Destructor is called!"<<endl;
};
void f(void) const
{
cout<<"小时工资:"<<money<<" 周工作时数:"<<hour<<" 周应付工资:"<<money*hour<<endl;
}
private:
double money,hour;
};
int main()
{
double a,b;
cin>>a>>b;
Salary s1(a,b);
s1.f();
Salary s2(s1);
s2.f();
return 0;
}
题目描述
定义一个平面坐标系下的点类Point,有整型数据成员x,y坐标值。成员函数包括:(1)带默认值的构造函数,默认值均为0;(2)拷贝构造函数;(3)置x,y坐标值;(4)取x,y的坐标值,参数为两个整型量的引用,分别用于获取x,y坐标值。(5)输出函数,用于输出x,y坐标值。(6)求两个点之间距离的函数,参数是Point类的对象引用。
定义一个平面坐标系下的三角形类Triangle,数据成员为三个Point类的对象p1、p2、p3。成员函数包括:(1)带参数的构造函数,参数为整型量x1,y1,x2,y2,x3,y3,分别是三角形三个顶点的坐标。(2)带参数的构造函数,参数是三个Point类对象的引用。(3)求三角形周长。(4)求三角形面积。(5)输出三角形的三个顶点坐标、周长和面积。
定义一个普通函数:判断三个顶点坐标能否构成三角形。
main()中,从键盘输入三个点坐标,判断这三个点能否构成三角形,不能,则提示重新输入,并重新输入点坐标;能,则输出三个顶点坐标、周长和面积。
输入描述
三个点的坐标,如果不能构成三角形,再重新输入三个点的坐标
输出描述
三个顶点坐标
三角形周长、三角形面积
输入样例
0 0
1 1
2 2
0 0
5 6
3 0
输出样例
顶点坐标不正确,不能构成三角形!请重新输入坐标!
三角形三个顶点坐标为:
(0,0) (5,6) (3,0)
三角形周长为:17.1348,面积为:9
用户代码
#include
#include
using namespace std;
class Point
{
public:
Point(int x_=0,int y_=0):x(x_),y(y_)//1)带默认值的构造函数,默认值均为0;
{
}
void fxy(int a,int b)
{
x=a;
y=b;
}
Point(const Point &n) //(2)拷贝构造函数;
{
x=n.x;
y=n.y;
}
int get_x(){ //3)置x,y坐标值;
return x;
}
int get_y(){
return y;
}
void print()
{
cout<<"("<<x<<","<<y<<")"<<" ";
}
double length(Point &n)
{
return sqrt(pow(x-n.x,2)+pow(y-n.y ,2) );
}
private:
int x,y;
};
class Tri
{
public:
Tri(int x1,int y1,int x2,int y2,int x3,int y3)
{
p1.fxy(x1,y1);
p2.fxy(x2,y2);
p3.fxy(x3,y3);
}
void fuzhi(int x1,int y1,int x2,int y2,int x3,int y3)
{
p1.fxy(x1,y1);
p2.fxy(x2,y2);
p3.fxy(x3,y3);
}
bool f()
{
if(p1.length(p2)+p1.length(p3)>p2.length(p3) && p1.length(p2)-p1.length(p3)<p2.length(p3)
&& ( p2.get_y()-p1.get_y() ) *1.0/ ( p2.get_x()-p1.get_x()) != (p3.get_y()-p1.get_y() ) *1.0/ p3.get_x()-p1.get_x() )
return true;
else return false;
}
double zhouchang()
{
return p1.length(p2)+p1.length(p3)+p2.length(p3);
}
double mianji()
{
double p=1.0/2*( p1.length(p2)+p1.length(p3)+p2.length(p3) );
return sqrt(p* (p-p1.length(p2)) * (p-p1.length(p3)) * (p-p2.length(p3) ));
}
void print()
{
p1.print();
p2.print();
p3.print();
cout<<endl;
}
private:
Point p1,p2,p3;
};
int main()
{
int a,b,c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
Tri D(a,b,c,d,e,f);
while(!D.f() )
{
cout<<"顶点坐标不正确,不能构成三角形!请重新输入坐标!"<<endl;
cin>>a>>b>>c>>d>>e>>f;
D.fuzhi(a,b,c,d,e,f);
}
cout<<"三角形三个顶点坐标为:"<<endl;
D.print();
cout<<"三角形周长为:"<<D.zhouchang() <<",面积为:"<<D.mianji() ;
return 0;
}
题目描述
使用C++中的string标准类,将5个字符串按由小到大顺序输出(注意:使用string类中封装的成员函数)。
说明:查阅C++类库中的string类,了解类中的成员函数和运算符。
输入描述
五个字符串
输出描述
按由小到大排列的5个字符串
输入样例
string month attack price hello
输出样例
排序后的结果为:
attack hello month price string
用户代码
#include
#include
using namespace std;
int main()
{
string s[5];
for(int i=0;i<5;i++)
cin>>s[i];
int i,j;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
if(s[i]>s[j])
{
string t;
t=s[i];s[i]=s[j];s[j]=t;
}
}
cout<<"排序后的结果为:";
for(int i=0;i<5;i++)
cout<<s[i]<<" ";
return 0;
}