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開始 ....