第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;
}