日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

燕山大学C++实验报告

發布時間:2024/3/13 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 燕山大学C++实验报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

贈予燕大學弟學妹:

下面這些只是一種參考方法,并不是一定要這樣寫的。方法思想萬卷不離其宗,只要掌握了知識點就都沒問題的,下午答辯時候按照自己的理解回答老師的問題就可以了,不用緊張,只要知識點會無論怎樣能表達出來就可以了。

PS:大一代碼寫的很爛,不喜勿噴 Thanks?(・ω・)ノ

資源:實驗報告.doc

給大家設置 0積分下載了,直接載下來參考就行啦:
https://download.csdn.net/download/weixin_45525272/18736257

另外:其他帶積分資源 沒積分不知道咋下的 可以參考這一篇文章:

https://yangyongli.blog.csdn.net/article/details/116832457

文章目錄

  • 贈予燕大學弟學妹:
  • 資源:實驗報告.doc
  • C++面向對象程序設計實驗報告
    • 實驗1 編程環境的熟悉及簡單程序的編制
      • 1.3.1 任務一
      • 1.3.1 任務二
    • 實驗2 函數的應用
      • 2.3.1 任務一
      • 2.3.2 任務二
      • 2.3.3 任務三
    • 實驗3 類與對象、構造與析構函數
      • 3.3.1 任務一
    • 實驗4 數據共享與保護
    • 實驗5 數組、指針與字符串
      • 5.3 任務一
    • 實驗6 類的繼承與派生
      • 6.3.1 任務一
    • 實驗7 多態性
      • 7.3 任務一
    • 實驗8 交通燈設計
      • 8.3 任務一
    • 實驗9 數組、指針與字符串

C++面向對象程序設計實驗報告

實驗1 編程環境的熟悉及簡單程序的編制

1.1 實驗目的和要求
1.熟悉 VC++2010 編程環境,編制簡單 C++程序并運行,熟悉 C++的編輯、 編譯、 連接、運行、斷點調試等過程。
2.掌握 C++數據類型,熟悉如何定義和使用常量和變量,以及對它們賦值的方法。
3.學會使用 C++的有關算術運算符及表達式,特別是自加(++)和自減(–)運算符 的使用。
4.分支和循環結構的使用
1.2 所占學時數
本實驗安排 2 個實驗課時。
1.3 實驗任務

1.3.1 任務一

(1)題目名稱
功能需求:運行時顯示"Menu: A(dd) D(elete) S(ort) Q(uit), Select one:“提示
用戶輸入,A 表示增加,D 表示刪除,S 表示排序,Q 表示退出,輸入為 A、 D、S 時分別提示”
數據已經增加、刪除、排序。"輸入為 Q 時程序結束。
按照上述功能需求寫兩個程序,分別使用if分支語句和switch分支語句實現:
程序1要求:使用 if … else 語句進行判斷,用 break、continue 控制程序流程。
程序2要求:使用 Switch 語句實現。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
在一個大的循環中可以無限次地輸入、輸出,將輸入的內容去初始化一個新的字符,再對該字符進行對應操作:
程序1.用if進行分類,逐步套用
程序2.用case進行分類,逐步套用

(3)程序源碼

程序1#include <iostream> using namespace std;int main() {cout<<"提示用戶輸入,A 表示增加,D 表示刪除,S 表示排序,Q 表示退出"<<endl;char C;for( ; ; ){ cin>>C;if(C=='A'){ cout<<"數據已經增加"<<endl;continue;}else if(C=='D'){ cout<<"數據已經刪除"<<endl;continue;}else if(C=='S'){ cout<<"數據已經排序"<<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<<"數據已經增加"<<endl;break;case 'D':cout<<"數據已經刪除"<<endl;break;case 'S':cout<<"數據已經排序"<<endl;break;case 'Q':break;default:cout<<"請按恪提示輸入"<<endl;}}return 0; }

(4)運行結果(截圖)
程序1:

(5)心得體會
在循環語句中,break和continue的作用不同:break表示是終止整個循環體,而continue表示是終止這一次循環,進入下一個循環。

1.3.1 任務二

(1)題目名稱
找出2~10000之內的所有完全數。所謂完全數,即其各因子之和正好等于本身的數。如
6=1+2+3,28=1+2+4+7+14,所以6,28都是完全數。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
使函數在規定范圍內判斷該數是否是完全數:在循環中使該數對從2開始到它自身進行取余運算,將整除的因子相加(除自身外)求和。If語句進行判斷,若是和與自身相同,則返回值為1;反之,返回值為0.主函數中,輸出返回值為1的完全數。

(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)運行結果(截圖)

(5)心得體會
函數返回值可以借助計算機語言0和1簡化操作

實驗2 函數的應用

2.1 實驗目的和要求
1.掌握函數聲明、定義和調用的方法;
2.掌握函數遞歸調用的方法;
3.掌握重載函數的聲明、定義和使用方法;
4.理解函數參數傳遞中傳值與引用的區別
2.2 所占學時數
本實驗安排 2 個實驗課時。
2.3 實驗任務

2.3.1 任務一

(1)題目名稱
用遞歸方法編寫函數 Fibonnacci(斐波那契)級數:
Fn=Fn-1 + Fn-2; F1=F2=1;
并求出第 26 項的值。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
利用遞歸思想構建一個函數表示斐波那契數列,在主程序里引用函數體直接得出數列第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)運行結果(截圖)

(5)心得體會
函數的構建需要確定函數類型及形參的數據類型,引用時同樣也注意實參的數據類型是否與形參相同,以及返回值類型。

2.3.2 任務二

(1)題目名稱
設計一函數,判斷一整數是否為素數。并完成下列程序設計:
①編寫求素數的函數,并用這個函數求 3-200 之間的所有素數
②在 4-200 之間,驗證歌德巴赫猜想:任何一個充分大的偶數都可以表示為兩個素數之和。輸出 4=2+2 6=3+3 …… 200=3+197
注:素數又稱質數,指在一個大于 1 的自然數中,除了 1 和此整數自身外,不能被其他自然數(不包括 0)整除的數

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
先構造出一個判斷素數的函數,在大循環中讓該數依次去除以比它小的數,直至循環可以循環到該數前一個,輸出。
驗證哥德巴赫猜想時,任意偶數可以分成兩素數的和,簡化驗證過程,我們可以直接驗證每個偶數都可以分為3和另一個素數和(除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)運行結果(截圖)

(5)心得體會
判斷素數時可以借用break和continue來簡化函數循環語句
預處理文件#include 中的stringstream和str()可以將int型轉化為string型

2.3.3 任務三

(1)題目名稱
①比較值傳遞和引用傳遞的相同點和不同點。
②調用被重載的函數時,通過什么來區分被調用的是哪一個函數?

(2)答:
① 1、相同點:都是用來初始化對象的
2、不同點:
傳值是單向的,形參的改變不會影響到實參;
傳址是雙向的,形參可以改變實參,數據不安全。
② 重載函數名是相同的,但是函數的參數類型或者個數會不同,可以通過觀察參數的類型和個數進行判斷調用的函數。

實驗3 類與對象、構造與析構函數

3.1 實驗目的和要求
1.掌握類的定義和使用。
2.掌握類的定義和對象的聲明。
3.掌握具有不同訪問屬性的成員的訪問方式。
4.深入體會構造函數、復制構造函數、析構函數的執行機制。
5.使用的 VC++的 debug 調試功能觀察程序流程,跟蹤觀察類的構造函數、析構函數、 成員函數的執行順序。
3.2 所占學時數
本實驗安排 4 個實驗課時。
3.3 實驗任務

3.3.1 任務一

(1)題目名稱
設計一個用于人事管理的 People(人員)類。考慮到通用性,這里只抽象出所有類型人員都具有的屬性:number(編號)、sex(性別)、birthday(出生日期)、id(身份 證號)等。
其中"出生日期"定義為一個"日期"類內嵌子對象。
用成員函數實現對人員信息 的錄入和顯示。
要求包括:構造函數和析構函數、拷貝構造函數、內聯成員函數、帶缺省形參值的成員函數 、聚集。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
定義Date類,利用類的構造函數聲明輸入和輸出的兩個操作函數對內嵌子對象birthday進行操作。
定義People類,初始化基礎成員函數,利用公有成員函數進行People對象的輸入。
在主函數中聲明People類的對象進行輸入,利用People類的復制構造函數進行輸出。

(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)運行結果(截圖)

(5)心得體會
利用拷貝構造函數可以更方便地實現從輸入轉到輸出的過程
一個類的對象可以在另一個類中作為成員函數
字符串的使用一定要在代碼前加入預處理#include

實驗4 數據共享與保護

4.1 實驗目的和要求
1.觀察程序運行中變量的作用域、生存期。
2.學習類的靜態成員的使用。
3.理解類的友元函數、友元類。
4. 學習多文件結構在 C++程序中的使用。
4.2 所占學時數
本實驗安排 4 個實驗課時。
4.3 實驗任務
4.3 任務一

(1)題目名稱
定義一個 Girl 類和一個 Boy 類,這兩個類中都有表示姓名、年齡的私有成員變量, 都要定義構造函數、析構函數、輸出成員變量信息的公有成員函數。
刪除兩個類中的函數 visitgirl(girl &),visitboy(boy &) ,定義一個頂層函數 visitboygirl(boy &,girl &),作為以上兩個類的友元,通過調用該函數輸出男孩和女孩的信息。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
定義兩個類,在其中分別定義出它的構造函數和析構函數并聲明出最終的頂層友元函數。利用構造函數把私有數據初始化。在主函數中聲明類的對象,利用頂層函數進行輸出。

(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)運行結果(截圖)

(5)心得體會
友元類不能傳遞且友元關系是單向的;
若A為B的友元類,則A中所有函數成員都可以訪問B的私有和保護成員;

實驗5 數組、指針與字符串

5.1 實驗目的和要求
1.學習使用數組。
2.掌握指針的使用方法,體會運算符&、*的不同作用。
3. 學習字符串數據的組織和處理。
4. 練習通過動態分配內存實現動態數組,并體會指針在其中的作用。
5.分別使用字符數組和標準 C++庫練習處理字符串的方法。
5.2 所占學時數
本實驗安排 4 個實驗課時。
5.3 實驗任務

5.3 任務一

(1)題目名稱
用類來實現矩陣,定義一個矩陣的類,屬性包括:
矩陣大小,用 lines, rows(行、列來表示);
存貯矩陣的數組指針,根據矩陣大小動態申請(new)。
矩陣類的方法包括:
構造函數:參數是矩陣大小,需要動態申請存貯矩陣的數組;
析構函數:需要釋放矩陣的數組指針;
拷貝構造函數:需要申請和復制數組(深復制);
輸入函數:可以從 cin 中輸入矩陣元素;
輸出函數:將矩陣格式化輸出到 cout;
矩陣相加函數:實現兩個矩陣相加的功能,結果保存在另一個矩陣里,但必須矩陣
大小相同;
矩陣相減的函數:實現兩個矩陣相減的功能,結果保存在另一個矩陣里,但必須矩 陣大小相同。
主函數功能:
定義三個矩陣:A1、A2、A3;
初始化 A1、A2;
計算并輸出 A3 = A1+A2,A3=A1+A2;
用 new 動態創建三個矩陣類的對象:pA1、pA1、pA3;
初始化 pA1、pA2;
計算并輸出 pA3=pA1+pA2,pA3=pA1+pA2;
釋放 pA1、pA1、pA3。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
利用復制構造函數實現矩陣的輸入,避免使用數組出現混亂
學習指針的用法以及注意事項
(3)程序源碼

#include<iostream> using namespace std; class Matrix { public:Matrix();Matrix(int line, int row);Matrix(const Matrix &m);void set();void show();~Matrix();friend void plus(const Matrix &a, const Matrix &b, Matrix &m);friend void sub(const Matrix &a, const Matrix &b, Matrix &m); private:int lines; int rows; int **p; };void Matrix::set() {for (int i = 0; i < lines; i++){for (int j = 0; j < rows; j++){cout << "請輸入第”<<i+1<<", 第” << j + 1 << "列元素:" << ends;cin >> p[i][j];cout << endl;}} } Matrix::Matrix(int line, int row) :lines(line), rows(row) {lines = line; rows = row;p = new int *[lines];for (int i = 0; i < lines; i++){p[i] = new int[rows];} }Matrix::Matrix(const Matrix &m) {lines = m.lines; rows = m.rows;p = new int*[rows];for (int i = 0; i < lines; i++){for (int j = 0; j < rows; j++){p[i][j] = m.p[i][j];}} }Matrix::~Matrix() {for (int i = 0; i < lines; i++){delete p[i];}delete[]p; }void Matrix::show() {for (int i = 0; i < lines; i++){for (int j = 0; j < rows; j++){cout << p[i][j] << " ";}cout << endl;} }void plus(const Matrix &a, const Matrix &b, Matrix &m) {for (int i = 0; i < a.lines; i++){for (int j = 0; j < a.rows; j++){m.p[i][j] = a.p[i][j] + b.p[i][j];}}}void sub(const Matrix &a, const Matrix &b, Matrix &m) {for (int i = 0; i < a.lines; i++){for (int j = 0; j < a.rows; j++){m.p[i][j] = a.p[i][j] - b.p[i][j];}} }int main() {Matrix A1(2, 3), A2(2, 3), A3(2, 3);A1.set();A2.set();plus(A1, A2, A3);A3.show();Matrix *pA1 = new Matrix(2, 3);Matrix *pA2 = new Matrix(2, 3);Matrix *pA3 = new Matrix(2, 3);pA1->set();pA2->set();plus(*pA1, *pA2, *pA3);pA1->show();pA2->show();pA3->show();delete pA1;delete pA2;delete pA3;return 0; }

(4)運行結果(截圖)

(5)心得體會
復制函數可以大大提高代碼的利用率

實驗6 類的繼承與派生

6.1 實驗目的和要求
1、從深層次上理解繼承與派生的關系
2、掌握不同繼承方式下,從派生類/對象內部和外部對基類成員的訪問控制權限。
3、掌握單繼承和多繼承的使用方法,尤其是派生類構造函數的聲明方式。
4、掌握繼承與派生下構造函數與析構函數的調用順序。
5、理解“類型兼容”原則 。
6、學習利用虛基類解決二義性問題。
6.2 所占學時數
本實驗安排 4 個實驗課時。
6.3 實驗任務

6.3.1 任務一

(1)題目名稱
編寫 C++程序,以完成以下功能(具體的數據成員、函數成員,請自主定義):

(1)聲明一個基類 Shape(形狀),其中包含一個方法來計算面積;
(2)從 Shape 派生兩個類:矩形類(Rectangle)和圓形類(Circle);
(3)從 Rectangle 類派生正方形類 Square;
(4)分別實現派生類構造函數、析構函數及其它功能的成員函數;
(5)創建各派生類的對象,觀察構造函數、析構函數的調用次序;
(6)計算不同對象的面積。

2)構思過程(可用文字、流程圖、UML圖等方式表達)
聲明基類,要求其中的函數可以在派生類中同樣適用(公有派生)
聲明派生類,確定公有成員和私有成員,引用基類中的面積area函數,并具體定義area函數中的計算方式
在主函數中依次輸入邊長(半徑)的數值,返回函數并輸出

(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)運行結果(截圖)

(5)心得體會
在代碼運行中出現了無輸出的情況,檢查下發現主函數的代碼順序錯誤,在C++編程中要注意代碼運行順序
基類派生類的派生類在繼承上一個派生類數據時不可以直接運用

實驗7 多態性

7.1 實驗目的和要求
1、 掌握將運算符重載為成員函數與非成員函數的區別。
2、 掌握靜態編聯與動態聯編的概念、區別及實現方式。
2、 掌握利用虛函數實現動態多態的方法。
3、 掌握利用純虛函數與抽象類實現動態多態的方法。

7.2 所占學時數
本實驗安排 2 個實驗課時。
7.3 實驗任務

7.3 任務一

(1)題目名稱
定義一個基類為哺乳動物類 mammal,其中有數據成員年齡、重量、品種,有成員函數 move()、speak()、eat()等,以此表示動物的行為。由這個基類派生出狗、貓、馬、豬等哺乳動物,它們都有各自的行為。編程分別使各個動物表現出不同的行為。

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
1、為實現動態聯編,首先建立 Mammal 抽象類,以此抽象類作為基類,派生 dog、cat、 horse、pig 類。其中 Mammal 類數據員有(姓名)name 、(年齡)age、(重量)weight。成員函數 move()、eat()、speak(),定義為純虛函數:另一個成員函數 display(),聲明為虛函數。
2、建立各個派生類 dog、cat、horse、pig。然后建立構造函數為其初始化。再定義函數 move()、speak()、eat()等。
3、main() 函數中建立指向 Mammal 的指針數組,并為各派生類初始化。把指針數組分別指向各個派生類。設計一個循環來顯示派生類對象的信息。

(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;//質量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;//質量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)運行結果(截圖)

(5)心得體會
抽象類不能實例化,只能通過指針和引用訪問派生類的對象(多態性)

實驗8 交通燈設計

8.1 實驗目的和要求
1.熟悉Arduino編程環境,編制簡單C++程序并運行,熟悉 C++的編輯、 編譯、連接、運行、斷點調試等過程。
2.了解交通燈設計實驗的電子原理圖,熟悉電路板布局圖,熟悉燒制程序到電路板。
3. 掌握交通燈程序的設計和運行原理,并能夠根據自己的能力做相應的擴展
8.2 所占學時數
本實驗安排 2 個實驗課時。
8.3 實驗任務

8.3 任務一

(1)題目名稱
在Arduino上烤制下面程序,觀察電路板效果。
①修改代碼改變小燈延遲時間,觀察效果。
②修改代碼改變小燈開關邏輯,生成自定義的效果

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
參考已有PPT和實驗視頻,了解熟悉Arduino的使用和操作,根據線路圖安裝好器材(選擇合適的電阻),在軟件上輸入題目給出的代碼,連接好電腦和線路板的接口進行實驗操作

成功后修改代碼中的部分數據進行實驗,了解每個語句的作用
修改語句的邏輯順序,觀察實驗結果
(3)程序源碼

int redled =10; //定義數字10 接口 int yellowled =7; //定義數字7 接口 int greenled =4; //定義數字4 接口 void setup() { pinMode(redled, OUTPUT);//定義紅色小燈接口為輸出接口 pinMode(yellowled, OUTPUT); //定義黃色小燈接口為輸出接口 pinMode(greenled, OUTPUT); //定義綠色小燈接口為輸出接口 } void loop() { digitalWrite(redled, HIGH);//點亮紅色小燈 delay(1000);//延時1 秒 digitalWrite(redled, LOW); //熄滅紅色小燈 digitalWrite(yellowled, HIGH);//點亮黃色小燈 delay(200);//延時0.2 秒 digitalWrite(yellowled, LOW);//熄滅黃色小燈 digitalWrite(greenled, HIGH);//點亮綠色小燈 delay(1000);//延時1 秒 digitalWrite(greenled, LOW);//熄滅綠色小燈 }

(4)運行結果(截圖)

(5)心得體會
根據線路圖選擇合適的電阻
Arduino中自帶delay函數
代碼中的接口位置要與線路板上的連接接口相同

實驗9 數組、指針與字符串

9.1 實驗目的和要求
1.熟悉Arduino編程環境,編制簡單C++程序并運行,熟悉 C++的編輯、 編譯、連接、運行、斷點調試等過程。
2.了解數碼管設計實驗的電子原理圖,熟悉電路板布局圖,熟悉燒制程序到電路板。
3. 掌握數碼管程序的設計和運行原理,并能夠根據自己的能力做相應的擴展
4.分支和循環結構的使用
9.2 所占學時數
本實驗安排 2 個實驗課時。
9.3 實驗任務
9.3 任務一
(1)題目名稱
在Arduino上烤制下面程序,觀察電路板效果。
①修改代碼改變數碼管延遲時間,觀察效果
②修改代碼改變數碼管邏輯,生成自定義的效果。(入生成“ABCDEF”的效果)

(2)構思過程(可用文字、流程圖、UML圖等方式表達)
依照PPT和實驗視頻,了解數碼管的內部結構

按照電路圖連接好器材

根據已有程序代碼運行操作觀察實驗現象,同時進行修改來了解語句作用。

(3)程序源碼

int a = 7;//定義數字接口7 連接a 段數碼管 int b = 6;// 定義數字接口6 連接b 段數碼管 int c = 5;// 定義數字接口5 連接c 段數碼管 int d = 11;// 定義數字接口11 連接d 段數碼管 int e = 10;// 定義數字接口10 連接e 段數碼管 int f = 8;// 定義數字接口8 連接f 段數碼管 int g = 9;// 定義數字接口9 連接g 段數碼管 int dp = 4;// 定義數字接口4 連接dp 段數碼管 void digital_1(void) //顯示數字1 {unsigned char j;digitalWrite(c, HIGH);//給數字接口5 引腳高電平,點亮c 段digitalWrite(b, HIGH);//點亮b 段for (j = 7; j <= 11; j++)//熄滅其余段digitalWrite(j, LOW);digitalWrite(dp, LOW);//熄滅小數點DP 段 } void digital_2(void) //顯示數字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) //顯示數字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) //顯示數字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) //顯示數字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) //顯示數字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) //顯示數字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) //顯示數字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);//設置4~11 引腳為輸出模式 } void loop() {while (1){digital_1();//顯示數字1delay(2000);//延時2sdigital_2();//顯示數字2delay(1000); //延時1sdigital_3();//顯示數字3delay(1000); //延時1sdigital_4();//顯示數字4delay(1000); //延時1sdigital_5();//顯示數字5delay(1000); //延時1sdigital_6();//顯示數字6delay(1000); //延時1sdigital_7();//顯示數字7delay(1000); //延時1sdigital_8();//顯示數字8delay(1000); //延時1s} }

(4)運行結果(截圖)

(5)心得體會
數碼管使用時跟發光二極管一樣,要連接限流電阻,防止電流
在代碼操作控制數碼管顯示數字時,要求對應的二極管發光即可

總結

以上是生活随笔為你收集整理的燕山大学C++实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。