實驗六--類和對象


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\n";
    else cout<<"False\n";
    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開始 .... 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM