zoukankan      html  css  js  c++  java
  • C++高级语言程序设计实验六-中国矿业大学

    第一题

    题目描述

    自定义一个复数类型Complex,其中含有若干成员函数,使用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明Complex类对象,对定义的各成员函数进行调用。
    class Complex {
    double real;
    //复数实部
    double imag;
    //复数虚部
    public:
    Complex ();
    //无参构造函数,将复数对象的实部和虚部均置为0
    Complex (double r, double i);
    //有参构造函数,设置对象的实部和虚部
    Complex AddCom(Complex c2);
    //调用者对象与对象c2相加,返回Complex类对象
    void OutCom () ;
    //输出调用者对象的有关数据(各分量)
    };
    具体要求如下:
    1、实现有参构造函数 Complex (double r, double i);
    2、实现 Complex AddCom(Complex c2); 调用者对象与对象c2相加,返回Complex类对象
    3、实现void OutCom () ;实现输出调用者对象的有关数据分量(一定要输出虚部的符号i),如果该数为纯虚数时,不需要输出实部,当虚部为0时,不需要输出虚部。
    4.编制主函数main,作用有参函数说明类对象cx,cy,使用 Complex 调用AddCom实现复数加法,并将相加的结果调用 OutCom方法以复数的形式输出。

    源代码

    #include<iostream>
    using namespace std;
    class Complex
    {
        private:
            double real;
            double imag;
        public:
            Complex()
            {
                real=0;
                imag=0;
            }
            Complex(double r, double i)
            {
                real=r;
                imag=i;
            }
            Complex AddCom(Complex c2);
            void OutCom();
    };
     
    Complex Complex::AddCom(Complex c2)
    {
        real += c2.real;
        imag += c2.imag;
        return * this;
    }
    void Complex::OutCom()
    {
        if (real == 0)
            cout << imag << "i";
        else if (imag == 0)
            cout << real;
        else
            cout << real << "+" << imag << "i";
    }
    int main()
    {
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        Complex c1(a, b);
        Complex c2(c, d);
        c1.AddCom(c2);
        c1.OutCom();
    }
    

    result

    第二题

    题目描述

    自定义一个简单日期类 DateType,它具有数据成员 y、m、d,用来表示当前日期的年、月、日。
    而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。
    class DateType {
    //自定义的日期类 DateType
    int y,m,d;
    //数据成员,表示当前日期的年、月、日
    public:
    DateType(int y0=1, int m0=1, int d0=1);
    //构造函数,设定年、月、日;并设置参数默认值
    void IncrementDay();
    //增加 1 天
    bool Equal(DateType dt2);
    //判断二日期是否相等
    void PrintDate();
    //屏幕输出日期对象的有关数据(年、月、日)
    };
    1、完成有参构造函数
    2、完成 void IncrementDay()函数,计算天数加1后的日期。
    3、完成Equal(DateType dt2)函数,判断两个日期是否相等。
    4、完成打印输出函数PrintDate(),在屏幕上输出日期对象的有关数据(年、月、日)
    5、编写并完成主函数,实现输入包含六个整数,说明DateType类对象dt1,dt2,分别是dt1和dt2的年月日。请先输出dt1,dt2,然后判断dt1,dt2是否相等,再对dt1,dt2分别增加一天。最后输出dt1,dt2。
    注意:在IncrementDay成员函数中,当对日期增加1天后,要注意所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N(注意闰年与平年的2月份天数不一样),若加1之后的“日”数值超过所在的月份具有的天数N时,“进位”到月,而月份若超过12时还要“进位”到年等。

    源代码

    #include<iostream> 
    using namespace std;
    int mon[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    class DateType
    {
        int y, m, d;
        public:
            DateType(int y0 = 1, int m0 = 1, int d0 = 1) 
            {
                y = y0;
                m = m0;
                d = d0;
            }
            void  IncrementDay();
            bool  Equal(DateType  d2);
            void  PrintDate()
            {
                cout << y << ":" << m << ":" << d << endl;
                }
    };
    void  DateType::IncrementDay()
    {
        if(m=2)
        {
            if (!(((y % 4) != 0) || ((y % 100) == 0) && ((y % 400) != 0)))
            {
                if ((d + 1) <= 29)
                    d++;
                else
                {
                    m++;
                    d = 1;
                }
            }
            else
            {
                if ((d + 1) <= 28)
                d++;
                else
                {
                    m++;
                    d = 1;
                }
            }
        }
        else
        {
            if ((d + 1) <= mon[m])
            d++;
            else if ((m + 1) <= 12)
            {
                m++;
                d = 1;
            }
            else
            {
                y++;
                m = 1;
                d = 1;
            }
        }
    }
    bool DateType::Equal(DateType  d2){
        if (y == d2.y && m == d2.m && d == d2.d)
        return true;
        else return false;
    }
    int main()
    {
        int d1_y, d1_m, d1_d, d2_y, d2_m, d2_d;
        cin >> d1_y >> d1_m >> d1_d >> d2_y >> d2_m >> d2_d;
        DateType dt1(d1_y, d1_m, d1_d), dt2(d2_y, d2_m, d2_d);
        dt1.PrintDate();
        dt2.PrintDate();
        if (dt1.Equal(dt2))
            cout << "True" << endl;
        else
            cout << "False" << endl;
        dt1.IncrementDay();
        dt2.IncrementDay();
        dt1.PrintDate();
        dt2.PrintDate();
        return 0;
    }
    

    result

    第三题

    题目描述

    设计一个学生类(CStudent),其私有数据成员:注册号、姓名、数学、外语、计算机课程的成绩。公有成员函数是:求三门课总成绩的函数 Sum;求三门课平均成绩的函数 Average;显示学生数据信息的函数 Display;设置学生数据信息的函数 SetData。
    1.可按如下样式设计 CStudent类的各数据成员以及成员函数
    class CStudent { //学生类 CStudent
    unsigned long reg_num; //数据成员:注册号
    char name[30]; //数据成员:姓名
    float math, eng, comp; //数据成员:数学、英语、计算机成绩
    public: //公有成员函数
    float Sum(); //求三门课总成绩的函数 Sum
    float Average(); //求三门课平均成绩的函数 Average
    Display(); //显示学生数据信息的函数 Display
    SetData (unsigned long r, char* n, float m, float e, float c) ;
    //设置学生数据信息的函数 SetData
    };
    在主函数,通过使用“CStudent stu[150];”的语句,来说明一个CStudent类对象的数组stu,而后通过各对象stu[i]来处理并求取每一学生的总成绩、平均成绩等。
    (1)输入本次欲处理的学生人数 TOTAL(小于等于 150 的正整数);
    (2)输入全班 TOTAL 个学生的有关信息,依次放入对象数组的各元素 stu[i]中(通过使用“stu[i].SetData(...);”形式的语句来实现);
    (3)对全班TOTAL个学生,依次通过对象stu[i]来求出其总成绩、平均成绩等(其中要使用形如“stu[i].Sum()”以及“stu[i].Average()”式样的对成员函数进行调用的语句),并同时求出全班学生总成绩最高者处于 stu 数组的下标位置idx_max,而后通过使用“stu[idx_max].Display();”来输出该学生有关的全部数据信息。

    源代码

    #include<iostream>
    #include<string.h>
    using namespace std;
    class Cstudent
    {
        unsigned reg_num;
        char name[30];
        float math, eng, comp;
    public:
        float Sum();
        float Average();
        void Display();
        void setData(unsigned long r, char* n, float m, float e, float c);
    };
    void Cstudent::Display()
    {
        cout << reg_num << " " << name << " " << math << " " << eng << " " << comp << endl;
    }
    float Cstudent::Sum()
    {
        return(math + eng + comp);
    }
    float Cstudent::Average()
    {
        return (*this).Sum() / 3;
    }
    void Cstudent::setData(unsigned long r, char* n, float m, float e, float c)
    {
     
        reg_num = r;
        strcpy(name, n);
        math = m;
        eng = e;
        comp = c;
    }
     
    int main()
    {
        int n;
        unsigned long num;
        char name[30];
        float math, eng, comp;
        float max = 0;
        int max_stu = 0;
        cin >> n;
        Cstudent* cp = new Cstudent[n];
         
        int j;
        for (j = 0; j < n; j++)
        {
            cin >> num >> name >> math >> eng >> comp;
            cp[j].setData(num, name, math, eng, comp);
        }
        for (j = 0; j < n; j++)
        {
            if (max < cp[j].Sum())
            {
                max_stu = j;
                max = cp[j].Sum();
            }
     
        }
        cout << "TOTAL=" << n << endl;
        for (int i = 0; i < n; i++)
        {
            cout << "CStudent " << i + 1 << " : ";
            cp[i].Display();
        }
        for (int i = 0; i < n; i++)
        {
            cout << "CStudent" << i + 1 << ".Sum=" << cp[i].Sum();
            cout << ",CStudent" << i + 1 << ".average=" << cp[i].Average() << endl;
        }
        cout << "class_Sum_max=" << max << endl;
        cout << "The infomation of the CStudent with class_Sum_max : ";
        cp[max_stu].Display();
        delete[]cp;
    }
    

    result

    第四题

    题目描述

    设计一个Point(点)类,数据信息包含x轴和y轴的坐标。设计一个Circle(圆)类,数据信息包含圆心和半径。
    要求:(1)数据部分都采用整型;
    (2)圆心作为Circle类中的子对象;
    (3)每个类都包含带有参数的构造函数;
    (4)重载运算符“<<”和“>>”,用于输入输出每个类对象的数据信息;
    (5)主函数内验证各个功能。

    源代码

    #include<iostream>
    using namespace std;
    class Point
    {
        private:
            int x;
            int y;
        public:
            Point(int a,int b):x(a),y(b){}
            int getx(){return x;}
            int gety(){return y;}
            friend istream& operator>>(istream & in, Point &p)
            {
                in>>p.x>>p.y;
                return in;
            }
            friend ostream& operator<<(ostream & out, Point &p)
            {
                out<<"("<<p.x<<","<<p.y<<")"<<endl;
                return out;
            }
    };
    class Circle
    {
        private:
            int r;
            Point p;
        public:
            Circle(int a,int b, int n):p(a,b),r(n){}
            int getr(){return r;}
            friend istream& operator>>(istream & in,Circle &c)
            {
                in>>c.p>>c.r;
                return in;
            }
            friend ostream& operator<<(ostream & out,Circle &c)
            {
                out<<"("<<c.p.getx()<<",";
                c.p.gety()<<")"<<endl;
    c.r<<endl;
                return out;
            }
    };
    int main()
    {
        Point p(0,0);
        cin>>p;
        cout<<p;
        Circle c(0,0,0);
        cin>>c;
        cout<<c;
        return 0;
    }  
    

    result

  • 相关阅读:
    JS 百度地图路书---动态路线
    jQuery---创建和添加节点
    CSS基础
    第一篇:前端知识之HTML内容
    JS高级---为内置对象添加原型方法
    JS DOM属性+JS事件
    Vue-router
    vue使用kkfileview文件预览功能
    JS高级---案例:验证密码的强度
    promise是怎么来的?
  • 原文地址:https://www.cnblogs.com/hujunyao37201/p/14123281.html
Copyright © 2011-2022 走看看