燕山大学C++实验报告
贈予燕大學(xué)弟學(xué)妹:
下面這些只是一種參考方法,并不是一定要這樣寫的。方法思想萬卷不離其宗,只要掌握了知識點就都沒問題的,下午答辯時候按照自己的理解回答老師的問題就可以了,不用緊張,只要知識點會無論怎樣能表達(dá)出來就可以了。
PS:大一代碼寫的很爛,不喜勿噴 Thanks?(・ω・)ノ
資源:實驗報告.doc
給大家設(shè)置 0積分下載了,直接載下來參考就行啦:
https://download.csdn.net/download/weixin_45525272/18736257
另外:其他帶積分資源 沒積分不知道咋下的 可以參考這一篇文章:
https://yangyongli.blog.csdn.net/article/details/116832457
文章目錄
- 贈予燕大學(xué)弟學(xué)妹:
- 資源:實驗報告.doc
- C++面向?qū)ο蟪绦蛟O(shè)計實驗報告
- 實驗1 編程環(huán)境的熟悉及簡單程序的編制
- 1.3.1 任務(wù)一
- 1.3.1 任務(wù)二
- 實驗2 函數(shù)的應(yīng)用
- 2.3.1 任務(wù)一
- 2.3.2 任務(wù)二
- 2.3.3 任務(wù)三
- 實驗3 類與對象、構(gòu)造與析構(gòu)函數(shù)
- 3.3.1 任務(wù)一
- 實驗4 數(shù)據(jù)共享與保護
- 實驗5 數(shù)組、指針與字符串
- 5.3 任務(wù)一
- 實驗6 類的繼承與派生
- 6.3.1 任務(wù)一
- 實驗7 多態(tài)性
- 7.3 任務(wù)一
- 實驗8 交通燈設(shè)計
- 8.3 任務(wù)一
- 實驗9 數(shù)組、指針與字符串
C++面向?qū)ο蟪绦蛟O(shè)計實驗報告
實驗1 編程環(huán)境的熟悉及簡單程序的編制
1.1 實驗?zāi)康暮鸵?br /> 1.熟悉 VC++2010 編程環(huán)境,編制簡單 C++程序并運行,熟悉 C++的編輯、 編譯、 連接、運行、斷點調(diào)試等過程。
2.掌握 C++數(shù)據(jù)類型,熟悉如何定義和使用常量和變量,以及對它們賦值的方法。
3.學(xué)會使用 C++的有關(guān)算術(shù)運算符及表達(dá)式,特別是自加(++)和自減(–)運算符 的使用。
4.分支和循環(huán)結(jié)構(gòu)的使用
1.2 所占學(xué)時數(shù)
本實驗安排 2 個實驗課時。
1.3 實驗任務(wù)
1.3.1 任務(wù)一
(1)題目名稱
功能需求:運行時顯示"Menu: A(dd) D(elete) S(ort) Q(uit), Select one:“提示
用戶輸入,A 表示增加,D 表示刪除,S 表示排序,Q 表示退出,輸入為 A、 D、S 時分別提示”
數(shù)據(jù)已經(jīng)增加、刪除、排序。"輸入為 Q 時程序結(jié)束。
按照上述功能需求寫兩個程序,分別使用if分支語句和switch分支語句實現(xiàn):
程序1要求:使用 if … else 語句進(jìn)行判斷,用 break、continue 控制程序流程。
程序2要求:使用 Switch 語句實現(xiàn)。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
在一個大的循環(huán)中可以無限次地輸入、輸出,將輸入的內(nèi)容去初始化一個新的字符,再對該字符進(jìn)行對應(yīng)操作:
程序1.用if進(jìn)行分類,逐步套用
程序2.用case進(jìn)行分類,逐步套用
(3)程序源碼
程序1: #include <iostream> using namespace std;int main() {cout<<"提示用戶輸入,A 表示增加,D 表示刪除,S 表示排序,Q 表示退出"<<endl;char C;for( ; ; ){ cin>>C;if(C=='A'){ cout<<"數(shù)據(jù)已經(jīng)增加"<<endl;continue;}else if(C=='D'){ cout<<"數(shù)據(jù)已經(jīng)刪除"<<endl;continue;}else if(C=='S'){ cout<<"數(shù)據(jù)已經(jīng)排序"<<endl; continue;}else if(C=='Q')break;elsecout<<"請按提示輸入!"<<endl;}return 0; } 程序2: #include<iostream> using namespace std;int main() {cout<<"提示用戶輸入,A 表示增加,D 表示刪除,S 表示排序,Q 表示退出"<<endl;char C=' '; for(;;){ cin>>C;switch(C){case 'A':cout<<"數(shù)據(jù)已經(jīng)增加"<<endl;break;case 'D':cout<<"數(shù)據(jù)已經(jīng)刪除"<<endl;break;case 'S':cout<<"數(shù)據(jù)已經(jīng)排序"<<endl;break;case 'Q':break;default:cout<<"請按恪提示輸入"<<endl;}}return 0; }(4)運行結(jié)果(截圖)
程序1:
(5)心得體會
在循環(huán)語句中,break和continue的作用不同:break表示是終止整個循環(huán)體,而continue表示是終止這一次循環(huán),進(jìn)入下一個循環(huán)。
1.3.1 任務(wù)二
(1)題目名稱
找出2~10000之內(nèi)的所有完全數(shù)。所謂完全數(shù),即其各因子之和正好等于本身的數(shù)。如
6=1+2+3,28=1+2+4+7+14,所以6,28都是完全數(shù)。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
使函數(shù)在規(guī)定范圍內(nèi)判斷該數(shù)是否是完全數(shù):在循環(huán)中使該數(shù)對從2開始到它自身進(jìn)行取余運算,將整除的因子相加(除自身外)求和。If語句進(jìn)行判斷,若是和與自身相同,則返回值為1;反之,返回值為0.主函數(shù)中,輸出返回值為1的完全數(shù)。
(3)程序源碼
#include <iostream> #include<cmath> using namespace std;int yinzi(int x) {int sum = 1;if (x >= 2){for (int i = 2; i < x; i++){if (x%i == 0){sum += i;}elsecontinue;}if (sum == x)return 1;elsereturn 0;} }int main() {for (int i = 2; i <= 10000; i++){int s = yinzi(i);if (s == 1){cout << i << ends;}elsecontinue;} }(4)運行結(jié)果(截圖)
(5)心得體會
函數(shù)返回值可以借助計算機語言0和1簡化操作
實驗2 函數(shù)的應(yīng)用
2.1 實驗?zāi)康暮鸵?br /> 1.掌握函數(shù)聲明、定義和調(diào)用的方法;
2.掌握函數(shù)遞歸調(diào)用的方法;
3.掌握重載函數(shù)的聲明、定義和使用方法;
4.理解函數(shù)參數(shù)傳遞中傳值與引用的區(qū)別
2.2 所占學(xué)時數(shù)
本實驗安排 2 個實驗課時。
2.3 實驗任務(wù)
2.3.1 任務(wù)一
(1)題目名稱
用遞歸方法編寫函數(shù) Fibonnacci(斐波那契)級數(shù):
Fn=Fn-1 + Fn-2; F1=F2=1;
并求出第 26 項的值。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
利用遞歸思想構(gòu)建一個函數(shù)表示斐波那契數(shù)列,在主程序里引用函數(shù)體直接得出數(shù)列第16項并輸出。
(3)程序源碼
#include<iostream> #include<cmath> using namespace std;int fbnq(int n) {if (n == 1 || n == 2)return 1;elsereturn fbnq(n - 1) + fbnq(n - 2); }int main() {cout << fbnq(26); }(4)運行結(jié)果(截圖)
(5)心得體會
函數(shù)的構(gòu)建需要確定函數(shù)類型及形參的數(shù)據(jù)類型,引用時同樣也注意實參的數(shù)據(jù)類型是否與形參相同,以及返回值類型。
2.3.2 任務(wù)二
(1)題目名稱
設(shè)計一函數(shù),判斷一整數(shù)是否為素數(shù)。并完成下列程序設(shè)計:
①編寫求素數(shù)的函數(shù),并用這個函數(shù)求 3-200 之間的所有素數(shù)
②在 4-200 之間,驗證歌德巴赫猜想:任何一個充分大的偶數(shù)都可以表示為兩個素數(shù)之和。輸出 4=2+2 6=3+3 …… 200=3+197
注:素數(shù)又稱質(zhì)數(shù),指在一個大于 1 的自然數(shù)中,除了 1 和此整數(shù)自身外,不能被其他自然數(shù)(不包括 0)整除的數(shù)
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
先構(gòu)造出一個判斷素數(shù)的函數(shù),在大循環(huán)中讓該數(shù)依次去除以比它小的數(shù),直至循環(huán)可以循環(huán)到該數(shù)前一個,輸出。
驗證哥德巴赫猜想時,任意偶數(shù)可以分成兩素數(shù)的和,簡化驗證過程,我們可以直接驗證每個偶數(shù)都可以分為3和另一個素數(shù)和(除4外)。
(3)程序源碼
#include <iostream> #include <string> #include <sstream> using namespace std;int sushu(int x) {if (x > 1){for (int i = 2; i <= x; i++){int r = x % i;if (r == 0){break;}else{continue;}if (i = x - 1){return 1;}}}elsereturn 0; }string gdbh(int y) {int i = 3;if (y == 4){return "2+2";}else{int j = y - 3;int J = sushu(j);;stringstream j0;j0 << j;string j1 = j0.str();if (J = 1){return j1 + "+3";}elsereturn "錯誤";} }int main() {for (int i = 3; i <= 200; i++){int a = sushu(i);if (a == 1)cout << i << ends;}cout << endl;for (int i = 4; i <= 200; i = i + 2){cout << i << "=" << gdbh(i) << ends;} }(4)運行結(jié)果(截圖)
(5)心得體會
判斷素數(shù)時可以借用break和continue來簡化函數(shù)循環(huán)語句
預(yù)處理文件#include 中的stringstream和str()可以將int型轉(zhuǎn)化為string型
2.3.3 任務(wù)三
(1)題目名稱
①比較值傳遞和引用傳遞的相同點和不同點。
②調(diào)用被重載的函數(shù)時,通過什么來區(qū)分被調(diào)用的是哪一個函數(shù)?
(2)答:
① 1、相同點:都是用來初始化對象的
2、不同點:
傳值是單向的,形參的改變不會影響到實參;
傳址是雙向的,形參可以改變實參,數(shù)據(jù)不安全。
② 重載函數(shù)名是相同的,但是函數(shù)的參數(shù)類型或者個數(shù)會不同,可以通過觀察參數(shù)的類型和個數(shù)進(jìn)行判斷調(diào)用的函數(shù)。
實驗3 類與對象、構(gòu)造與析構(gòu)函數(shù)
3.1 實驗?zāi)康暮鸵?br /> 1.掌握類的定義和使用。
2.掌握類的定義和對象的聲明。
3.掌握具有不同訪問屬性的成員的訪問方式。
4.深入體會構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、析構(gòu)函數(shù)的執(zhí)行機制。
5.使用的 VC++的 debug 調(diào)試功能觀察程序流程,跟蹤觀察類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、 成員函數(shù)的執(zhí)行順序。
3.2 所占學(xué)時數(shù)
本實驗安排 4 個實驗課時。
3.3 實驗任務(wù)
3.3.1 任務(wù)一
(1)題目名稱
設(shè)計一個用于人事管理的 People(人員)類。考慮到通用性,這里只抽象出所有類型人員都具有的屬性:number(編號)、sex(性別)、birthday(出生日期)、id(身份 證號)等。
其中"出生日期"定義為一個"日期"類內(nèi)嵌子對象。
用成員函數(shù)實現(xiàn)對人員信息 的錄入和顯示。
要求包括:構(gòu)造函數(shù)和析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)成員函數(shù)、帶缺省形參值的成員函數(shù) 、聚集。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
定義Date類,利用類的構(gòu)造函數(shù)聲明輸入和輸出的兩個操作函數(shù)對內(nèi)嵌子對象birthday進(jìn)行操作。
定義People類,初始化基礎(chǔ)成員函數(shù),利用公有成員函數(shù)進(jìn)行People對象的輸入。
在主函數(shù)中聲明People類的對象進(jìn)行輸入,利用People類的復(fù)制構(gòu)造函數(shù)進(jìn)行輸出。
(3)程序源碼
#include <iostream> #include <string> using namespace std;class Date { public:Date(int x = 0, int y = 0, int z = 0){year = x;month = y;day = z;};void setdate();void showdate(); private:int year, month, day; }; void Date::setdate() {int a, b, c;cout << "輸入日期" << ends;cin >> a >> b >> c;year = a;month = b;day = c; } void Date::showdate() {cout << year << "年" << month << "月" << day << "日" << endl; }class People { public:People() {};People(const People&p);~People() {}void setpeople();void showpeople(); private:int number;long idnumber;string sex;Date birthday; }; People::People(const People&p) {number = p.number;birthday = p.birthday;sex = p.sex;idnumber = p.idnumber; } void People::setpeople() {Date a;int b;long c;string d;a.setdate();cout << "號碼:";cin >> b;cout << "id:";cin >> c;cout << "性別:";cin >> d;cout << endl;birthday = a;number = b;idnumber = c;sex = d; } void People::showpeople() {cout << "number:" << ends << number << endl;cout << "idnumber:" << ends << idnumber << endl;cout << "sex:" << ends << sex << endl;cout << "birthday:" << ends;birthday.showdate(); }int main() {People p1;p1.setpeople();People p2(p1);p1.showpeople();return 0; }(4)運行結(jié)果(截圖)
(5)心得體會
利用拷貝構(gòu)造函數(shù)可以更方便地實現(xiàn)從輸入轉(zhuǎn)到輸出的過程
一個類的對象可以在另一個類中作為成員函數(shù)
字符串的使用一定要在代碼前加入預(yù)處理#include
實驗4 數(shù)據(jù)共享與保護
4.1 實驗?zāi)康暮鸵?br /> 1.觀察程序運行中變量的作用域、生存期。
2.學(xué)習(xí)類的靜態(tài)成員的使用。
3.理解類的友元函數(shù)、友元類。
4. 學(xué)習(xí)多文件結(jié)構(gòu)在 C++程序中的使用。
4.2 所占學(xué)時數(shù)
本實驗安排 4 個實驗課時。
4.3 實驗任務(wù)
4.3 任務(wù)一
(1)題目名稱
定義一個 Girl 類和一個 Boy 類,這兩個類中都有表示姓名、年齡的私有成員變量, 都要定義構(gòu)造函數(shù)、析構(gòu)函數(shù)、輸出成員變量信息的公有成員函數(shù)。
刪除兩個類中的函數(shù) visitgirl(girl &),visitboy(boy &) ,定義一個頂層函數(shù) visitboygirl(boy &,girl &),作為以上兩個類的友元,通過調(diào)用該函數(shù)輸出男孩和女孩的信息。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
定義兩個類,在其中分別定義出它的構(gòu)造函數(shù)和析構(gòu)函數(shù)并聲明出最終的頂層友元函數(shù)。利用構(gòu)造函數(shù)把私有數(shù)據(jù)初始化。在主函數(shù)中聲明類的對象,利用頂層函數(shù)進(jìn)行輸出。
(3)程序源碼
#include<iostream> #include<string> using namespace std;class Girl; class Boy { private:string name;int age; public:Boy(string theName,int theAge);friend void visitboygirl(Boy &b,Girl &g);~Boy(){} }; Boy::Boy(string theName,int theAge) {name=theName;age=theAge; } class Girl { private:string name;int age; public:Girl(string theName,int theAge);friend void visitboygirl(Boy &b,Girl &g);~Girl(){} }; Girl::Girl(string theName,int theAge) {name=theName;age=theAge; }int main() {Girl g("Mary",18);Boy b("Jack",19);visitboygirl(b,g); } void visitboygirl(Boy &b,Girl &g) {cout<<"Girl's name:"<<g.name<<endl;cout<<"Girl's age:"<<g.age<<endl;cout<<"Boy's name:"<<b.name<<endl;cout<<"Boy's age:"<<b.age<<endl; }(4)運行結(jié)果(截圖)
(5)心得體會
友元類不能傳遞且友元關(guān)系是單向的;
若A為B的友元類,則A中所有函數(shù)成員都可以訪問B的私有和保護成員;
實驗5 數(shù)組、指針與字符串
5.1 實驗?zāi)康暮鸵?br /> 1.學(xué)習(xí)使用數(shù)組。
2.掌握指針的使用方法,體會運算符&、*的不同作用。
3. 學(xué)習(xí)字符串?dāng)?shù)據(jù)的組織和處理。
4. 練習(xí)通過動態(tài)分配內(nèi)存實現(xiàn)動態(tài)數(shù)組,并體會指針在其中的作用。
5.分別使用字符數(shù)組和標(biāo)準(zhǔn) C++庫練習(xí)處理字符串的方法。
5.2 所占學(xué)時數(shù)
本實驗安排 4 個實驗課時。
5.3 實驗任務(wù)
5.3 任務(wù)一
(1)題目名稱
用類來實現(xiàn)矩陣,定義一個矩陣的類,屬性包括:
矩陣大小,用 lines, rows(行、列來表示);
存貯矩陣的數(shù)組指針,根據(jù)矩陣大小動態(tài)申請(new)。
矩陣類的方法包括:
構(gòu)造函數(shù):參數(shù)是矩陣大小,需要動態(tài)申請存貯矩陣的數(shù)組;
析構(gòu)函數(shù):需要釋放矩陣的數(shù)組指針;
拷貝構(gòu)造函數(shù):需要申請和復(fù)制數(shù)組(深復(fù)制);
輸入函數(shù):可以從 cin 中輸入矩陣元素;
輸出函數(shù):將矩陣格式化輸出到 cout;
矩陣相加函數(shù):實現(xiàn)兩個矩陣相加的功能,結(jié)果保存在另一個矩陣?yán)?#xff0c;但必須矩陣
大小相同;
矩陣相減的函數(shù):實現(xiàn)兩個矩陣相減的功能,結(jié)果保存在另一個矩陣?yán)?#xff0c;但必須矩 陣大小相同。
主函數(shù)功能:
定義三個矩陣:A1、A2、A3;
初始化 A1、A2;
計算并輸出 A3 = A1+A2,A3=A1+A2;
用 new 動態(tài)創(chuàng)建三個矩陣類的對象:pA1、pA1、pA3;
初始化 pA1、pA2;
計算并輸出 pA3=pA1+pA2,pA3=pA1+pA2;
釋放 pA1、pA1、pA3。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
利用復(fù)制構(gòu)造函數(shù)實現(xiàn)矩陣的輸入,避免使用數(shù)組出現(xiàn)混亂
學(xué)習(xí)指針的用法以及注意事項
(3)程序源碼
(4)運行結(jié)果(截圖)
(5)心得體會
復(fù)制函數(shù)可以大大提高代碼的利用率
實驗6 類的繼承與派生
6.1 實驗?zāi)康暮鸵?br /> 1、從深層次上理解繼承與派生的關(guān)系
2、掌握不同繼承方式下,從派生類/對象內(nèi)部和外部對基類成員的訪問控制權(quán)限。
3、掌握單繼承和多繼承的使用方法,尤其是派生類構(gòu)造函數(shù)的聲明方式。
4、掌握繼承與派生下構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序。
5、理解“類型兼容”原則 。
6、學(xué)習(xí)利用虛基類解決二義性問題。
6.2 所占學(xué)時數(shù)
本實驗安排 4 個實驗課時。
6.3 實驗任務(wù)
6.3.1 任務(wù)一
(1)題目名稱
編寫 C++程序,以完成以下功能(具體的數(shù)據(jù)成員、函數(shù)成員,請自主定義):
(1)聲明一個基類 Shape(形狀),其中包含一個方法來計算面積;
(2)從 Shape 派生兩個類:矩形類(Rectangle)和圓形類(Circle);
(3)從 Rectangle 類派生正方形類 Square;
(4)分別實現(xiàn)派生類構(gòu)造函數(shù)、析構(gòu)函數(shù)及其它功能的成員函數(shù);
(5)創(chuàng)建各派生類的對象,觀察構(gòu)造函數(shù)、析構(gòu)函數(shù)的調(diào)用次序;
(6)計算不同對象的面積。
2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
聲明基類,要求其中的函數(shù)可以在派生類中同樣適用(公有派生)
聲明派生類,確定公有成員和私有成員,引用基類中的面積area函數(shù),并具體定義area函數(shù)中的計算方式
在主函數(shù)中依次輸入邊長(半徑)的數(shù)值,返回函數(shù)并輸出
(3)程序源碼
#include<iostream> #include<cmath> using namespace std;class Shape { public:float area(); };class Circle:public Shape { private:float radius; public:Circle(float r){ radius=r;};float area(){return radius*radius*3.14;}~Circle(){} };class Rectangle:public Shape { private:float l,w; public:Rectangle(float a,float b){l=a;w=b;};float area(){return l*w;}~Rectangle(){} };class Square:public Rectangle { private:float x; public:Square(float c):Rectangle(c,c){x=c;}float area(){return x*x;}~Square(){} };int main () {float a,b;cout<<"請輸入矩形長和寬:";cin>>a>>b;Rectangle R(a,b);cout<<"矩形面積為:"<<R.area()<<endl;float c;cout<<"請輸入圓半徑:";cin>>c;Circle C(c);cout<<"圓的面積為:"<<C.area()<<endl;float d;cout<<"請輸入正方形的邊長:";cin>>d;Square S(d);cout<<"正方形的面積為:"<<S.area()<<endl; }(4)運行結(jié)果(截圖)
(5)心得體會
在代碼運行中出現(xiàn)了無輸出的情況,檢查下發(fā)現(xiàn)主函數(shù)的代碼順序錯誤,在C++編程中要注意代碼運行順序
基類派生類的派生類在繼承上一個派生類數(shù)據(jù)時不可以直接運用
實驗7 多態(tài)性
7.1 實驗?zāi)康暮鸵?br /> 1、 掌握將運算符重載為成員函數(shù)與非成員函數(shù)的區(qū)別。
2、 掌握靜態(tài)編聯(lián)與動態(tài)聯(lián)編的概念、區(qū)別及實現(xiàn)方式。
2、 掌握利用虛函數(shù)實現(xiàn)動態(tài)多態(tài)的方法。
3、 掌握利用純虛函數(shù)與抽象類實現(xiàn)動態(tài)多態(tài)的方法。
7.2 所占學(xué)時數(shù)
本實驗安排 2 個實驗課時。
7.3 實驗任務(wù)
7.3 任務(wù)一
(1)題目名稱
定義一個基類為哺乳動物類 mammal,其中有數(shù)據(jù)成員年齡、重量、品種,有成員函數(shù) move()、speak()、eat()等,以此表示動物的行為。由這個基類派生出狗、貓、馬、豬等哺乳動物,它們都有各自的行為。編程分別使各個動物表現(xiàn)出不同的行為。
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
1、為實現(xiàn)動態(tài)聯(lián)編,首先建立 Mammal 抽象類,以此抽象類作為基類,派生 dog、cat、 horse、pig 類。其中 Mammal 類數(shù)據(jù)員有(姓名)name 、(年齡)age、(重量)weight。成員函數(shù) move()、eat()、speak(),定義為純虛函數(shù):另一個成員函數(shù) display(),聲明為虛函數(shù)。
2、建立各個派生類 dog、cat、horse、pig。然后建立構(gòu)造函數(shù)為其初始化。再定義函數(shù) move()、speak()、eat()等。
3、main() 函數(shù)中建立指向 Mammal 的指針數(shù)組,并為各派生類初始化。把指針數(shù)組分別指向各個派生類。設(shè)計一個循環(huán)來顯示派生類對象的信息。
(3)程序源碼
#include <iostream> #include<string> using namespace std; class Mammal { public:virtual void move()=0;virtual void speak()=0;virtual void eat()=0;virtual void display(){}; private:float age;double weight;string name ; }; class Dog:virtual public Mammal { public:Dog(int a,double w,string n);void move(){cout<<name<<"爬行"<<ends;}void speak(){cout<<name<<"汪"<<ends;}void eat(){cout<<name<<"骨頭?<<ends;} private:int age;double weight;string name ;}; Dog::Dog(int a,double w,string n):age(a),weight(w),name(n) {cout<<"種類:狗·"<<ends;cout<<"姓名:"<<name<<ends;cout<<"年齡:"<<age<<ends;cout<<"重量:"<<weight<<"kg"<<endl;}class Cat:virtual public Mammal { public:Cat(int a,double q,string n);void move(){cout<<name<<"爬行"<<ends;}void speak(){cout<<name<<"喵"<<ends;}void eat(){cout<<name<<"魚"<<ends;} private:int age;double weight;string name ;}; Cat::Cat(int a,double w,string n):age(a),weight(w),name(n) {cout<<"種類:貓¨"<<ends;cout<<"姓名:"<<name<<ends;cout<<"年齡:"<<age<<ends;cout<<"重量:"<<weight<<"kg"<<endl;} class Horse:virtual public Mammal { public:Horse(int a,double w,string n);void move(){cout<<name<<"爬行"<<ends;}void speak(){cout<<name<<"吼"<<ends;}void eat(){cout<<name<<"草"<<ends;} private:int age;//年齡double weight;//質(zhì)量string name ;//種類 }; Horse::Horse(int a,double w,string n):age(a),weight(w),name(n) {cout<<"種類:馬"<<ends;cout<<"姓名:"<<name<<ends;cout<<"年齡:"<<age<<ends;cout<<"重量:"<<weight<<"kg"<<endl;}class Pig:virtual public Mammal { public:Pig(int a,double w,string n);void move(){cout<<name<<"爬行"<<ends;}void speak(){cout<<name<<"哼"<<ends;}void eat(){cout<<name<<"雜食"<<ends;} private:int age;//年齡double weight;//質(zhì)量string name ;//種類 }; Pig::Pig(int a,double w,string n):age(a),weight(w),name(n) {cout<<"種類:阰豬í"<<ends;cout<<"姓名:"<<name<<ends;cout<<"年齡:"<<age<<ends;cout<<"重量:"<<weight<<"kg"<<endl;}void main() {Mammal *m[4];Dog d(0.2,30,"小狗");Cat c(1,10,"小貓");Horse h(5,60,"小馬");Pig p(1,200,"小豬");m[0]=&d;m[1]=&c;m[2]=&h;m[3]=&p;for (int i=0;i<4;i++){m[i]->move();m[i]->speak();m[i]->eat();}}(4)運行結(jié)果(截圖)
(5)心得體會
抽象類不能實例化,只能通過指針和引用訪問派生類的對象(多態(tài)性)
實驗8 交通燈設(shè)計
8.1 實驗?zāi)康暮鸵?br /> 1.熟悉Arduino編程環(huán)境,編制簡單C++程序并運行,熟悉 C++的編輯、 編譯、連接、運行、斷點調(diào)試等過程。
2.了解交通燈設(shè)計實驗的電子原理圖,熟悉電路板布局圖,熟悉燒制程序到電路板。
3. 掌握交通燈程序的設(shè)計和運行原理,并能夠根據(jù)自己的能力做相應(yīng)的擴展
8.2 所占學(xué)時數(shù)
本實驗安排 2 個實驗課時。
8.3 實驗任務(wù)
8.3 任務(wù)一
(1)題目名稱
在Arduino上烤制下面程序,觀察電路板效果。
①修改代碼改變小燈延遲時間,觀察效果。
②修改代碼改變小燈開關(guān)邏輯,生成自定義的效果
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
參考已有PPT和實驗視頻,了解熟悉Arduino的使用和操作,根據(jù)線路圖安裝好器材(選擇合適的電阻),在軟件上輸入題目給出的代碼,連接好電腦和線路板的接口進(jìn)行實驗操作
成功后修改代碼中的部分?jǐn)?shù)據(jù)進(jìn)行實驗,了解每個語句的作用
修改語句的邏輯順序,觀察實驗結(jié)果
(3)程序源碼
(4)運行結(jié)果(截圖)
(5)心得體會
根據(jù)線路圖選擇合適的電阻
Arduino中自帶delay函數(shù)
代碼中的接口位置要與線路板上的連接接口相同
實驗9 數(shù)組、指針與字符串
9.1 實驗?zāi)康暮鸵?br /> 1.熟悉Arduino編程環(huán)境,編制簡單C++程序并運行,熟悉 C++的編輯、 編譯、連接、運行、斷點調(diào)試等過程。
2.了解數(shù)碼管設(shè)計實驗的電子原理圖,熟悉電路板布局圖,熟悉燒制程序到電路板。
3. 掌握數(shù)碼管程序的設(shè)計和運行原理,并能夠根據(jù)自己的能力做相應(yīng)的擴展
4.分支和循環(huán)結(jié)構(gòu)的使用
9.2 所占學(xué)時數(shù)
本實驗安排 2 個實驗課時。
9.3 實驗任務(wù)
9.3 任務(wù)一
(1)題目名稱
在Arduino上烤制下面程序,觀察電路板效果。
①修改代碼改變數(shù)碼管延遲時間,觀察效果
②修改代碼改變數(shù)碼管邏輯,生成自定義的效果。(入生成“ABCDEF”的效果)
(2)構(gòu)思過程(可用文字、流程圖、UML圖等方式表達(dá))
依照PPT和實驗視頻,了解數(shù)碼管的內(nèi)部結(jié)構(gòu)
按照電路圖連接好器材
根據(jù)已有程序代碼運行操作觀察實驗現(xiàn)象,同時進(jìn)行修改來了解語句作用。
(3)程序源碼
int a = 7;//定義數(shù)字接口7 連接a 段數(shù)碼管 int b = 6;// 定義數(shù)字接口6 連接b 段數(shù)碼管 int c = 5;// 定義數(shù)字接口5 連接c 段數(shù)碼管 int d = 11;// 定義數(shù)字接口11 連接d 段數(shù)碼管 int e = 10;// 定義數(shù)字接口10 連接e 段數(shù)碼管 int f = 8;// 定義數(shù)字接口8 連接f 段數(shù)碼管 int g = 9;// 定義數(shù)字接口9 連接g 段數(shù)碼管 int dp = 4;// 定義數(shù)字接口4 連接dp 段數(shù)碼管 void digital_1(void) //顯示數(shù)字1 {unsigned char j;digitalWrite(c, HIGH);//給數(shù)字接口5 引腳高電平,點亮c 段digitalWrite(b, HIGH);//點亮b 段for (j = 7; j <= 11; j++)//熄滅其余段digitalWrite(j, LOW);digitalWrite(dp, LOW);//熄滅小數(shù)點DP 段 } void digital_2(void) //顯示數(shù)字2 {unsigned char j;digitalWrite(b, HIGH);digitalWrite(a, HIGH);for (j = 9; j <= 11; j++)digitalWrite(j, HIGH);digitalWrite(dp, LOW);digitalWrite(c, LOW);digitalWrite(f, LOW); } void digital_3(void) //顯示數(shù)字3 {unsigned char j;digitalWrite(g, HIGH);digitalWrite(d, HIGH);for (j = 5; j <= 7; j++)digitalWrite(j, HIGH);digitalWrite(dp, LOW);digitalWrite(f, LOW);digitalWrite(e, LOW); } void digital_4(void) //顯示數(shù)字4 {digitalWrite(c, HIGH);digitalWrite(b, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);digitalWrite(dp, LOW);digitalWrite(a, LOW);digitalWrite(e, LOW);digitalWrite(d, LOW); } void digital_5(void) //顯示數(shù)字5 {unsigned char j;for (j = 7; j <= 9; j++)digitalWrite(j, HIGH);digitalWrite(c, HIGH);digitalWrite(d, HIGH);digitalWrite(dp, LOW);digitalWrite(b, LOW);digitalWrite(e, LOW); } void digital_6(void) //顯示數(shù)字6 {unsigned char j;for (j = 7; j <= 11; j++)digitalWrite(j, HIGH);digitalWrite(c, HIGH);digitalWrite(dp, LOW);digitalWrite(b, LOW); } void digital_7(void) //顯示數(shù)字7 {unsigned char j;for (j = 5; j <= 7; j++)digitalWrite(j, HIGH);digitalWrite(dp, LOW);for (j = 8; j <= 11; j++)digitalWrite(j, LOW); } void digital_8(void) //顯示數(shù)字8 {unsigned char j;for (j = 5; j <= 11; j++)digitalWrite(j, HIGH);digitalWrite(dp, LOW); } void setup() {int i;//定義變量for (i = 4; i <= 11; i++)pinMode(i, OUTPUT);//設(shè)置4~11 引腳為輸出模式 } void loop() {while (1){digital_1();//顯示數(shù)字1delay(2000);//延時2sdigital_2();//顯示數(shù)字2delay(1000); //延時1sdigital_3();//顯示數(shù)字3delay(1000); //延時1sdigital_4();//顯示數(shù)字4delay(1000); //延時1sdigital_5();//顯示數(shù)字5delay(1000); //延時1sdigital_6();//顯示數(shù)字6delay(1000); //延時1sdigital_7();//顯示數(shù)字7delay(1000); //延時1sdigital_8();//顯示數(shù)字8delay(1000); //延時1s} }(4)運行結(jié)果(截圖)
(5)心得體會
數(shù)碼管使用時跟發(fā)光二極管一樣,要連接限流電阻,防止電流
在代碼操作控制數(shù)碼管顯示數(shù)字時,要求對應(yīng)的二極管發(fā)光即可
總結(jié)
以上是生活随笔為你收集整理的燕山大学C++实验报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 3278,抓牛问题(BFS)
- 下一篇: K210扫描二维码