1定义球类(20分)
题目内容:定义一个球类,数据成员为球半径(double)
设计计算球的面积和体积的成员函数,写出主函数测试编写的类。
求球面积公式:S=4pir^2
求球体积公式:V=4/3pir^3
其中pi是圆周率,r2代表r的平方,r3代表r的立方,
请注意这里给出的是数学表达式,不是c++表达式
请补充完整类的定义
#include
using namespace std;
const double PI=3.14159;
void Sphere::show()
{
cout<<"半径为"<<r<<"的球表面积为"<<getS()<<endl;
cout<<"半径为"<<r<<"的球体积为"<<getV()<<endl;
}
int main()
{
double r1,r2;
cin>>r1>>r2;
Sphere q1(r1),q2;
q1.show();
q2.show();
q2.setR(r2);
q2.show();
return 0;
}
输入格式:两个球的球半径
输出格式:按show函数格式输出
输入样例:5 6
输出样例:
半径为5的球表面积为314.159
半径为5的球体积为523.598
半径为0的球表面积为0
半径为0的球体积为0
半径为6的球表面积为452.389
半径为6的球体积为904.778
时间限制:500ms内存限制:128000kb
#include <iostream>
using namespace std;
const double PI=3.14159;
class Sphere
{
double r;
public:
Sphere(double R);
Sphere();
void setR(double R);
double getS();
double getV();
void show();
};
Sphere::Sphere(double R){
r=R;};
Sphere::Sphere(){
r=0;};
void Sphere::setR(double R)
{
r=R;
}
double Sphere::getS()
{
return 4*PI*r*r;}
double Sphere::getV()
{
return 4*PI*r*r*r/3;}
void Sphere::show()
{
cout<<"半径为"<<r<<"的球表面积为"<<getS()<<endl;
cout<<"半径为"<<r<<"的球体积为"<<getV()<<endl;
}
int main()
{
double r1,r2;
cin>>r1>>r2;
Sphere q1(r1),q2;
q1.show();
q2.show();
q2.setR(r2);
q2.show();
return 0;
}
2定义一个日期类(25分)
题目内容:
定义一个日期类Date,包含年、月、日三个数据成员(int),定义带有3个参数的构造函数,
以及一个求日期是当年的第几天的成员函数和输出日期的成员函数,
日期的显示格式为年/月/日。编写主函数进行测试。
(每年各月天数分别为31,28,31,30,31,30,31,31,30,31,30,31,闰年2月为29天,
闰年的条件year%40&&year % 100!=0)||year%4000))
请补充完整类的定义
#include
using namespace std;
void Date::show()
{
cout<<year<<"/"<<month<<"/"<<day<<endl;
}
int main()
{
int y,m,d;
cin>>y>>m>>d;
Date d1(y,m,d),d2;
d1.show();
cout<<d1.getDay()<<endl;
cin>>y>>m>>d;
d2.SetD(y,m,d);
d2.show();
cout<<d2.getDay()<<endl;
system("pause");
return 0;
}
输入格式:年 月 日
输出格式:见输出样例
输入样例:2020 4 8
1997 7 1
输出样例:
2020/4/8
99
1997/7/1
182
时间限制:500ms内存限制:128000kb
#include <iostream>
using namespace std;
class Date
{
int year, month, day;
public:
Date(int a, int b, int c);
Date();
void SetD(int a, int b, int c);
void show();
int getDay();
};
Date::Date()
{
year = 1970; month = 1; day = 1;
};
Date::Date(int a, int b, int c)
{
year = a; month = b; day = c;
};
void Date::SetD(int a, int b, int c)
{
year = a; month = b; day = c;
}
int Date::getDay()
{
int s = 0;
int a[12] = {
31,28,31,30,31,30,31,31,30,31,30,31 };
if(year % 4 == 0 && year % 100 != 0|| year % 400 == 0)
a[1] += 1;
for (int i = 0; i < month - 1; i++)
s += a[i];
s += day;
return s;
}
void Date::show()
{
cout << year << "/" << month << "/" << day << endl;
}
int main()
{
int y, m, d;
cin >> y >> m >> d;
Date d1(y, m, d), d2;
d1.show();
cout << d1.getDay() << endl;
cin >> y >> m >> d;
d2.SetD(y, m, d);
d2.show();
cout << d2.getDay() << endl;
system("pause");
return 0;
}
3定义一个复数类(25分)
题目内容:
定义复数类Complex,并使用成员函数add实现复数加法,并输出结果。注意虚部为负数时,要写成3-4i,不能写成3±4i,如果实部或者虚部为0,则可以不输出,例如:4i不能输出为0+4i,而是直接输出4i,4不能输出为4+0i,而是直接输出4。
请定义Complex类。
#include
using namespace std;
int main()
{
int r1,r2,i1,i2;
cin>>r1>>i1>>r2>>i2;
Complex a(r1,i1),b(r2,i2),c;
c=a.add(b);//c=a+b
c.show();
return 0;
}
输入格式:实部和虚部
输出格式:见输出样例
输入样例:3 4 5 6
输出样例:8+10i
时间限制:500ms内存限制:128000kb
#include<iostream>
using namespace std;
class Complex
{
int r, i;
public:
Complex();
Complex(int R, int I);
Complex add(Complex b);
void show();
};
Complex::Complex()
{
r = 0; i = 0;
}
Complex::Complex(int R, int I)
{
r = R; i = I;
}
Complex Complex::add(Complex b)
{
Complex c;
c.r = b.r + r;
c.i = b.i + i;
return c;
}
void Complex::show()
{
if (r == 0 && i == 0)
cout << 0;
else if (r == 0 && i != 0)
cout << i << 'i';
else if (r != 0 && i == 0)
cout << r;
else if (i > 0)cout << r << '+' << i << 'i';
else cout << r << i << 'i';
}
int main()
{
int r1, r2, i1, i2;
cin >> r1 >> i1 >> r2 >> i2;
Complex a(r1, i1), b(r2, i2), c;
c = a.add(b);//c=a+b
c.show();
return 0;
}
4元素类和集合类(30分)
题目内容:下面有元素类Element和集合类Set的定义,请看代码及代码后面的注释将类的定义补充完整,其中,集合中不能有重复的元素。
#include
#include
using namespace std;
const int MaxElement=100;
class Element{ //“元素”类
public:
int n;
Element(int i=0):n(i){}
};
class MySet{ //“集合”类
Element *element; //指向存储元素的数组的指针
int size; //数组大小
int counter; //数组中元素的个数
int current; //用于表示扫描位置,及当前被扫描元素在数组中的下标
public:
MySet():element(new Element[100]), size(100), counter(0), current(0){}
~MySet(){ delete[]element; }
void add(Element ele); //向集合中添加一个元素,保持由小到大的顺序。
void remove(Element ele); //删除集合中指定的元素
void scanFirst(){ current=0; } //将扫描位置定位于首元素
void scanNext(){ ++current; } //将扫描位置定位于下一个元素
Element get()const{ return element[current]; } //返回当前被扫描的元素
bool isEnded()const{ return current >= counter; } //如果已经没有更多的元素可扫描了,返回true。
void show(); //显示集合中所有元素
};
void MySet::show(){
scanFirst(); //扫描位置定位于首元素
while(!isEnded()){
cout<<get().n<<" ";
scanNext(); //扫描定位于下一个元素
}
cout<<endl;
}
int main(){
int a[7],i;
for(i=0;i<7;i++)
cin>>a[i];
MySet set;
i=0;
set.add(Element(a[i++]));
set.add(Element(a[i++]));
set.add(Element(a[i++]));
set.add(Element(a[i++]));
set.show();
set.remove(Element(a[i++]));
set.remove(Element(a[i++]));
set.add(Element(a[i++]));
set.show();
system("pause");
return 0;
}
输入格式:数组a的元素
输出格式:见输出样例
输入样例:3 8 5 0 5 4 8
输出样例:
0 3 5 8
0 3 8
时间限制:500ms内存限制:128000kb
#include<iostream>
#include<cmath>
using namespace std;
const int MaxElement = 100;
class Element {
//“元素”类
public:
int n;
Element(int i = 0) :n(i) {
}
};
class MySet {
//“集合”类
Element* element; //指向存储元素的数组的指针
int size; //数组大小
int counter; //数组中元素的个数
int current; //用于表示扫描位置,及当前被扫描元素在数组中的下标
public:
MySet() :element(new Element[100]), size(100), counter(0), current(0) {
}
~MySet() {
delete[]element; }
void add(Element ele); //向集合中添加一个元素,保持由小到大的顺序。
void remove(Element ele); //删除集合中指定的元素
void scanFirst() {
current = 0; } //将扫描位置定位于首元素
void scanNext() {
++current; } //将扫描位置定位于下一个元素
Element get()const {
return element[current]; } //返回当前被扫描的元素
bool isEnded()const {
return current >= counter; } //如果已经没有更多的元素可扫描了,返回true。
void show(); //显示集合中所有元素
};
void MySet::add(Element ele)
{
int flag1 = 0;
for (current; current< counter; current++)
{
if (get().n == ele.n) {
flag1 = 1; break; }
}
if (flag1 == 0)
{
int flag2 = 0;
if (counter == 0) element[0] = ele;
else
for (current = counter - 1; current >= 0; current--)
{
if (get().n < ele.n)
{
element[current + 1] = ele; flag2 = 1; break;
}
element[current + 1] = element[current];
}
if (flag2 == 0) element[0] = ele;
counter++;
}
}
void MySet::remove(Element ele)
{
int a = 0;
for (current = 0; current < counter; current++)
{
if (get().n == ele.n)
a++;
element[current] = element[current + a];
}
counter -= a;
}
void MySet::show() {
scanFirst(); //扫描位置定位于首元素
while (!isEnded()) {
cout << get().n << " ";
scanNext(); //扫描定位于下一个元素
}
cout << endl;
}
int main() {
int a[7], i;
for (i = 0; i < 7; i++)
cin >> a[i];
MySet set;
i = 0;
set.add(Element(a[i++]));
set.add(Element(a[i++]));
set.add(Element(a[i++]));
set.add(Element(a[i++]));
set.show();
set.remove(Element(a[i++]));
set.remove(Element(a[i++]));
set.add(Element(a[i++]));
set.show();
system("pause");
return 0;
}