09 类与对象 C++作业答案

第1题

#include <iostream>
using namespace std;
//此处编写CCircle类的定义
class CCircle{
	public: void setR(double pr);
			double getPerimeter();
			double getArea()
			{return 3.14*r*r;}//内联函数,注意分号哪里有哪里没有
			//(和上面那两个非内联函数原型声明对比)
	private: double r;
};
void CCircle::setR(double pr){r=pr;}
double CCircle::getPerimeter(){return 3.14*2*r;}
//在类外定义成员函数,格式上就比普通的函数多一个 CCircle::
此处编写主函数
int main()
{
	CCircle circle;
	double radius;
    cout << "please enter a radius:";//请输入一个半径
    cin >> radius;
	circle.setR(radius);//利用setR函数,给r赋值为radius
    cout <<"the area is "<< circle.getArea() << endl; 
    cout <<"the perimeter is "<< circle.getPerimeter() << endl;
    return 0;
}

如果不按题目要求来,不用setR,而用构造函数(带参数的构造函数将类进行初始化)

#include <iostream>
using namespace std;
//此处编写CCircle类的定义
class CCircle{
	public: CCircle();//构造函数
			CCircle(double rr);
			double getPerimeter();
			double getArea()
			{return 3.14*r*r;}//内联函数,注意分号哪里有哪里没有
			//(和上面那两个非内联函数原型声明对比)
	private: double r;
};
CCircle::CCircle(){r=0;}//默认值,如果初始化时没传参,r=0
CCircle::CCircle(double rr){r=rr;}
double CCircle::getPerimeter(){return 3.14*2*r;}
//在类外定义成员函数,格式上就比普通的函数多一个 CCircle::
此处编写主函数
int main()
{
	
	double radius;
    cout << "please enter a radius:";//请输入一个半径
    cin >> radius;
	CCircle circle(radius);//使用带参数的构造函数将circle这个对象初始化
    cout <<"the area is "<< circle.getArea() << endl; 
    cout <<"the perimeter is "<< circle.getPerimeter() << endl;
    return 0;
}//这个程序没法修改circle里的r的值,除非保留setR

第2题

#include <iostream>
using namespace std;
/*
简单带缺省值日期类的设计
设计一个 CDate 类,其包含两个公有方法:
‪‬setDate : 用来设置日期的月、日和年,如果年份没有给出则使用2022;
showDate : 用来显示标准的类似 2022-02-22 的年月日日期
主程序部分已经在编程模板中给出,用于测试该类的功能。
*/
class CDate{
public:
	void setDate(int m, int d, int y );//函数原型声明
	void showDate(){cout<<year<<"-"<<month<<"-"<<day<<endl;}//内联函数
private:
	int year,month,day;
};
void CDate::setDate(int m, int d, int y=2022){
	year=y;
	month=m;
	day=d;
}
int main()
{
    CDate oneday,anotherday;
    
    oneday.setDate(1,25,2022);
    anotherday.setDate(12,31);
    
    oneday.showDate();
    anotherday.showDate();
    return 0;
}

第3题

#include <iostream>
#include <cmath>
using namespace std;
class CPoint{
private:
	double x,y;
public:
	CPoint():x(0),y(0){}//没有分号
	CPoint(double xVal, double yVal):x(xVal),y(yVal){}
	void setXY(double xVal,double yVal){x=xVal;y=yVal;}//内联函数
	double getDistance();//原型声明
	void showPoint(){cout<<"("<<x<<", "<<y<<")"<<endl;}//内联函数
};
double CPoint::getDistance(){return sqrt(x*x+y*y);}//函数体在这里
int main()
{
	CPoint a(1.5,1.5),b;
	b.setXY(3, 4);
    cout <<"Point A:";
    a.showPoint();
    cout <<"Point B:";
    b.showPoint();
    cout <<"The distance between the origin point and Point A is "<<a.getDistance()<<endl;
	cout <<"The distance between the origin point and Point A is "<<b.getDistance()<<endl;
    return 0;
}

第4题

#include <iostream>
#include <cmath>
using namespace std;

 //此处给出类的定义
class CArray{
private:
	int *p,size1;//首地址和数组长度
public:
	CArray(int s);
	~CArray();
	void set(int i,int x);
	int get(int i);
	int size();
	double mean();
	void zero();
};
CArray::CArray(int s){
	size1 = s;
	p = new int[size1];//申请内存空间。注意格式(int和[size1]之间有没有空格无所谓)
	zero();//调用成员函数zero
}
CArray::~CArray(){
	cout<<"terminated"<<endl;
	delete [] p;//释放内存空间。注意格式(不过这三个之间有没有空格无所谓)
}
void CArray::set(int i,int x){*(p+i)=x;}
int CArray::get(int i){return p[i];}
double CArray::mean(){int i;double avg=0;
	for(i=0;i<size1;i++)
		{avg=avg+p[i];}
	avg/=size1;
	return avg;
}
void CArray::zero(){
	int j;
	for(j=0;j<size1;j++){p[j]=0;}
}
int main()
{
    int num;
    int x;
    //获取数量
    cout <<"How many?";
    cin>>num;
    //创建数组对象
    CArray a(num);
    cout <<"The array is:" << endl;
    for(int i=0;i < num; i++)
    //此处输出数组元素的值,元素之间使用一个空格间隔
        cout << a.get(i) << " ";
    cout << endl;
    cout <<"Please enter "<<num << " integers:"<<endl;
    for(int i=0;i<num;i++)
    {
        cout <<"No."<<i+1 <<" element:";
    	cin>>x;
    	//此处设置数组元素的值
    	a.set(i, x);
    }
    //输出均值
    cout <<"The average is:";
    //此处输出所有数组元素的均值,输出后不换行
    cout << a.mean();
    cout<<endl;
    return 0;
}

第5题

#include <iostream>
#include <cmath>
using namespace std;

 //此处给出类的定义
class CArray{
private:
	int *p,size1;//首地址和数组长度
public:
	CArray(int s);
	~CArray();
	CArray(CArray &a);/构造函数原型声明:类名(类名 &对象名)
	void set(int i,int x);
	int get(int i);
	int size();
	double mean();
	void zero();
};
CArray::CArray(CArray &a)构造函数定义
{	size1=a.size1;
	p=new int[size1];
	int i;
	for(i=0;i<size1;i++)
	{p[i]=a.p[i];}/
}
CArray::CArray(int s){
	size1 = s;
	p = new int[size1];//申请内存空间。注意格式(int和[size1]之间有没有空格无所谓)
	zero();//调用成员函数zero
}
CArray::~CArray(){
	cout<<"terminated"<<endl;
	delete [] p;//释放内存空间。注意格式(不过这三个之间有没有空格无所谓)
}
void CArray::set(int i,int x){*(p+i)=x;}
int CArray::get(int i){return p[i];}
double CArray::mean(){int i;double avg=0;
	for(i=0;i<size1;i++)
		{avg=avg+p[i];}
	avg/=size1;
	return avg;
}
void CArray::zero(){
	int j;
	for(j=0;j<size1;j++){p[j]=0;}
}
//主函数
int main()
{
    int num;
    int x;
    //输入数据个数
    cout <<"How many?";
    cin>>num;
    //创建数组类对象a
    CArray a(num);
    //为数组类对象a的每个数组元素依次读入数据
    cout <<"Please enter "<<num << " integers for array1:"<<endl;
    for(int i=0;i<num;i++)
    {
        cout <<"No."<<i+1 <<" element:";
    	cin>>x;
    	a.set(i,x);
    }
    // 创建数组类对象b, 并利用数组对象a初始化数组对象b
   CArray b(a);
    cout <<"The array2 is:" << endl;
    for(int i=0;i < num; i++)
    //输出数组对象b的各个元素的值,使用一个空格间隔
        cout<<b.get(i)<<" ";
    cout << endl;
    return 0;
}

第6题

#include <iostream>
using namespace std;
//此处编写CTimeDeposit类的定义

class CTimeDeposit
{
private:
	static double rate;
	int cash,year;
public:
	CTimeDeposit(int x, int y);
	static void setRate(double prate){rate=prate;}//内联函数
	double predict()
    {
        double total;
        total=cash*(1+rate*year);
        return total;
    }
};
CTimeDeposit::CTimeDeposit(int x, int y)
{
	cash=x;
	year=y;
}
double CTimeDeposit::rate=0.02;

//主程序
int main()
{
	//读入本金和存款年限
	int money,years;
	cin>>money>>years;

	//生成存款单
	CTimeDeposit dep(money,years);
	//预测最后能拿到的金额
	cout<<dep.predict()<<endl;

	//换另外一个利率稍微高点的银行
	CTimeDeposit::setRate(0.025);
	cout<<dep.predict()<<endl;

	//再换一个利率为 0.03 的银行
	dep.setRate(0.03);
	cout<<dep.predict()<<endl;

    return 0;
}

第7题

(刚好挨上应该也算,要不然得不了分)

#include <iostream>
#include <cmath>

using namespace std;
// 此处编写类的定义

class CRect {
public:
	CRect(int l, int t, int r, int b);
	friend int isRectIntersected(CRect &a, CRect &b);
private:
	int left,top,right,bottom;
};
CRect::CRect(int l, int t, int r, int b){
	left = l;
	top = t;
	right = r;
	bottom = b;
	if (left>right)
        {swap(left,right);}
	if (bottom>top)
        {swap(bottom,top);}
    // 确保矩形是有效的(即左上角在右下角的左上方)
}

//此处编写isRectIntersected函数,判断两个矩形是否相交,若相交返回1,否则返回0
int isRectIntersected(CRect &a, CRect &b){
	if(a.bottom>b.top || b.bottom>a.top || a.left>b.right || b.left>a.right)
	{return 0;}
	else {return 1;}
}

//主程序
int main()
{
	int x1,y1,x2,y2;

	cin>>x1>>y1>>x2>>y2;
	CRect rect1(x1,y1,x2,y2);
	cin>>x1>>y1>>x2>>y2;
	CRect rect2(x1,y1,x2,y2);

	cout<<isRectIntersected(rect1,rect2)<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值