• 实验六--类和对象


    1、

    【问题描述】自定义一个复数类型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方法以复数的形式输出。
    【输入形式】输入包括a,b,c,d四个整数,第一个复数为a+bi,第二个复数为c+di
    【输出形式】
    【样例输入】1 2 3 4
    【样例输出】4+6i
    【样例说明】
    【评分标准】提交源文件“6-1.cpp”。
    题目描述
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    
    class Complex
    {
        private:
            double real,imag;
        public:
             Complex()
             {
                 real=imag=0;
             }
             Complex(double r,double i)
             {
                real=r;imag=i;
             }
             Complex AddCom(Complex c2)
             {
                 Complex tmp;
                 tmp.real=real+c2.real;
                 tmp.imag=imag+c2.imag;
                 return tmp;
             }
             void OutCom()
             {
                 if(real==0&&imag)
                 {
                     cout<<imag<<"i";
                }
                if(real&&imag)
                {
                cout<<real<<"+"<<imag<<"i";
                }
                if(imag==0)
                {
                    cout<<real;
                }
             }
    };
    
    int main()
    {
        double a,b,c,d;
        cin>>a>>b>>c>>d;
        Complex c1(a,b),c2(c,d),c3;
    //    c1(a,b);
    //    c2(c,d);
        c3=c1.AddCom(c2);
        c3.OutCom();   
        return 0;
    }
     

    2、

    前程序片段编程题:实验六 类和对象---实验六(第七章)--日期类(实践2)
    1.
    【问题描述】
    自定义一个简单日期类 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时还要“进位”到年等。
    【输入形式】  两个日期的月、日、年
    【输出形式】
    【样例输入】1 1 1 1999 12 31
    【样例输出】
    1:1:1
    1999:12:31
    False
    1:1:2
    2000:1:1
    题目描述
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    class DateType
    {
        private:
            int y,m,d;
        public:
            DateType(int y0=1,int m0=1,int d0=1)
            {
                y=y0;
                m=m0;
                d=d0;
            }
            void IncrementDay()
            {
                int a[13];
                a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;
                a[2]=28;a[4]=a[6]=a[9]=a[11]=0;
                if(y%100&&y%4==0||y%400==0) a[2]=29;
                d++;
                if(d>a[m])
                {
                    m++;
                    d=1;
                } 
                if(m>12)
                {
                    y++;
                    m=1;
                    d=1;
                }
            }
            bool Equal(DateType dt2)
            {
                if(y==dt2.y&&m==dt2.m&&d==dt2.d) return true;
                return  false;
            }
            void PrintDate()
            {
                cout<<y<<":"<<m<<":"<<d<<endl;
            }
    };
    
    int main()
    {
        int y1,r1,n1,y2,r2,n2;
        cin>>n1>>y1>>r1;
        cin>>n2>>y2>>r2;
        DateType d1(n1,y1,r1),d2(n2,y2,r2);
        d1.PrintDate();
        d2.PrintDate();
        if(d1.Equal(d2)) cout<<"True
    ";
        else cout<<"False
    ";
        d1.IncrementDay();d1.PrintDate();
        d2.IncrementDay();d2.PrintDate(); 
        return 0;
    }

    3、题目描述

    【问题描述】
    设计一个学生类(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();”来输出该学生有关的全部数据信息。
    3.程序执行后的输入输出界面样式可设计为:
    TOTAL=3
    CStudent 1 : 100001 ma 78 86 90(注意空格)
    CStudent 2 : 100002 li 85 91 88
    CStudent 3 : 100003 hu 82 89 88
    CStudent1.Sum=254,CStudent1.average=84.6667
    CStudent2.Sum=264,CStudent2.average=88
    CStudent3.Sum=259,CStudent3.average=86.3333
    class_Sum_max=264
    The infomation of the CStudent with class_Sum_max : 100002 li 85 91 88
    【输入形式】
    TOTAL=3
    CStudent 1 : 100001 ma 78 86 90(注意空格)
    CStudent 2 : 100002 li 85 91 88
    CStudent 3 : 100003 hu 82 89 88
    【输出形式】
    CStudent1.Sum=254,CStudent1.average=84.6667
    CStudent2.Sum=264,CStudent2.average=88
    CStudent3.Sum=259,CStudent3.average=86.3333
    class_Sum_max=264
    The infomation of the CStudent with class_Sum_max : 100002 li 85 91 88
    【样例输入】
    3
    100001 ma 78 86 90
    100002 li 85 91 88
    100003 hu 82 89 88
    【样例输出】
    TOTAL=3
    CStudent 1 : 100001 ma 78 86 90(注意空格)
    CStudent 2 : 100002 li 85 91 88
    CStudent 3 : 100003 hu 82 89 88
    CStudent1.Sum=254,CStudent1.average=84.6667
    CStudent2.Sum=264,CStudent2.average=88
    CStudent3.Sum=259,CStudent3.average=86.3333
    class_Sum_max=264
    The infomation of the CStudent with class_Sum_max : 100002 li 85 91 88
    题目描述
    #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 (math+eng+comp)/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]; 
    //下面代码用于输入每个学生的学号,姓名,数学成绩,英语成绩,计算机成绩,寻找总成绩最高的学生的下标位置 
             for(int i=0;i<n;i++)//**
             {
                 cin>>num>>name>>math>>eng>>comp;
                 cp[i].setData(num,name,math,eng,comp);          
            }
            
            for(int i=0;i<n;i++)
            {
                if(cp[i].Sum()>max)
                {
                    max=cp[i].Sum();
                    max_stu=i;
                }
            }
            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();
    //释放cp 
            delete cp;
            return 0;
    } 

    总结:

    /*错误1: 
    Complex c1,c2,c3;
    c1(a,b);
    c2(c,d);
    改正:
    Complex c1(a,b),c2(c,d);
    一开始就要初始化 
    错误2:
    注意函数返回值类型
    错误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;
    }
     一开始不知道怎么把n赋值给name
    错误4:
    下标从0开始 .... 
  • 相关阅读:
    JS中json对象克隆
    jhipster中图片路径打包问题(webpack)
    arcgis for javascript api 4.x 中,使用本地非 4326坐标系绘制功能实现
    spring核心之IOC
    spring基于XML的声明式事务控制
    hibernate之事务处理
    hibernate之一级缓存
    hibernate之一对多,多对一
    hibernate之HQL,Criteria与SQL
    spring的基于注解的IOC配置
  • 原文地址:https://www.cnblogs.com/zzyh/p/11890905.html
Copyright © 2020-2023  润新知