## Date类的定义及使用
题目描述
定义一个Date类,该类有year、month和day三个私有成员,用于存储日期的年、月和日信息。
为该类定义默认构造函数、带参的构造函数、复制构造函数和读写数据成员的函数setDate和showDate。
其中,setDate用于设置年月日信息,showDate用于输出日期信息。
在主函数中用不同的构造函数创建Date对象并进行测试。
输入描述
本题没有输入
输出描述
按样例输出输出相关信息
提示
注意:程序的开始部分(必要的文件包含和using namespace std; )和main函数已经写好了,你只需要定义Date类并实现它的成员函数即可(只需要提交这部分代码)。
main函数如下:
int main(){
Date d1;
d1.showDate();
Date d2(2021,3,13);
d2.showDate();
d2.setDate(2021,5,1);
d2.showDate();
Date d3(d1);
d3.showDate();
return 0;
}
样例输出
2021/4/16
2021/3/13
2021/5/1
2021/4/16
#include<iostream>
using namespace std;
class Date{
public:
Date(){
year = 2021;
month = 4;
day = 16;
}
Date(int y, int m, int d) {
setDate(y, m, d);
}
Date(const Date & c) {
year=c.year;
month=c.month;
day=c.day;
}
void setDate(int y, int m, int d);
void showDate();
private:
int year;
int month;
int day;
};
void Date::setDate(int y, int m, int d){
year = y;
month = m;
day = d;
}
void Date::showDate(){
cout << year << "/" << month << "/" << day << endl;
}
## 三角形求面积
题目描述
设计一个Point类,有两个私有的数据成员x和y,存储横坐标和纵坐标,并为该类定义各种构造函数。
再设计一个三角形类Triangle,该类有3个Point类的私有对象成员,分别代表三角形的三个顶点。
为该类定义各种构造函数。
将三角形类声明为Point类的友元类,在三角型类中定义一个成员函数double getArea(); ,用来求三角形的面积。
在主函数中创建三角形对象,计算并输出面积。
输入描述
输入三行,每行输入一个点的横坐标、纵坐标
输出描述
输出三角形的面积
提示
程序的开始部分(必要的头文件包含和using namespace std;)和main函数已经写好了,你只需要设计Point类和Triangle类。(只需要提交这部分代码)
main函数如下:
int main(){
double x,y;
cin>>x>>y;
Point a(x,y);
cin>>x>>y;
Point b(x,y);
cin>>x>>y;
Point c(x,y);
Triangle t(a,b,c);
cout<<t.getArea()<<endl;
return 0;
}
样例输入
0 0
0 5
5 0
样例输出
12.5
#include<iostream>
#include<cmath>
using namespace std;
class Point {
friend class Triangle;
private:
double x, y;
public:
Point() :x(0), y(0) {}
Point(double x, double y) :x(x), y(y) {}
Point(Point& p) {
x = p.x;
y = p.y;
}
~Point() {};
double getX()
{
return x;
}
double getY()
{
return y;
}
};
class Triangle {
private:
Point p1, p2, p3;
public:
Triangle(Point a, Point b, Point c) {
p1 = a;
p2 = b;
p3 = c;
}
Triangle(Triangle& t)
{
p1 = t.p1;
p2 = t.p2;
p3 = t.p3;
}
~Triangle() {};
double getArea();
};
double Triangle::getArea()
{
double ab = sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
double ac = sqrt((p3.x - p1.x) * (p3.x - p1.x) + (p3.y - p1.y) * (p3.y - p1.y));
double bc = sqrt((p3.x - p2.x) * (p3.x - p2.x) + (p3.y - p2.y) * (p3.y - p2.y));
double p = (ab + bc + ac) / 2;
double s = sqrt(p * (p - ab) * (p - ac) * (p - bc));
return s;
}
## 学生自动编号
题目描述
定义一个学生类Student,该类有姓名、学号、年龄、专业等私有成员。除此之外,该类还有一个静态数据成员NUM。
为该类定义必要的成员函数,包括构造函数和其他函数。
构造函数要负责对学生的姓名、年龄和专业进行初始化,而学号则需要在NUM的基础上进行自动编号。
第一个学生的学号是20200001,第二个学生的学号是20200002,依次类推。
在main函数中创建学生对象并输出相关信息。
输入描述
本题没有输入
输出描述
根据样例输入进行输出
提示
程序的开头(必要的文件包含和using namespace std;)和main函数已经完成,你只需要设计Student类并提交这部分代码即可。
main函数如下:
int main(){
Student s1;
s1.showInfo();
Student s2("Tom","Computer",19);
s2.showInfo();
Student s3(s1);
s3.showInfo();
s2.showInfo();
return 0;
}
注意:专业成员请不要命名为major
样例输入
无
样例输出
Mike 20200001 Math 18
Tom 20200002 Computer 19
Mike 20200003 Math 18
Tom 20200002 Computer 19
#include<iostream>
using namespace std;
class Student
{
private:
string name;
static int NUM;
int num;
int old;
string lesson;
public:
Student():name("Mike"),lesson("Math"),old(18)
{
NUM++;
num = NUM;
}
Student(string name,string lesson, int old):name(name),lesson(lesson),old(old)
{
NUM++;
num = NUM;
}
Student(Student& p);
~Student()
{
NUM--;
}
void showInfo();
};
int Student::NUM = 20200000;
Student::Student(Student& p)
{
name = p.name;
lesson = p.lesson;
old = p.old;
NUM++;
num = NUM;
}
void Student::showInfo()
{
cout << name << " " << num << " " << lesson << " " << old << endl;
}
## const的使用
题目描述
定义测试类Test,该类有私有数据成员int x;
程序的main函数已经写好了,请根据main函数的情况,给出Test类的完整定义。
main函数如下:
int main(){
int n;
cin>>n;
Test t1(n);
t1.printInfo();
const Test t2(n);
t2.printInfo();
t1.setX(n+5);
t1.printInfo();
const Test &t3=t1;
t3.printInfo();
return 0;
}
输入描述
输入一个整数n
输出描述
输出4行信息
提示
你需要提交除了main函数之外的程序其余部分。
样例输入
5
样例输出
10
5
20
10
#include<iostream>
using namespace std;
class Test
{
private:
int x;
public:
Test(int n)
{
x = n;
}
void setX(int x)
{
this->x = x;
}
void printInfo();
void printInfo() const;
};
void Test::printInfo()
{
cout<<x * 2<<endl;
}
void Test::printInfo() const
{
cout << x << endl;
}
## 构造函数与析构函数的执行顺序
题目描述
定义四个类A、B、C、D,其中D类中包含A、B、C类的对象成员。main函数已经写好,请根据main函数给出四个类的完整定义。
main函数如下:
int main(){
D d;
return 0;
}
输入描述
本题没有输入
输出描述
按输出样例输出
提示
你需要提交main函数之外的其他代码
样例输入
无
样例输出
B’s constructor is called!
C’s constructor is called!
A’s constructor is called!
D’s constructor is called!
D’s destructor is called!
A’s destructor is called!
C’s destructor is called!
B’s destructor is called!
#include<iostream>
using namespace std;
class A
{
public:
A() { cout << "A's constructor is called!" << endl; }
~A() { cout << "A's destructor is called!" << endl; }
};
class B
{
public:
B() { cout << "B's constructor is called!" << endl; }
~B() { cout << "B's destructor is called!" << endl; }
};
class C
{
public:
C() { cout << "C's constructor is called!" << endl; }
~C() { cout << "C's destructor is called!" << endl; }
};
class D:B,C,A
{
public:
D() { cout << "D's constructor is called!" << endl; }
~D() { cout << "D's destructor is called!" << endl; }
};
## Circle类的使用
题目描述
设计一个Point类,有两个私有的数据成员x和y,存储横坐标和纵坐标,并为该类定义各种构造函数。
再设计一个Circle类,该类有私有成员Point center; 代表圆心,以及私有数据成员double radius; 代表半径。
为该类设计求面积和半径的成员函数。圆周率数据使用3.14159265。
再为该类设计一个判断某点是否在圆内部的成员函数(如果点在圆周上则不算在圆内部)。
请根据下面的main函数完成类的设计:
int main(){
double x,y,radius;
cin>>x>>y;
cin>>radius;
Circle c(x,y,radius);
cin>>x>>y;
Point p(x,y);
cout<<c.getArea()<<endl;
cout<<c.getPerimeter()<<endl;
if(c.isInTheCircle(p))
cout<<"该点在圆内部!"<<endl;
else
cout<<"该点不在圆内部!"<<endl;
return 0;
}
输入描述
第一行输入圆心坐标
第二行输入圆的半径
第三行输入某个点的坐标
输出描述
第一行输出圆的面积
第二行输出圆的周长
第三行输出某个点是否在圆内部
提示
你需要提交main函数之外的其他代码部分
样例输入
0 0
3
2.5 2.5
样例输出
28.2743
18.8496
该点不在圆内部!
#include<iostream>
using namespace std;
class Point
{
private:
double x, y;
public:
Point(double x,double y)
{
this->x = x;
this->y = y;
}
double getX() { return x; }
double getY() { return y; }
};
class Circle
{
private:
Point center;
double radius;
public:
Circle(double x,double y,double r):center(x,y),radius(r){}
double getArea()
{
double pi = 3.14159265;
double s = pi * radius * radius;
return s;
}
double getPerimeter()
{
double pi = 3.14159265;
double Perimeter = 2 * pi * radius;
return Perimeter;
}
double isInTheCircle(Point p)
{
double squareDistance = (center.getX() - p.getX()) * (center.getX() - p.getX()) + (center.getY() - p.getY()) * (center.getY() - p.getY());
if (squareDistance < radius * radius)
return 1;
else
return 0;
}
};
# 二维数组类Array2D
题目描述
创建一个二维数组类Array2D。该类有私有成员rows,用于表示内部的double型二维数组的行数。
创建二维数组类对象时,需初始化rows,并根据它们的值在内部动态内存分配一个rows行8列的double型二维数组。
该类有返回行数和列数的成员函数;有求全数组平均值的成员函数;有求某一行平均值成员函数;
该类还有求全数组最大值和最小值的成员函数,以及求某一行最大值或最小值的成员函数。
请根据下面的main函数完成该类的设计:
int main(){
int r;
double n;
cin>>r;
Array2D arr(r);
int i,j;
for(i=0;i<r;i++)
for(j=0;j<8;j++){
cin>>n;
arr.setElem(i,j,n);
}
cout<<arr.getRows()<<" "<<arr.getColumns()<<endl;
cout<<arr.getMaxOfRow(0)<<" "<<arr.getMinOfRow(0)<<" "<<arr.getAvgOfRow(0)<<endl;
cout<<arr.getMaxOfRow(r-1)<<" "<<arr.getMinOfRow(r-1)<<" "<<arr.getAvgOfRow(r-1)<<endl;
cout<<arr.getMaxOfArray()<<" "<<arr.getMinOfArray()<<" "<<arr.getAvgOfArray()<<endl;
return 0;
}
输入描述
第一行输入二维数组的行数
从第二行开始,每一行输入二维数组的一行
输出描述
第一行输出行数和列数
第二行输出数组第一行的最大值、最小值和平均值
第三行输出数组最后一行的最大值、最小值和平均值
第四行输出整个数组的最大值、最小值和平均值
提示
你需要提交除了main函数之外的其他代码
样例输入
5
1 2 3 4 5 6 7 8
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
4 5 6 7 8 9 10 11
样例输出
5 8
8 1 4.5
11 4 7.5
11 1 3.6
释放了一个5行8列的数组
#include<iostream>
#include<malloc.h>
using namespace std;
class Array2D
{
private:
int rows;
double(*arr)[8];
public:
Array2D(int rows)
{
this->rows = rows;
arr = (double(*)[8])malloc(rows * 8 * sizeof(double));
}
~Array2D()
{
cout << "释放了一个" << rows << "行8列的数组" << endl;
}
void setElem(int i, int j, double k)
{
arr[i][j] = k;
}
int getRows()
{
return rows;
}
int getColumns()
{
int j = 8;
return j;
}
double getMaxOfRow(int a)
{
double max = arr[a][0];
for (int i = 0; i < 8; i++)
{
if (arr[a][i] > max)
max = arr[a][i];
}
return max;
}
double getMinOfRow(int a)
{
double min = arr[a][0];
for (int i = 0; i < 8; i++)
{
if (arr[a][i] < min)
min = arr[a][i];
}
return min;
}
double getAvgOfRow(int a)
{
double sum = 0;
for (int i = 0; i < 8; i++)
{
sum += arr[a][i];
}
double avg;
avg = sum / 8;
return avg;
}
double getMaxOfArray()
{
double max = arr[0][0];
for (int i=0; i < rows; i++)
{
for (int j=0; j < 8; j++)
{
if (arr[i][j] > max)
max = arr[i][j];
}
}
return max;
}
double getMinOfArray()
{
double min = arr[0][0];
for (int i=0; i < rows; i++)
{
for (int j=0; j < 8; j++)
{
if (arr[i][j] <min)
min = arr[i][j];
}
}
return min;
}
double getAvgOfArray()
{
double sum = 0;
for (int i=0; i < rows; i++)
{
for (int j=0; j < 8; j++)
{
sum += arr[i][j];
}
}
double avg;
avg = sum / (rows * 8);
return avg;
}
};
## 求面积函数重载
题目描述
定义一个圆形类Cirlce和矩形类Rectangle,定义必要的成员
再定义一个求面积的工具类Area,该类有两个重载函数calArea可以分别用于求圆形对象的面积和矩形对象的面积
main函数已经完成,请根据main函数的内容完成以上三个类的定义:
int main(){
double r,h,w;
cin>>r>>h>>w;
const Circle c1(r);
Circle c2(r+2);
const Rectangle r1(h,w);
Rectangle r2(h+2,w+2);
cout<<Area::calArea(c1)<<endl;
cout<<Area::calArea(c2)<<endl;
cout<<Area::calArea(r1)<<endl;
cout<<Area::calArea(r2)<<endl;
return 0;
}
输入描述
输入圆的半径、矩形的高、矩形的宽
输出描述
输出不同对象的面积,一行一个
提示
你需要提交main函数之外的代码,圆周率的值用3.14159265
样例输入
1 2 3
样例输出
3.14159
28.2743
6
20
#include<iostream>
using namespace std;
class Circle
{
double radius;
public:
Circle(double r) :radius(r) {}
double getRadius() const {
return radius;
}
Circle(Circle& r) = delete; //删除复制构造函数
Circle(const Circle& r) = delete; //删除复制构造函数
};
class Rectangle
{
double height, width;
public:
Rectangle(double h, double w) :height(h), width(w) {}
double getHeight()const {
return height;
}
double getWidth()const {
return width;
}
Rectangle(Rectangle& r) = delete; //删除复制构造函数
Rectangle(const Rectangle& r) = delete; //删除复制构造函数
};
class Area
{
public:
static double calArea(const Circle&circle)
{
double radius,PI=3.14159265;
radius = circle.getRadius();
return PI*radius*radius;
}
static double calArea(const Rectangle&rectangle)
{
double height=rectangle.getHeight();
double width=rectangle.getWidth();
return height*width;
}
};
## 求面积函数重载Plus
题目描述
本题和“求面积函数重载”一题的需求类似,main函数不变,而且程序中的Cirlce类和Rectangle类已经替你实现好了。这两个类删除了复制构造函数。
Circle类的定义如下:
class Circle{
double radius;
public:
Circle(double r):radius(r){}
double getRadius() const{
return radius;
}
Circle(Circle &r)=delete; //删除复制构造函数
Circle(const Circle &r)=delete; //删除复制构造函数
};
Rectangle类的实现如下:
class Rectangle{
double height,width;
public:
Rectangle(double h,double w):height(h),width(w){}
double getHeight()const{
return height;
}
double getWidth()const{
return width;
}
Rectangle(Rectangle &r)=delete; //删除复制构造函数
Rectangle(const Rectangle &r)=delete; //删除复制构造函数
};
你只需要实现Area类即可。原来的Area类的实现现在还可以通过测试吗?如果不行,该怎样修改?
输入描述
输入圆的半径、矩形的高、矩形的宽
输出描述
输出不同对象的面积,一行一个
提示
你只需要提交Area类的代码,程序的开始部分和结尾部分都已经写好,圆周率的值用3.14159265
样例输入
1 2 3
样例输出
3.14159
28.2743
6
20
#include<iostream>
using namespace std;
class Area
{
public:
static double calArea(const Circle&circle)
{
double radius,PI=3.14159265;
radius = circle.getRadius();
return PI*radius * radius;
}
static double calArea(const Rectangle&rectangle)
{
double height=rectangle.getHeight();
double width=rectangle.getWidth();
return height * width;
}
};
## Rectangle类的设计及使用
题目描述
设计一个矩形类Rectangle。其属性为矩形的左下角与右上角两个点的坐标。
main函数已经完成,请根据main函数完成该类的设计:
int main(){
int top,bottom,left,right;
cin>>top>>right>>bottom>>left;
Rectangle r(top,right,bottom,left);
r.showLeftTop(); //输出左上顶点的坐标
r.showRightTop(); //输出右上顶点的坐标
r.showLeftBottom(); //输出左下顶点的坐标
r.showRightBottom(); //输出右下顶点的坐标
cout<<r.getHeight()<<" "<<r.getWidth()<<endl; //输出高和宽
cout<<r.getArea()<<" "<<r.getPerimeter()<<endl; //输出面积和周长
return 0;
}
注意:输入应该保证右上顶点的横坐标大于左下顶点的横坐标且右上顶点的纵坐标大于左下顶点的纵坐标,如果不满足,则将所有坐标设置为0
输入描述
依次输入右上顶点的纵坐标、横坐标和左下顶点的纵坐标、横坐标
输出描述
输出左上顶点的坐标
输出右上顶点的坐标
输出左下顶点的坐标
输出右下顶点的坐标
输出高和宽
输出面积和周长
提示
你需要提交main函数之外的代码部分
样例输入
5 5 3 3
样例输出
3,5
5,5
3,3
5,3
2 2
4 8
#include<iostream>
#include<string>
using namespace std;
class Rectangle{
public:
Rectangle(int a,int b,int c,int d){
if(a>c && b>d){
top=a;right=b;bottom=c;left=d;
}
};
void showLeftTop();
void showRightTop();
void showLeftBottom();
void showRightBottom();
int getHeight();
int getArea();
int getWidth();
int getPerimeter();
private:
int top=0,right=0,bottom=0,left=0;
};
void Rectangle::showLeftTop(){
cout<<left<<','<<top<<endl;}
void Rectangle::showRightTop(){
cout<<right<<','<<top<<endl;}
void Rectangle::showLeftBottom(){
cout<<left<<','<<bottom<<endl;}
void Rectangle::showRightBottom(){
cout<<right<<','<<bottom<<endl;}
int Rectangle::getHeight(){
int height=top-bottom;
return height;
}
int Rectangle::getWidth(){
int width=right-left;
return width;
}
int Rectangle::getArea(){
int area=(top-bottom)*(right-left);
return area;
}
int Rectangle::getPerimeter(){
int perimeter=2*(top-bottom)+2*(right-left);
return perimeter;
}
## 重载DataLength函数
题目描述
定义一个Test类,该类有两个重载的成员函数DataLength,一个接收int型的参数,另一个接收string型的参数
第一个DataLength函数用于计算一个整型值的位数并返回
第二个DataLength函数用于计算string变量字符串的实际长度并返回
main函数已经写好,请根据下面的main函数完成该类的设计:
``
int main(){
int a;
string s;
getline(cin,s);
cin>>a;
Test t;
cout<<t.DataLength(s)<<endl;
cout<<t.DataLength(a)<<endl;
return 0;
}
输入描述
第一行输入一行字符串
第二行输入一个整数
输出描述
分两行分别输出字符串的实际长度和整数的位数
提示
你需要提交除main函数之外的其他代码
样例输入
Hello World
12345678
样例输出
11
8
@[TOC](#include<iostream>
#include<string>
using namespace std;
class Test
{
public:
int DataLength(string x);
int DataLength(int y);
};
int Test::DataLength(string s)
{
int a =s.length();
return a;
};
int Test::DataLength(int a)
{
int i;
for(i=0;a!=0;i++)
a=a/10;
return i;
};)