第一篇:西南交大c++實驗報告11
實驗 11實驗報告
教學班級:_26_學生學號:_2015_學生姓名:__ 實驗日期:___2016.6.3____實驗地點:__7307__(機房)指導教師簽名:_____________ 實驗成績:______________
一、實驗目的
1.了解存放常用系統函數的頭文件; 2.掌握常用系統函數的功能及使用方法;
3.掌握自定義有返回值函數的概念、定義及使用。
二、實驗任務
1、實現功能:1~10加減乘除運算訓練系統。
(1)主函數功能:隨機產生一個1~10加減乘除算術式(數字在1~10之間隨機產生,運 算符在加減乘除中隨機產生),要求用戶輸入計算結果,通過調用子函數得到正確答 案,判斷用戶的計算結果是否正確并輸出結論。
(2)子函數功能:定義有返回值函數,完成算術式的計算功能。
2、實現功能:求兩個整數的最大公約數、最小公倍數。
(1)主函數功能:從鍵盤輸入兩個整數,通過調用兩個子函數分別得到最大公約數、最小公倍數并輸出結果。
(2)子函數1功能:定義有返回值函數,求兩個整數的最大公約數。子函數2功能:定義有返回值函數,求兩個整數的最小公倍數。
3.實現功能:根據鍵盤輸入的整數x,計算分段函數sign(x)的值。
(1)主函數功能:從鍵盤輸入整數x,通過調用子函數得到計算結果并輸出。(2)子函數功能:定義有返回值函數,實現該分段函數的功能。
三、實驗結果(源程序 + 注釋)
/*
1、實現功能:1~10加減乘除運算訓練系統。
(1)主函數功能:隨機產生一個1~10加減乘除算術式(數字在1~10之間隨機產生,運 算符在加減乘除中隨機產生),要求用戶輸入計算結果,通過調用子函數得到正確答 案,判斷用戶的計算結果是否正確并輸出結論。
(2)子函數功能:定義有返回值函數,完成算術式的計算功能。*/ #include
char n;//定義一個字符型變量
srand(time(NULL));//初始化隨機數產生器
a = 1 + rand()%(101 + 1);//產生1~10的隨機數
x = 1 + rand()%(4z;break;case 3:answer = y * z;break;case 4:answer = y / z;break;} return answer;}
/*實現功能:求兩個整數的最大公約數、最小公倍數。(1)主函數功能:從鍵盤輸入兩個整數,通過調用兩個子函數分別得到最大公約數、最小公倍數并輸出結果。
(2)子函數1功能:定義有返回值函數,求兩個整數的最大公約數。子函數2功能:定義有返回值函數,求兩個整數的最小公倍數。*/ #include
cout << “請輸入兩個整數” << endl;cin >> m >> n;int gys(int a, int b);//調用自定義函數一前的說明
int gbs(int a, int b, int c);//調用自定義函數二之前的說明
x = gys(m, n);y = gbs(m, n, x);cout << “這兩個數的最大公約數是:” << x << “;最小公倍數是:” << y << endl;//輸出結果 } int gys(int a,int b)//子函數一:用來求兩個整數的最大公約數 { int c, p;if(a > b)//確保b形參變量的值比a形參變量的值大
{ c = a;a = b;b = c;} p = b % a;while(p!= 0){ b = a;a = p;p = b%a;}//求出最大公約數
return a;} int gbs(int a, int b, int c)//子函數二:用來求兩個整數的最小公倍數 { int q;q = a * b / c;//求出最小公倍數
return q;}
/*實現功能:根據鍵盤輸入的整數x,計算分段函數sign(x)的值。
(1)主函數功能:從鍵盤輸入整數x,通過調用子函數得到計算結果并輸出。(2)子函數功能:定義有返回值函數,實現該分段函數的功能。*/ #include
cin >> x;//從鍵盤輸入自變量x的值
int sign(int a);//調用自定義函數前的說明
y = sign(x);//為y賦值
cout << “對應自變量x=” << x << “時的函數的值為:” << y << endl;//輸出結果 } int sign(int a)//子函數:用于求對應x值的y值 { int b = 0;if(a < 0)b =-1;else if(a == 0)b = 0;else if(a > 0)b = 1;return b;}
第二篇:西南交大鐵路通信信號實驗報告
通信信號課程實驗報告(聯鎖實驗)
實驗名稱:6502電氣聯鎖和微機聯鎖實驗
班級:交運2012-05班姓名:武曉程學號:20121969 實驗日期:2014.5.9
實驗地點: 53011
一.實驗目的
1.認識6502電氣集中聯鎖設備控制臺
2.運用6502電氣集中聯鎖設備辦理列車進路和調車進路,取消辦理的進路。3.認識微機聯鎖軟件及其操作
4.運用微機聯鎖系統辦理列車和調車進路,取消辦理的進路
5.思考不同的聯鎖設備在辦理、取消進路時的差異。分析和比較兩種系統的異同。6.加深對電氣集中聯鎖系統和微機聯鎖系統的理解,回答思考問題。
二.實驗設備
1.6502電氣集中聯鎖控制臺1臺 2.微機聯鎖設備1套
三.實驗原理(給出兩種聯鎖系統的原理)
電氣集中聯鎖:采用電磁繼電器,以邏輯電路實現聯鎖,全站的信號機和道岔可由一個信號樓集中控制。為了建立一條進路,值班人員可在控制臺上按下一條進路的始端按鈕和終端按鈕。不論進路上有多少組道岔,只要在進路范圍內無車占用,又沒有安排敵對進路,就可將進路中所有道岔轉換到規定位置,并將進路鎖住;在控制臺的軌道表示盤上,所選出的進路從始端到終端呈現一條白色光帶,即表示進路已被選出并已經鎖閉。防護這條進路的信號機也同時自動開放。在表示盤上軌道模型旁,這條進路始端處的信號復示器亮一綠燈,表示防護此進路的信號機已經開放。當列車駛入該進路后,信號機自動關閉,信號復示器的綠燈改亮紅燈,白色光帶隨著列車的前進,一段一段地由白色變為紅色,表示列車在占用該區段,然后又由紅色變為滅燈狀態,表示列車已出清該區段,并且該區段已經解鎖。這時,又可利用該區段內的道岔建立新的進路。
微機聯鎖:計算機聯鎖是用微型機算計的軟硬件和其他一些電子、繼電器件組成的,具有故障-安全性能的實時控制系統。其安全可靠、處理速度快,與繼電集中聯鎖相比具有十分明顯的技術經濟優勢。無論在安全性、可靠性、經濟性等方面都是繼電集中聯鎖無法比擬的,而且設計、施工、維修和使用大為方便,是一套全新的系統設備。微機聯鎖控制系統是實現以進路控制為主要內容的聯鎖功能控制系統,它主要以色燈信號機、動力轉轍機和軌道電路作為三大室外設備,并以電子設備實現聯鎖功能對軌道區段狀態、信號狀態和道岔狀態進行監測,并對信號機和道岔實施控制的系統。
四.實驗過程及心得體會
在5311教室,通過6502電氣集中聯鎖控制臺和計算機模擬接車、發車、調車,加強了對課堂學習的理論知識的理解,加深了對車站聯鎖設備的印象和感觸。相比6502電氣集中聯鎖,微機聯鎖有這更多的優勢。
五.問題
1.6502電氣集中聯鎖和微機聯鎖辦理進路時的異同之處?
共同點:。嚴禁采取任何操作使列車迎面解鎖,區段正常解鎖采用三點檢查,即出清相鄰的前方區段、占用并出清本區段、進入相鄰的后方區段。
信號開放,列車駛入接近區段。此時,因故需要取消進路,為防止列車闖人已解鎖
區段,進路必須延時解鎖。延時時間長短由列車運行速度、接近區段長度決定,調車進路和側線發車為30 s,接車進路和正線發車進路為3 min。
不同點:①在6502電路中,若已開放的信號接近區段瞬間分路不良,可以立即取消已經接近鎖閉的進路。而計算機聯鎖有記憶功能,為安全起見,信號開放后,列車進路只要接近區段占用過,進路就必須延時解鎖(調車不延時)。②進站信號開放、列車接近后,信號因故關閉,直接開放引導,6502電路辦理引導進路解鎖時不延時。而計算機聯鎖在辦理引導進路解鎖時必須延時3 rain解鎖。
2.微機聯鎖相比電氣集中聯鎖的優點有哪些?
(1)體積小、可靠性高,可實現無維修,為鐵路信號技術結構的改革創造了條件。
(2)微機聯鎖系統功能更加完善。我國廣泛應用的6502電氣集中聯鎖系統受站場形電 路層次、結構、繼電群數量,以及網絡線的多少等限制。而微機聯鎖系統通過少量硬件和軟件開發即可解決上述限制。
(3)微機聯鎖系統的信息量大,利用當前的各種網絡手段,可與行車調度指揮系統、列車控制系統聯網,提供及交換各種信息并協調工作。
(4)微機聯鎖系統易于實現系統自身化管理,利用自診斷、自檢測功能及遠距離聯網。,實現遠距離診斷
(5)隨著大規模集成電路的發展,微機聯鎖系統的性能價格比與繼電聯鎖相比將更占優勢。通信信號課程實驗報告(閉塞實驗)
實驗名稱:自動閉塞實驗
班級:交運2012-05班姓名:武曉程學號:20121969 實驗日期:2014.5.9實驗地點:5307
一.實驗目的
1.認識自動閉塞系統
2.觀察自動閉塞下,列車運行與信號指示的關系。3.加深對自動閉塞系統工作原理的認識。
二.實驗設備
1.列車運行仿真實驗系統
三.實驗原理(給出自動閉塞系統的原理)
自動閉塞系統的作用原理是將軌道信息通過鋼軌傳送到動車組的車載系統,通過信號機紅、黃、綠三種顯示方式,預告列車運行前方兩個閉塞分區的空閑狀態。紅燈表示分區正被占用,要求列車停車,暫時不得越過(2分鐘后可低速度運行);黃燈表示前方有一個閉塞分區空閑,要求列車注意運行;綠燈表示前方至少有兩個分區空閑,指示列車可按規定的最高速度運行。
四.實驗過程及心得體會
在老師的帶領和指導下,我學會了一點點對自動閉塞的操作。在自動閉塞的區間上,四顯示信號機更能給列車運行帶來效率,能夠使鐵路運營更快,更好,為鐵路運營帶來了利益。同時也能夠讓人們感受到科技帶來的幸福。
五.問題
1.自動閉塞系統相比半自動閉塞的優點有哪些?
1.由于劃分成閉塞分區,可用最小運行間隔時間開行追蹤列車,從而大大提高區間通過能力;
2.整個區間裝設了連續的軌道電路,可以自動檢查軌道的完整性,提高了行車安全的程度;
3.辦理發車進路時自動辦理閉塞手續,自動變換信號顯示和自動閉塞恢復。2.自動閉塞系統的組成。
利用通過信號機將一個區間劃分為若干個閉塞分區,每個閉塞分區內都裝有軌道電路或列車檢測設備,通過軌道電路將列車和通過信號機的顯示聯系起來,使信號機的顯示依列車運行或區間狀態自動變換的系統。
第三篇:C++實驗報告
姓名:XX 學院:XXX 班級:XXX 學號:XXX
i++;
} while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的輸入”< 實驗 三、函數的應用(2學時) 1、實驗目的: 掌握函數的定義和調用方法。練習重載函數使用。練習函數模板的使用 練習使用系統函數。 在main()函數中提示輸入兩個整數x,y,使用cin語句得到x,y的值,調用pow(x,y)函數計算x的y次冪的結果,再顯示出來。程序名:lab3_4.cpp。 編寫遞歸函數int fib(int n),在主程序中輸入n的值,調用fib函數計算Fibonacci級數。公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if語句判斷函數的出口,在程序中用cout語句輸出提示信息。程序名:lab3_5.cpp。 7)調試操作步驟如下: 選擇菜單命令Build|Start Debug |Step In,系統進入單步執行狀態,程序開始運行,并出現一個DOS窗口,此時光標停在main()函數的入口處。 把光標移到語句answer=fib(n)前,從Debug菜單單擊Run To Cursor,在程序運行的DOS窗口中按提示輸入數字10,這時回到可視界面中,光標停在第11行,觀察一下n的值。 從Debug菜單中單擊Step Into,程序進入fib函數,觀察一下n的值,把光標移到語句return(fib(n-2)+fib(n-1))前,從Debug菜單單擊Run to Cursor,再單擊Step Into,程序遞歸調用fib函數,又進入fib函數,觀察n的值。 繼續執行程序,參照上述的方法,觀察程序的執行順序,加深對函數調用和遞歸調用的理解。 再試試Debug菜單欄中的別的菜單項,熟悉Debug的各種方法。 4、實驗原理 C++中函數的重載使得同樣的函數名下,只要參數類型、數目不同時,即可根據輸入的數據進行相應的函數調用,使用起來簡單方便。 5、思考與體會 C++中,函數的運用與之前學過的C語言既有相同之處,也有著不同的地方。相同的地方在于格式、用法等框架上的不變。但是C語言中對于同樣的函數名是只能夠申明一種函數的,倘若有相同的函數名出現系統即會報錯,所以用起來有時是極為不便 0 //參數為兩個雙精度浮點形的函數 int max1(double a,double b){ a=a>b?a:b;return a;} //參數為三個雙精度浮點形的函數 int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout< Lab3_3: #include int main(){ int i,j,k;cout<<“請輸入要比較的3個數: ”< 2131415 public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){ //構造函數 cout<<“構造了一個CPU”< rank=r; frequency=f; voltage=v;} void run(){ cout<<“CPU開始運行”< } void stop(){ cout<<“CPU停止運行”< cout<<“RANK=”< cout<<“frequency=”< cout<<“voltage=”< }; int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;} Lab4_2 #include //析構函數-17 computer(Rank r,int f,float v){ CPU cpu(r,f,v); //定義CPU對象 RAM ram(1); //定義RAM對象 CDROM cdrom(1); //定義CDROM對象 cpu.run(); cpu.show(); cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;} 實驗 七、繼承與派生(一、二)4學時 1、實驗目的: 學習定義和使用類的繼承關系,定義派生類。熟悉不同繼承方式下對基類成員的訪問控制。學習利用虛基類解決二義性問題 2、實驗任務 a)定義一個基類Animal,有私有整型成員變量age,構造其派生類dog,在其成員函數SetAge(int n)中直接給age賦值,看看會有什么問題,把age改為公有成員變量,還會有問題嗎?編程試試看。b)定義一個基類BaseClass,有整型成員變量Number ,構造其派生類DerivedClass,觀察構造函數和析構函數的執行情況。c)定義一個車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數,由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車類有高度(height)等屬性,汽車類有座位數(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中,注意把vehicle設置為虛基類。如果不把vehicle設置為虛基類,會有什么問題?編程試試看。 3、實驗步驟 編寫程序定義基類Animal,成員變量age定義為私有的。構造派生類dog,在其成員函數SetAge(int n)中直接對age賦值時,會出現類似以下的錯誤提示: error C2248:’age’:cannot access private member declared in class ‘Animal’ error C2248:’age’:cannot access private member declared in class ‘Animal’ 把age改為公有成員變量后重新編譯就可以了。程序名為:lab7_1.cpp 0 確方便我們編程。 6、部分參考代碼 Lab7_1 #include class Animal{ public: int age;}; class dog:public Animal{ public: int SetAge(int n){ age=n; return age;} }; void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”< Lab7_2 #include cout<<“這是父類的構造函數”< cout<<“這是父類的析構函數”< //Motorcycle繼承bicycle和motorcar類 class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){ SeatNum=seat; height=H; MaxSpeed=MS; Weight=W;} void show(){ cout<<“seatnum=”< cout<<“height=”< cout<<“MaxSpeed=”< cout<<“weight=”< int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 實驗 八、多態性2學時 1、實驗目的: 掌握運算符重載的方法 習使用虛函數實現動態多態性。 2、實驗任務 a)定義Point類,有坐標x,y兩個成員變量;對Point類重載“++”、“--”運算符,實現對坐標值的改變。 定義一個車(vehicle)基類,有Run、Stop等成員函數,由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數。觀察虛函的作用。 3、實驗步驟 編寫程序定義Point類,在類中定義整型的私有成員變量x,y,定義成員函數Point& operator++();Point operator++(int);以實現對Point類重載“++”運算符,定義成函數Point& operator –();Point operator 也就是函數的重載。 6、部分參考代碼 Lab8_1 #include class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;}; Point Point::operator++(int){ return Point(xray++,yray++);} Point Point::operator--(int){ return Point(xray--,yray--);} void Point::show(){ cout<<“x坐標為”< int main(){ Point p(4.5,6.5);cout<<“進行運算前的情況:”< show(&v);return 0;} 第二次上機實驗報告 姓名:王小寧 班級: 學號: 031012 1234 第一題: 題目: 編寫一個類,聲明一個數據成員和一個靜態數據成員,其構造函數初始化數據成員,并把靜態數據成員加1,其析構函數把靜態數據成員減1.(1)編寫一個應用程序,創建該類的3個對象,然后顯示其數據成員和靜態數據成員,再析構每個對象,并顯示它們對靜態數據成員的影響。 (2)修改該類,增加靜態成員函數并訪問靜態數據成員,并聲明靜態數據成員為保護成員。體會靜態成員函數的使用,靜態成員之間與非靜態成員之間互訪問題。 編程思想: 首先,定義一個類,其中含有兩個類的私有變量,一個靜態數據變量,定義構造函數,將初值賦給兩個私有變量,并將靜態數據變量加1,并顯示.定義一個析構函數,并通過析構函數將靜態成員變量減1.并顯示。 修改以上的類,增加一個靜態成員函數并通過靜態成員函數來訪問靜態成員變量。在主函數中利用一個指向函數的指針指向這個靜態成員函數,并通過這個指針來訪問類中的靜態數據。代碼實現: 代碼1: #include static int count; A(int a=0,int b=0) { X=a; Y=b; count++; cout<<“startcount=”< count--; cout<<“overcount=”< int GetX(){return X;} int GetY(){return Y;} private: int X,Y;};int A::count=0;int main(){ int *countp=&A::count;A z(2,3);cout<<“x=”< cout<<“x=”< 問題及心得: 在這次試驗中,我理解了靜態變量與普通變量之間的差異與聯系。在實驗過程中因未初靜態變量始化而無法通過編譯,并且注意到靜態變量一定要在類外初始化。 題目2: 創建一個Person類,該類中有字符數組,表示姓名、街道地址、市、省和郵政編碼。其功能有修改姓名、顯示數據信息。要求其功能函數的原型放在類定義中,構造函數初始化每個成員,顯示信息函數要求把對象中的完整信息打印出來。其中數據成員為保護的,函數為公有的。 編程思想: 創建一個PERSON類,定義姓名、街道地址、市、省和郵政編碼分別為CHAR型的指針私有型變量。在定義公有型的構造函數,并在構造函數中申請動態內存來保存初始化的內容,并用相應的私有性的指針變量指向,再利用復制函數則指針中將會存放入輸入內容。定義公有的析構函數釋放動態申請的空間。定義一個公有的改變函數改變其中一個變量,方法與構造函數相似。 代碼實現: #include private: char *name;char *street;char *pro;char *city;char *code; public: Person(char *aname,char *astreet,char *apro,char *acity,char *acode){ name=new char[strlen(aname)+1]; strcpy(name,aname); street=new char[strlen(astreet)+1]; strcpy(street,astreet); pro=new char[strlen(apro)+1]; strcpy(pro,apro); city=new char[strlen(acity)+1]; strcpy(city,acity); code=new char[strlen(acode)+1]; strcpy(code,acode); cout<<“constructor”< delete[] name; delete[] street; delete[] pro; delete[] city; delete[] code; cout<<“destructor”< delete[] name; name=new char[strlen(aname)+1]; strcpy(name,aname);} void show(){ cout<<“姓名:”< cout<<“街道地址:”< cout<<“省份:”< cout<<“城市:”< cout<<“郵政編碼:”< 運行結果: 實驗心得: 通過這個實驗,我們學會了對類的私有的字符數組變量的初始化。利用指針動態分配空間。 C++上機實驗報告 實驗名稱:實驗 專業班級: 姓 名: 學 號: 實驗日期: 11 實驗 目錄 1.實驗目的 2.實驗內容 3.程序代碼 4.調試結果 5.實驗心得 1.實驗目的 實驗10(1)進一步了解運算符重載的概念和使用方法;(2)掌握幾種常用的運算符重載的方法;(3)了解轉換構造函數的使用方法; (4)了解在Visual C++6.0環境下進行運算符重載要注意的問題。實驗11(1)了解繼承在面向對象程序設計中的重要作用;(2)進一步理解繼承和派生的概念; (3)掌握通過繼承派生出一個新的類的方法;(4)了解虛基類的作用和用法。 2.實驗內容 實驗10 事先編好程序,上機進行調試和運行程序,分析結果。(1)聲明一個復數類Complex,重載運算符“+”,“-”,“*”,“/”,使之能用于復數的加,減,乘,除,運算符重載函數作為Complex類成員的函數。編程序,分別求兩個復數之和,差,積和商。(2)聲明一個復數類Complex,重載運算符“+”,使之能用于復數的加法運算。參加運算的兩個運算量可以都是類對象,也可以其中有一個是整數,順序任意。 運行程序,分別求兩個復數之和,整數和復數之和,(3)有兩個矩陣a和b,均為2行3列。求兩個矩陣之和。重載運算符“+”,使之能用于兩個矩陣相加 (4)聲明一個Teacher(教師)類和一個Student(學生)類,二者有一部分數據成員是相同的,例如num(號碼),name(名字),sex(性別)。編寫程序,將一個Student對象(學生)轉換為Teacher(教師)類,只將以上三個相同的數據成員移植過去。可以設想為:一位學生大學畢業了,留校擔任教師,他原有的部分數據對現在的教師身份來說任然是有用的,應當保留并成為其教師的數據的一部分。 實驗11 事先編寫好程序,上機調試和運行程序,分析結果。 (1)將教材第11章例11.1的程序片段補充和改寫成一個完整的、正確的程序,用公用繼承方式。在程序中應當包括輸入數據的函數,在程序運行時輸入num,name,sex,age,addr的值,程序應輸出以上5個數據的值。 (2)將教材第11章例11.3的程序修改、補充,寫成一個完整、正確的程序,用保護繼承方式。在程序中應包括輸入數據的函數。(3)修改上面第(2)題的程序,改為用公用繼承方式。上機調試程序,使之能夠正確運行并得到正確的結果。 對這兩種繼承方式做比較分析,考慮在什么情況下二者不能互相替換。 (4)分別聲明Teacher(教師)類和Cadre(干部)類,采用多 重繼承方式由這兩個類派生出新類Teacher-Cadre(教師兼干部)。要求: Ⅰ.在兩個基類中都包含姓名、年齡、性別、地址、電話等數據成員。 Ⅱ.在Teacher類中還包含數據成員title(職稱),在Cadre類中還包含數據成員post(職務)。在Teacher-Cadre類中還包含數據成員wages(工資)。 Ⅲ.在基類中的姓名、年齡、性別、地址、電話等數據成員用相同的名字,在引用這些數據成員時,指定作用域。Ⅴ.在類體中聲明成員函數,在類外定義成員函數。 Ⅵ.在派生類Teacher-Cadre的成員函數show中調用Teacher類中的display函數,輸出性命、年齡、性別、職稱、地址、電話,然后再用cout語句輸出職務與工資。 3.程序代碼 實驗10(1) #include Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;} Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;} Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;} Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;} void Complex::display(){cout<<“(”< (2) #include double real; double imag;}; Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);} Complex Complex::operator+(int &i){return Complex(real+i,imag);} void Complex::display(){cout<<“(”< Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);} int main(){Complex c1(3,4),c2(5,-10),c3;int i=5;c3=c1+c2;cout<<“c1+c2=”;c3.display();c3=i+c1;cout<<“i+c1=”;c3.display();c3=c1+i;cout<<“c1+i=”;c3.display();return 0;}(3) #include int mat[2][3];}; Matrix::Matrix(){for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;} Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];} return c;} void Matrix::input(){cout<<“input value of matrix:”< void Matrix::display(){for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout< #include int num; char name[20]; char sex; float score;}; Student::Student(int n,char nam[],char s,float sco){num=n;strcpy(name,nam);sex=s;score=sco;} class Teacher {public: Teacher(){} Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private: int num; char name[20]; char sex; float pay;}; Teacher::Teacher(int n,char nam[],char s,float p} {num=n;strcpy(name,nam);sex=s;pay=p;} Teaxher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get.sex();pay=1500;} void Teacher::display(){cout<<“num:”< #include void get_value() {cin>>num>>name>>sex;} void display() {cout<<”num:“< cout<<”sex:“< int num; char name[10];char sex;}; class Student1:public Student {public: void get_value_1(){get_value();cin>>age>>addr;} void display_1(){cout<<”age:“< char addr[30];}; int main(){Student1 stud1;stud1.get_value_1();stud1.display();stud1.display_1();return 0;}(2) #include void display();protected: int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:protected Student {public: void get_value_1();void display1();private: int age;char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(3) #include int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:public Student {public: void get_value_1();void display1();private: int age; char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(4) #include Teacher(int,char[],char);void display();private: int num;char name[20];char sex;}; Teacher::Teacher(int n,char nam[],char s){num=n;strcpy(name,nam);sex=s;} void Teacher::display(){cout<<”num:”< class BirthDate {public: BirthDate(int,int,int);void display();void change(int,int,int);private: int year;int month;int day;}; BirthDate::BirthDate(int y,int m,int d){year=y;month=m;day=d;} Void BithDate::display(){cout<<”birthday:”< void BirthDate::change(int y,int m,int d){year=y;month=m;day=d;} class Professor:public Teacher {public: Professor(int,char[],char,int,int,int,float);void display();void change(int,int,int);private: float area;BirthDate birthday;} Professor::Professor(int n,char name[20],char s,int y,int m,int d,float a): Teacher(n,name,s),birthday(y,m,d),area(a){} void Professor::display(){Teacher::display();birthday.display();cout<<”area:”< Int main(){Professor profl(3012,”Zhang”,’f’,1949,10,1,125.4);cout< 4.調試結果 實驗10(1)c1+c2=(8,-6i)c1-c2=(-2,14i)c1*c2=(55,-10i)c1/c2=(-0.2,0.4)(2)c1+c2=(8,-6i)i+c1=(8,4i)c1+i=(8,4i) (3) input value of Matrix:11 22 33 44 55 66 input value of Matrix:12 13 14 15 16 17 Matrix a: 11 22 33 44 55 66 Matrix b: 12 13 14 15 16 17 Matrix c=Matrix a + Matrix b : 23 25 47 59 71 83 (4)student1 : num :20010 name:Wang sex:m score;89.5 Teacher2: num:20010 name:Wang sex:m pay:1500 實驗11(1) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (2) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (3) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (4)The original data: num:3012 name:Zhang sex:f area:125.4 The new data: num:3012 name:Zhang sex:f birthday:6/1/1950 area:125.4 5.實驗心得 這一次上機實驗,除了了解到了運算符重載的概念和用法,掌握幾種常用的運算符重載的方法,了解轉換構造函數的使用方法,同時也能了解虛基類的用法,理解繼承與派生的概念。 但是,最主要的,我覺得,是通過這一次的上機實驗,我了解到,有的實驗本身是沒有程序錯誤的,但是,也會由于實驗環境的影響而不能正常運行。換句話說,有的程序并不能在Visaul C++的環境下運行,而不是程序自身的問題。所以,對于沒辦法調試成功的程序,我們也不能一味的認為程序有錯誤,要學會理性的判斷程序的對錯,再下結論。第四篇:C++上機實驗報告
第五篇:C++上機實驗報告