Advertisement

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

阅读量:

1定义球类(20分)
题目内容:定义一个球类,数据成员为球半径(double)

设计计算球的面积和体积的成员函数,写出主函数测试编写的类。

求球面积公式:S=4 pi r^2

求球体积公式:V=4/3 pi r^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;
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

全部评论 (0)

还没有任何评论哟~