华中科技大学SPOC编程题第七章

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

猜你喜欢

转载自blog.csdn.net/weixin_51236357/article/details/112196181
今日推荐