C++程序設(shè)計(jì)案例教程完整版課件全套ppt教學(xué)教程最全整套電子講義幻燈片(最新)_第1頁
C++程序設(shè)計(jì)案例教程完整版課件全套ppt教學(xué)教程最全整套電子講義幻燈片(最新)_第2頁
C++程序設(shè)計(jì)案例教程完整版課件全套ppt教學(xué)教程最全整套電子講義幻燈片(最新)_第3頁
C++程序設(shè)計(jì)案例教程完整版課件全套ppt教學(xué)教程最全整套電子講義幻燈片(最新)_第4頁
C++程序設(shè)計(jì)案例教程完整版課件全套ppt教學(xué)教程最全整套電子講義幻燈片(最新)_第5頁
已閱讀5頁,還剩355頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1.1 面向?qū)ο蟪绦蛟O(shè)計(jì)1.2 C+程序設(shè)計(jì)1.3 C+程序的開發(fā)過程1.4 面向?qū)ο蟪绦虻慕M成元素第1章 緒論1.5 C+程序的編譯與調(diào)試1.6 本章小結(jié)2.1 C+數(shù)據(jù)類型2.2 變量與常量2.3 運(yùn)算符與表達(dá)式2.4 控制結(jié)構(gòu)2.5 數(shù)組2.6 函數(shù)第2章 C+基礎(chǔ)知識(shí)2.7 結(jié)構(gòu)體2.8 聯(lián)合體2.9 指針2.10 面向過程程序設(shè)計(jì)規(guī)范2.11 菜單結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)2.12 本章小結(jié)返回目錄2.1.1C+字符集C+基本數(shù)據(jù)類型2.1.2C+構(gòu)造數(shù)據(jù)類型2.1.3引用2.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征2.1.5面向?qū)ο蟮某绦蛟O(shè)計(jì)方法與步驟2.1.7面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過程程序設(shè)計(jì)的比

2、較2.1.62.1 C+數(shù)據(jù)類型C+字符集C+字符集字母: az;AZ數(shù)字:0 1 2 3 4 5 6 7 8 9其他符號(hào):+ - * / = , . _ : ; ? | ! # % & () (空格)C+基本數(shù)據(jù)類型知識(shí)點(diǎn)概述1. 字符類型字符常量:括在單引號(hào)中的字符。如: A,特殊的字符常量:轉(zhuǎn)義字符 ,如:n字符變量:使用char進(jìn)行聲明的標(biāo)識(shí)符。如:char ch;字符串常量:括在雙引號(hào)內(nèi)的字符序列,如:”hello,world!” 2. 整數(shù)類型整型常量:十進(jìn)制、八進(jìn)制、十六進(jìn)制的整型常量。整型變量:使用int進(jìn)行聲明的變量3. 浮點(diǎn)類型與雙精度類型浮點(diǎn)常量:實(shí)數(shù)和科學(xué)計(jì)數(shù)法兩種形式

3、浮點(diǎn)變量與雙精度變量:分別使用float和double進(jìn)行聲明4. 空類型:voidC+構(gòu)造數(shù)據(jù)類型什么是構(gòu)造類型?構(gòu)造類型又稱為組合類型,它是由基本類型按照某種規(guī)則組合而成的數(shù)組:由具有相同數(shù)據(jù)類型的元素組成的集合結(jié)構(gòu)體:由不同的數(shù)據(jù)類型構(gòu)成的一種混合的數(shù)據(jù)結(jié)構(gòu)聯(lián)合:構(gòu)成聯(lián)合體的數(shù)據(jù)成員共用同一段內(nèi)存單元枚舉類型:將變量的值列舉指針類型:存儲(chǔ)另一變量的地址類類型:它定義的是一種對(duì)象類型,由數(shù)據(jù)和方法組成知識(shí)點(diǎn)概述 引用概念:變量的別名,和所引用變量共享內(nèi)存定義:數(shù)據(jù)類型 & 引用變量名=變量名;使用:引用函數(shù)的參數(shù)引用還可以做函數(shù)的返回值程序舉例int main() int a = 1; i

4、nt& b = a;/定義b是a的引用 cout 初始化后:n; cout a=a &a endl; cout b= b &b endl; b = 3; cout b=3后:n; cout a= a &a endl; cout b= b &b endl;int& c = b;/ 定義c是b的引用,別名的別名 c = 4;cout c=4后:n;cout a= a &a endl;cout b= b &b endl;cout c= c &c endl;system(pause);return 0;程序舉例void swap(int &x, int &y);int main() int a = 2

5、, b = 3; cout a= a t a:address= &a endl; cout b= b t b:address= &b endl; swap(a, b);/調(diào)用函數(shù)交換a,b的值 cout a= a t a:address= &a endl; cout b= b t b:address= &b endl; system(pause); return 0;/函數(shù)的定義void swap(int &x, int &y) int tmp; tmp = x; x = y; y = tmp;程序舉例int vals10;/定義的全局?jǐn)?shù)組變量int error = -1;int max =

6、0;int &maxValue(int x, int y);/引用做函數(shù)返回值int &put(int n);/返回值是引用類型int main() res = 0; cout 引用僅作函數(shù)返回值:n; res = maxValue(2, 3); cout res= res tmax= max endl; cout 引用作函數(shù)返回值,返回值作了左值:n; put(0) = 10; / 以 put(0) 函數(shù)值作為左值,等價(jià) vals0=10; put(9) = 20; / 以 put(9) 函數(shù)值作為左值,等價(jià) vals9=20; cout vals0 t; cout vals9 y ? x

7、: y; return max;/*功能:處理數(shù)組越界函數(shù)名稱:put參數(shù):n-整數(shù)類型返回值:整形變量的引用*/int &put(int n) if (n = 0 & n = 9) return valsn; else cout subscript error; return error; 返回目錄2.2.1標(biāo)識(shí)符與關(guān)鍵字變量的定義與初始化2.2.22.2 變量與常量常量與符號(hào)常量2.2.3標(biāo)識(shí)符與關(guān)鍵字標(biāo)識(shí)符:程序或系統(tǒng)定義的符號(hào)用來作為變量名、常量名、函數(shù)名、類型名、文件名等。由字母、數(shù)字、下劃線組成,且由字母或下劃線開頭的字符串,中間不能有空格_sum, sum, stu_name,

8、price等為合法的標(biāo)識(shí)符。cout,52select,a lot,-W,sin 等為不合法標(biāo)注符。關(guān)鍵字:也稱保留字是C+編譯器預(yù)定義的、具有固定含義的標(biāo)識(shí)符,不允許另作它用常用關(guān)鍵字intfalseifdefaultenumsizeofpublicconst_castshortvoidelsereturnunionnewprotectedstatic_castunsignedtypedefswitchstructdeleteprivatereinterpret_castlongtypeidcaseclassautovirtualdynamic_castfloatdotemplatestat

9、icusingexplicitdoublewhiletypenameexternnamespacetrycharforregisterthiscatchw_char_t breakvolatileoperatorthrowboolgotomutablefriend truecontinueconstinline變量的定義與初始化變量定義的語法:變量的類型變量的名稱;初始化的方法int a=;intb(1);int c;c=1;常量與符號(hào)常量常量通過關(guān)鍵字const來定義語法規(guī)則const 變量類型變量名稱;或const 變量類型變量名稱=初始值;如:const double pi=3.14;返

10、回目錄2.3.1運(yùn)算符表達(dá)式2.3.2類型轉(zhuǎn)換2.3.32.3 運(yùn)算符與表達(dá)式運(yùn)算符查看詳情1.算術(shù)運(yùn)算符:+、-、*、 /、 %、+、-2.賦值運(yùn)算符:= 、+=、-= 、*= 、/=、%=3.關(guān)系運(yùn)算符: 、=、= 、!=4.邏輯運(yùn)算符:! 、 &、 |5.條件運(yùn)算符:? :6.位運(yùn)算符:、| 、&7.sizeof運(yùn)算符(求字節(jié)運(yùn)算符):sizeof8.逗號(hào)運(yùn)算符:,9.其它運(yùn)算符:指針運(yùn)算符(*、&)、分量運(yùn)算符(* 、-)、函數(shù)調(diào)用運(yùn)算符()、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(type)返回運(yùn)算符的優(yōu)先級(jí)與結(jié)合性運(yùn)算符優(yōu)先級(jí)決定了在表達(dá)式中各個(gè)運(yùn)算符執(zhí)行的先后順序括號(hào)會(huì)改變優(yōu)先級(jí)運(yùn)算符的結(jié)合方式有兩

11、種:左結(jié)合和右結(jié)合左結(jié)合表示運(yùn)算對(duì)象先與其左邊的運(yùn)算符結(jié)合右結(jié)合表示運(yùn)算對(duì)象優(yōu)先與其右邊的運(yùn)算符結(jié)合表達(dá)式表達(dá)式是用于計(jì)算的式子,它由運(yùn)算符、運(yùn)算數(shù)和括號(hào)組成算術(shù)表達(dá)式:由算術(shù)運(yùn)算符和位操作運(yùn)算符組成的表達(dá)式邏輯表達(dá)式:由邏輯運(yùn)算符組成的表達(dá)式。其表達(dá)式值的類型為邏輯型關(guān)系表達(dá)式:由關(guān)系運(yùn)算符組成的表達(dá)式。其表達(dá)式值的類型為邏輯型賦值表達(dá)式:由賦值運(yùn)算符組成的表達(dá)式條件表達(dá)式:由三目運(yùn)算符組成的表達(dá)式逗號(hào)表達(dá)式:用逗號(hào)將若干個(gè)表達(dá)式連起來組成的表達(dá)式類型轉(zhuǎn)換命名空間1. 隱式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換是由編譯器自動(dòng)完成的類型轉(zhuǎn)換。當(dāng)編譯器遇到不同類型的數(shù)據(jù)參與同一運(yùn)算時(shí),會(huì)自動(dòng)將它們轉(zhuǎn)換為相同類型后

12、再進(jìn)行運(yùn)算2顯式類型轉(zhuǎn)換顯式類型轉(zhuǎn)換是由程序員顯式指出的類型轉(zhuǎn)換轉(zhuǎn)換形式有兩種類型名(表達(dá)式)(類型名)表達(dá)式3轉(zhuǎn)換規(guī)則當(dāng)參與運(yùn)算的操作數(shù)必須是bool型時(shí),如果操作數(shù)是其它類型,編譯系統(tǒng)會(huì)自動(dòng)將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false位運(yùn)算的操作數(shù)必須是整數(shù)賦值運(yùn)算要求左值與右值的類型相同,若不同,系統(tǒng)自動(dòng)轉(zhuǎn)換為左值的類型返回目錄2.4.1選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)2.4.22.4 控制結(jié)構(gòu)選擇結(jié)構(gòu)多分支結(jié)構(gòu):if(條件表達(dá)式1) 語句1;else if (條件表達(dá)式2) 語句2;else if (條件表達(dá)式n) 語句n;else 語句n+1;單分支結(jié)構(gòu):if(條件表達(dá)式) 語句1;雙分支結(jié)構(gòu):if

13、(條件表達(dá)式) 語句1;else 語句2;switch語句switch(判斷表達(dá)式) case 常量表達(dá)式1: 語句1; break; case常量表達(dá)式2: 語句2; break; / default: 語句n+1; 循環(huán)結(jié)構(gòu)三要素:循環(huán)變量、循環(huán)體和循環(huán)終止條件循環(huán)結(jié)構(gòu)for循環(huán)的一般結(jié)構(gòu)for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3)語句;while循環(huán)的一般結(jié)構(gòu)while (表達(dá)式)語句;do-while循環(huán)的一般結(jié)構(gòu)do 語句; while (表達(dá)式);expr循環(huán)體假(0)真(非0)whiledo循環(huán)體expr假(0)真(非0)while程序舉例程序2-7:計(jì)算這一天是這一年的第幾天in

14、t monthDays = 0, 30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ;int main() int year, month, day; cout year month day; int sumDays = day;/總天數(shù) for (int i = 1; i month; i+) /忽略閏年sumDays = sumDays + monthDaysi; cout year - month - day is cout year 年的第 sumDays 天n; system(pause);return 0;程序舉例程序2-8:輸入兩個(gè)整數(shù)

15、m,n,計(jì)算其最大公約數(shù)int main() int a, b; cout a b; int m = a, n = b; int r = m%n; while (r != 0) m = n;n = r;r = m%n; cout a , b 的最大公約數(shù)是: n endl; system(pause);return 0;程序舉例程序2-9:用公式求的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-8為止。#include#include#includeusing namespace std;int main() double s = 0, t = 1; int sgn = 1, k = 1; do s

16、= s + t;k = k + 2;sgn = sgn*(-1);t = sgn / double(k); while (fabs(t) 1e-8); cout setprecision(15) s * 4 endl; system(pause); return 0;返回目錄2.5.1一維數(shù)組二維數(shù)組2.5.2字符數(shù)組和字符串類2.5.32.5 數(shù)組一維數(shù)組概念:同一類型的多個(gè)數(shù)據(jù)分配一段連續(xù)的內(nèi)存空間定義:數(shù)據(jù)元素類型數(shù)組變量名稱數(shù)組元素的個(gè)數(shù);數(shù)據(jù)元素類型數(shù)組變量名稱=初值,初值,.;初始化:全部初化,int a=1,2,3,4,5,6;部分初始化,int a5=1,2,3,;訪問:下標(biāo)運(yùn)

17、算符,數(shù)組名下標(biāo)程序舉例:數(shù)組使用#include#includeusing namespace std;int main() /數(shù)組逆置處理 int myArray = 1, 2, 3, 4, 5 ; int n = sizeof(myArray) / sizeof(myArray0);/計(jì)算數(shù)組元素的個(gè)數(shù) int i, j,tmp; for (i = 0, j = n - 1; i j; i+, j-) tmp = myArrayi; myArrayi = myArrayj; myArrayj = tmp; for (i = 0; i n; i+)cout setw(5) myArrayi

18、; cout endl; system(pause); return 0;二維數(shù)組概念:數(shù)組的元素又是數(shù)組,可看作矩陣定義:數(shù)據(jù)元素類型數(shù)組變量名稱數(shù)組元素的行數(shù)數(shù)據(jù)元素的列數(shù);數(shù)據(jù)元素類型數(shù)組變量名稱數(shù)據(jù)元素的列數(shù)=初值,初值,.;初始化分行初始化:例 int a3=1,4,5;不分行初始化:例 int a3=1,2,3,4,5;訪問:數(shù)組名下標(biāo)下標(biāo)程序舉例:設(shè)計(jì)二維數(shù)組程序,輸出九九乘法表:#include#include#includeusing namespace std;#define COL 10#define COLUMN 10int main() int mat COLCOLU

19、MN = 0 ; int i, j; for (i = 1; i COL; i+) /矩陣元素賦值,乘法表 for (j = 1; j = i; j+) mat ij = i*j; for (i = 1; i COL; i+) /輸出乘法表 for (j = 1; j = i; j+) cout setw(3) j * i = mat ij; cout endl; /將結(jié)果寫到文件中 ofstream outFile(res.txt);/定義輸出文件流 for (i = 1; i COL; i+) for (j = 1; j = i; j+) /將結(jié)果寫到輸出文件流中 outFile setw

20、(3) j * i = mat ij; outFile endl; outFile endl; outFile.close();/關(guān)閉輸出文件流 fflush(stdin);/清空輸入緩沖區(qū) getchar(); return 0;字符數(shù)組和字符串類概念:數(shù)組的每一個(gè)元素均為字符類型定義:char 字符數(shù)組名稱字符數(shù)組最多存放的字符元素個(gè)數(shù);char *字符指針名=new charN;string 字符串變量名;程序舉例:將數(shù)字字符串變?yōu)閿?shù)字 #include#include/C+字符串,是類類型using namespace std;int main() string numStr; lon

21、g int number = 0; int singleNum; cout 輸入一個(gè)數(shù)字字符串 numStr; int i = 0; while (numStri != 0) /將單個(gè)字符變?yōu)閿?shù)字,48是0的ASC碼值 singleNum = numStr.at(i) - 48; number = number * 10 + singleNum; i+; cout numStr= numStr endl; cout number= number endl; fflush(stdin); getchar(); return 0;返回目錄2.6.1函數(shù)的定義函數(shù)原型的聲明2.6.2函數(shù)的調(diào)用2.6

22、.3內(nèi)聯(lián)函數(shù)2.6.4函數(shù)的重載2.6.5遞歸函數(shù)2.6.7帶缺省值的函數(shù)2.6.62.6 函數(shù)函數(shù)的定義概念:實(shí)現(xiàn)某一功能的相關(guān)語句組織在一起,并給之注明相應(yīng)的名稱,這種形式的組合就稱為函數(shù)功能:C+程序的基本模塊,函數(shù)組成C+程序至少含有一個(gè)main函數(shù)main是程序運(yùn)行的入口分類:是否為系統(tǒng)預(yù)定義,分為庫函數(shù)和用戶自定義函數(shù)是否有參:有參函數(shù)和無參函數(shù)函數(shù)原型的聲明編譯器遇到一個(gè)函數(shù)調(diào)用時(shí),需要判斷該函數(shù)調(diào)用是否正確,該機(jī)制即函數(shù)原型。C+中,函數(shù)聲明就是函數(shù)原型函數(shù)原型的聲明函數(shù)原型是一條程序語句,它必須以“;”分號(hào)結(jié)束;由函數(shù)返回類型、函數(shù)名和參數(shù)表構(gòu)成函數(shù)返回值類型 函數(shù)名();i

23、nt area(int,int); int area(int length,int width);函數(shù)原型和函數(shù)定義在返回類型、函數(shù)名和參數(shù)表上必須完全一致函數(shù)的調(diào)用直接調(diào)用適用于函數(shù)的返回值為空,或返回值不需要被保存的情況表達(dá)式調(diào)用將函數(shù)調(diào)用放到一個(gè)表達(dá)式中,讓其參與運(yùn)算一般用在賦值表達(dá)式中y=sin(x);嵌套調(diào)用一個(gè)函數(shù)調(diào)用的結(jié)果作另一個(gè)函數(shù)調(diào)用的參數(shù)m=max(a,max(b,c);參數(shù)傳遞傳值傳引用傳地址C+的函數(shù)調(diào)用過程就是棧空間操作的過程(1)建立被調(diào)函數(shù)的??臻g;(2)保護(hù)調(diào)用函數(shù)的運(yùn)行狀態(tài)和返回地址;(3)傳遞參數(shù);(4)將控制權(quán)轉(zhuǎn)交給被調(diào)函數(shù);(5)函數(shù)運(yùn)行完成后,復(fù)制返回

24、值到函數(shù)數(shù)據(jù)塊的底部;(6)恢復(fù)調(diào)用函數(shù)的運(yùn)行狀態(tài);(7)返回到調(diào)用函數(shù)。分析程序的執(zhí)行過程int funcA(int x, int y); int main( )int a=6, b=12;a=funcA(a, b); int funcA(int x, int y)int n=5;n=x+y;return n;main( )b12a6 操作系統(tǒng)運(yùn)行狀態(tài)及返回地址返回值0運(yùn)行程序,執(zhí)行main( )funcA( )n5y12x6main( )運(yùn)行狀態(tài)及返回地址返回值main( )b12a6操作系統(tǒng)運(yùn)行狀態(tài)及返回地址返回值0調(diào)用函數(shù)funcA(a, b)main函數(shù)的臨時(shí)空間 funcA( )n

25、5 18y12x6main( )運(yùn)行狀態(tài)及返回地址返回值 main( )b12a6操作系統(tǒng)運(yùn)行狀態(tài)及返回地址返回值0調(diào)用函數(shù)funcA(a, b),執(zhí)行n=x+y;funcA( )n18y12x6main( )運(yùn)行狀態(tài)及返回地址返回值 18main( )b12a6操作系統(tǒng)運(yùn)行狀態(tài)及返回地址返回值0調(diào)用函數(shù)funcA(a, b),執(zhí)行return n;18126main( )運(yùn)行狀態(tài)及返回地址 18main( )b12a6 18操作系統(tǒng)運(yùn)行狀態(tài)及返回地址返回值0返回到main( )函數(shù)中,a=funcA(a, b); 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)擴(kuò)展(inline expansion)簡稱為內(nèi)聯(lián)(inline)

26、,內(nèi)聯(lián)函數(shù)也稱為內(nèi)嵌函數(shù)函數(shù)的定義或聲明前加上關(guān)鍵字inline一個(gè)函數(shù)定義為內(nèi)聯(lián)函數(shù)后,在程序編譯階段,編譯器就會(huì)把每次調(diào)用該函數(shù)的地方都直接替換為該函數(shù)體中的代碼,由此省去函數(shù)調(diào)用的空間分配、保存現(xiàn)場、參數(shù)傳遞和返回操作等,從而加快整個(gè)程序的執(zhí)行速度內(nèi)聯(lián)函數(shù)可以在一開始僅定義或聲明一次,但必須在函數(shù)被調(diào)用之前定義或聲明函數(shù)的重載功能相似而參數(shù)類型不同的函數(shù)可以使用相同的函數(shù)名,這就是函數(shù)重載參數(shù)類型不同void sort(int *arr,int n);void sort(float*arr,int n);參數(shù)個(gè)數(shù)不同int max(int a,int b);int max(int a,i

27、nt b,int c);參數(shù)順序不同void find(float *arr,int n,float x);void find(float *arr,float x,int n);#includeusing namespace std;int ABS(int);double ABS(double);float ABS(float);int main() int x1=-12; double x2=-12.0; float x3=-12.0; coutABS(x1)endl; coutABS(x2)endl; coutABS(x3)0?a:-a);double ABS(double a)retu

28、rn (a0?a:-a);float ABS(float a)return (a0?a:-a);程序舉例:返回一個(gè)數(shù)的絕對(duì)值只要參數(shù)個(gè)數(shù)不同,參數(shù)類型不同,參數(shù)順序不同,函數(shù)就可以重載。然而,只是返回類型不同則不允許重載。void func(int a); void func(char a); void func(char a, int b); void func(int a, char b); char func(int a); C+按下列三個(gè)步驟的先后順序找到匹配的函數(shù)并調(diào)用之。尋找一個(gè)嚴(yán)格匹配,如果找到了,就調(diào)用那個(gè)函數(shù)。通過相容類型的隱式轉(zhuǎn)換尋求一個(gè)匹配。通過用戶定義的轉(zhuǎn)換尋求一個(gè)匹配

29、,若能查出唯一的一組轉(zhuǎn)換,就用那個(gè)函數(shù)。#includeusing namespace std;void print(int);void print(double);int main()print(1);print(1.0);print(a);print(3.14f);輸出:int: 1double: 1int: 97double: 3.14void print(int a) coutint: aendl;void print(double a) coutdouble: aendl;程序舉例:編程求圓、矩形、梯形的面積double area(double r) return 3.14*r*r;

30、double area(double h,double w) return h*w;double area(double a,double b,double h) return (a+b)*h/2;#includeusing namespace std;double area(double r);double area(double h,double w);double area(double a,double b,double h);int main() double r=23.3; double h1=12,w=5, a=7,b=8, h2=3; coutarea(r)endl; cout

31、area(h1,w)endl; coutarea(a,b,h2);帶缺省值的函數(shù)C+可以給函數(shù)聲明中的參數(shù)使用默認(rèn)值,這樣在函數(shù)調(diào)用時(shí),對(duì)應(yīng)的實(shí)參就可以省略。 #includeusing namespace std;int func(int a=2);int main()coutfunc(5)endl;coutfunc()endl;int func(int a)return a;默認(rèn)參數(shù)規(guī)則一般來說,默認(rèn)參數(shù)總是在函數(shù)聲明時(shí)描述。函數(shù)參數(shù)默認(rèn)值只能從后往前設(shè)置,而實(shí)參只能從前往后給出。例:void func(int a=1, int b, int c=3); void func(int a,

32、int b=2, int c=3); func(10,15,20); func( ); func(12,13); func(2, , 20); 遞歸函數(shù)在函數(shù)體中出現(xiàn)調(diào)用自身的函數(shù)稱為遞歸函數(shù)。例:階乘n!的數(shù)學(xué)函數(shù)描述為其對(duì)應(yīng)的C+函數(shù)描述為:unsigned f(unsigned n)if(n=1)return 1;return n*f(n-1);注意:n的取值范圍1n12例:Fibonacci數(shù)列的數(shù)學(xué)描述為 其等價(jià)的C+函數(shù)為:unsigned int f(unsigned int n)if(n=0|n=1)return n;return f(n-1)+f(n-2);n的取值范圍1n4

33、6 遞歸函數(shù)遞歸函數(shù)在運(yùn)行中,其調(diào)用與被調(diào)函數(shù)的指令代碼是同一個(gè)函數(shù)副本,只不過各個(gè)不同運(yùn)行中的調(diào)用點(diǎn),作為狀態(tài)的一部分,在棧中被分別保護(hù)起來。因此,是C+的函數(shù)機(jī)制決定了遞歸操作的可能性與形式。 遞歸函數(shù)例:n!的函數(shù),當(dāng)調(diào)用f(3)時(shí),其運(yùn)行棧描述如圖所示 f(1)n=1f(2)函數(shù)的狀態(tài)及返回地址返回值 1f(2)n=2f(3)函數(shù)的狀態(tài)及返回地址返回值 2*f(1)f(3)n=3調(diào)用函數(shù)的狀態(tài)及返回地址返回值 3*f(2)遞歸條件 遞歸不能無限制地調(diào)用下去,因?yàn)闂?臻g是有限的,所以遞歸函數(shù)是有條件地調(diào)用自身。例如階乘函數(shù)中的“if(n=1) return 1;”當(dāng)n為1時(shí),函數(shù)就不再遞

34、歸了。遞歸函數(shù)就有遞歸調(diào)用語句,且遞歸調(diào)用應(yīng)有參數(shù),參數(shù)值應(yīng)該是逐漸逼近停止條件。例如f(n-1)相對(duì)f(n)來說,是逐漸逼近了停止條件。遞歸條件應(yīng)先測(cè)試,后遞歸調(diào)用。無條件遞歸的邏輯錯(cuò)誤,編譯器是檢查不出來的。返回目錄2.7 結(jié)構(gòu)體概念:結(jié)構(gòu)體則是任意類型元素的一個(gè)聚集,把類型不一樣的一組數(shù)據(jù)放到一塊連續(xù)的內(nèi)存空間結(jié)構(gòu)體類型的定義:struct 結(jié)構(gòu)體類型名稱數(shù)據(jù)類型1成員名稱;數(shù)據(jù)類型2成員名稱;.;結(jié)構(gòu)體變量的定義結(jié)構(gòu)體類型名稱 結(jié)構(gòu)體變量的名稱;結(jié)構(gòu)體成員的訪問結(jié)構(gòu)體變量名.結(jié)構(gòu)體成員名程序舉例:結(jié)構(gòu)體類型的定義,數(shù)組,指針的綜合應(yīng)用#include#includeusing name

35、space std;/Point類型結(jié)構(gòu)體的定義struct Point int x, y;/函數(shù)原型的聲明void inputPoint(Point *poly, int n);void outputPoint(Point *poly, int n);int main() Point polygon5;/定義五邊形 int n = sizeof(polygon) / sizeof(polygon0); inputPoint(polygon, n); outputPoint(polygon, n); fflush(stdin); getchar(); return 0; /輸入結(jié)構(gòu)體數(shù)組元素的

36、值void inputPoint(Point *poly, int n) cout 輸入點(diǎn)數(shù)組元素的x,y值: endl; for (int i = 0; i n; i+) cout 第 i polyi.x polyi.y; /輸出Point結(jié)構(gòu)體元素的值void outputPoint(Point *poly, int n) cout 輸出數(shù)組元素的值 endl; Point *pt = poly; for (; pt poly + n; pt+) cout ( x , y ) endl;返回目錄2.8 聯(lián)合體概念:union可以用相同的存儲(chǔ)空間存儲(chǔ)不同類別的數(shù)據(jù)類型,從而節(jié)省內(nèi)存空間所有成

37、員相對(duì)于基地址的偏移量都為0聯(lián)合體(union)中的各變量是“互斥”的聯(lián)合類型的定義形式union 聯(lián)合類型名數(shù)據(jù)類型1成員名稱;數(shù)據(jù)類型2成員名稱;.;程序舉例:聯(lián)合體類型的定義與應(yīng)用typedef unionchar a;int b;double c;Demo;int main()char ch=H;int i = 5;double c = 3.14;cout ch 占 sizeof(ch) 個(gè)字節(jié)n;cout i 占 sizeof(i) 個(gè)字節(jié)n;cout c 占 sizeof(c) 個(gè)字節(jié)nn;Demo d;cout Demo 類型 變量d 占 sizeof(d) 個(gè)字節(jié)n;d.a =

38、 ch;cout d.a= d.a endl;d.b = i;cout d.b= d.b endl;d.c = c;cout d.c= d.c endl;cout a= d.a b= d.b c= d.c endl;system(pause);return 0;返回目錄2.9.1指針的定義與使用指針變量的基本操作2.9.2動(dòng)態(tài)內(nèi)存分配2.9.3指針與函數(shù)2.9.4指針數(shù)組2.9.52.9 指針指針的定義與使用程序運(yùn)行中的每一個(gè)變量都分配有一塊內(nèi)存空間,對(duì)應(yīng)的內(nèi)存的起始編號(hào)稱為這個(gè)變量的地址直接訪問:程序通過變量名來訪問這塊空間中的數(shù)據(jù)的訪問方式指針變量:保存另一個(gè)變量地址的變量間接訪問:通過指

39、針變量來訪問它所存的變量的方式多級(jí)指針:若指針變量所指向的變量的類型是指針類型指針變量的定義格式一級(jí)指針定義:數(shù)據(jù)類型 *變量名;二級(jí)指針定義:數(shù)據(jù)類型 *變量名;三級(jí)指針定義:數(shù)據(jù)類型 *變量名;程序舉例:一級(jí)指針的簡單使用int main() int num1 = 3; /定義整型變量的指針,并初始化指針變量的地址為num1的地址 int *pointer = &num1; cout num1= num1 tnum1:address= &num1 endl; cout pinter= pointer tpoint:address= &pointer cout *pointer= *poin

40、ter endl; system(“pause”); return 0;指針變量的基本操作指針變量初始化與賦值的語法格式數(shù)據(jù)類型 *指針變量=初始地址表達(dá)式;指針變量賦值指針變量名=地址表達(dá)式;其他運(yùn)算取值運(yùn)算:*算術(shù)運(yùn)算:+n,-n相減運(yùn)算:p1-p2比較運(yùn)算:p1p2程序舉例:指針的各種運(yùn)算,通過數(shù)組中地址的運(yùn)算呈現(xiàn)#include#includeusing namespace std;void output(int *arr, int n);int main()int intArray = 1, 2, 3, 4, 5 ;int n = sizeof(intArray) / sizeof(

41、intArray0);output(intArray, n);/數(shù)組名作函數(shù)的參數(shù)int *pPointer = intArray;int i = 0;while (pPointer= arr; p-)/指針-運(yùn)算 cout setw(3) *p;cout endl;動(dòng)態(tài)內(nèi)存分配運(yùn)行的程序的內(nèi)存空間內(nèi)存分成5個(gè)區(qū)全局?jǐn)?shù)據(jù)區(qū)(datat area),代碼區(qū)(code area),棧區(qū)(stack area)、堆區(qū)(heap area)、字符串常量區(qū)程序運(yùn)行過程中才能確定數(shù)據(jù)大小時(shí),需要根據(jù)問題的規(guī)模動(dòng)態(tài)分配動(dòng)態(tài)地分配內(nèi)存new運(yùn)算符指針變量名=new 類型名(初值列表);指針變量名=new 類型

42、名下標(biāo)表達(dá)式;指針變量=new 類型名下標(biāo)表達(dá)式1 下標(biāo)表達(dá)式2 .;內(nèi)存釋放deletedelete 指針變量名;delete 指針變量名;程序舉例:動(dòng)態(tài)申請(qǐng)一維數(shù)組int *NewArray(int n); /動(dòng)態(tài)申請(qǐng)一維數(shù)組的內(nèi)存空間void output(int *arr, int n); /顯示數(shù)組元素的值int main() int n;cout 輸入動(dòng)態(tài)數(shù)組的長度: n;int *array = NewArray(n);for (int i = 0; in; i+) arrayi = i; output(array, n);deletearray;system(pause);re

43、turn 0;/動(dòng)態(tài)申請(qǐng)一維數(shù)組的內(nèi)存空間int *NewArray(int n) int *p;p = new intn;return p;/顯示數(shù)組元素的值void output(int *arr, int n) int *pointerArr = arr;for (; pointerArrarr + n; pointerArr+) cout *pointerArr;cout endl;指針與函數(shù)指針作函數(shù)的參數(shù)指針作函數(shù)的參數(shù)是一種地址傳遞方式指針可以作為函數(shù)的形參,也可以作為函數(shù)的實(shí)參實(shí)參和形參指針變量指向同一內(nèi)存地址,實(shí)現(xiàn)參數(shù)雙向傳遞指針函數(shù):指針類型函數(shù)函數(shù)聲明其返回值為指針類型時(shí)

44、,這個(gè)函數(shù)就稱為指針型函數(shù)主要目的就是要在函數(shù)調(diào)用結(jié)束時(shí)把大量的數(shù)據(jù)從被調(diào)用函數(shù)返回到主調(diào)函數(shù)指針函數(shù)定義:數(shù)據(jù)類型 *函數(shù)名(參數(shù)表)函數(shù)體函數(shù)指針:函數(shù)指針就是用來存儲(chǔ)函數(shù)的入口地址的指針變量函數(shù)的指針定義格式:返回類型 (*函數(shù)指針名)(形式參數(shù)表);函數(shù)指針賦值:函數(shù)指針名=函數(shù)名;調(diào)用函數(shù)指針指向的函數(shù):函數(shù)指針名(實(shí)參表);程序舉例:使用函數(shù)指針實(shí)現(xiàn)各類函數(shù)的調(diào)用#include#includeusing namespace std;#define FUN_MAX 0#define FUN_MIN 1#define SIZE sizeof(map)/sizeof(fun_map)s

45、tring menu = 計(jì)算兩數(shù)的最大值,輸入0,計(jì)算兩數(shù)的最小值,輸入1 ;int max(int x, int y);int min(int x, int y);void dispMenu(string menu, int n);struct fun_mapint msg;int(*pfn)(int, int); /定義指向函數(shù)的指針作結(jié)構(gòu)體的成員;int main()int a, b, m;int sel;/定義fun_map類型的數(shù)組并初始化fun_map map = FUN_MAX, &max, FUN_MIN, &min ;/map0.msg=0;map0.pfn=&max;/m

46、ap1.msg=1;map1.pfn=&min;int lenMenu = sizeof(menu) / sizeof(menu0);for (int i = 0; iSIZE; i+) cout 輸入a,b的值: a b;dispMenu(menu, lenMenu);cin sel;if (sel = mapi.msg) m = mapi.pfn(a, b);cout m= m y ? x : y);int min(int x, int y) return (xy ? x : y);void dispMenu(string menu, int n) for (int i = 0; i n;

47、 i+) cout menui endl; cout endl;指針數(shù)組指針數(shù)組:數(shù)組元素為指針的數(shù)組一維指針數(shù)組的定義形式數(shù)據(jù)類型 *數(shù)組名數(shù)組元素的個(gè)數(shù);使用方式指針數(shù)組作為函數(shù)參數(shù)指針數(shù)組用于指向若干字符串程序舉例:帶參的main函數(shù)#include stdafx.h#includeusing namespace std;int main(int argc, _TCHAR* argv)for (int i = 0; i argc; i+)cout argvi endl;system(pause);return 0;返回目錄2.10面向過程程序設(shè)計(jì)規(guī)范寫清楚的注釋使用有意義的名字使程序結(jié)構(gòu)

48、清晰使用縮進(jìn)來表示程序中的控制范圍用戶交互時(shí)能給出有效的提示信息不要直接使用ASC碼值。這樣會(huì)影響程序的可移植性注意整數(shù)的溢出盡量少的使用難理解的表示方式在寫關(guān)系表達(dá)式時(shí),不要連用關(guān)系運(yùn)算符使用循環(huán)結(jié)構(gòu)時(shí),不管循環(huán)體幾個(gè)語句,最好都用花括號(hào)括起來每個(gè)函數(shù)只做一件事情,不要將多個(gè)功能組合在一個(gè)函數(shù)中返回目錄2.11菜單結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)綜合應(yīng)用數(shù)組、循環(huán)、選擇結(jié)構(gòu)菜單結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)數(shù)組元素的輸入輸出、排序、最大值、最小值、均值的計(jì)算給用戶提供一個(gè)交互的界面根據(jù)用戶的選擇執(zhí)行數(shù)組的相應(yīng)操作程序中的函數(shù)有:void dispMenu(string menu, int n); /顯示菜單void in

49、putArray(int arr, int n); /輸入數(shù)組元素的值void outputArray(int arr, int n); /輸出數(shù)組元素的值int maxValue(int arr, int n); /計(jì)算數(shù)組元素的最大值int minValue(int arr, int n); /計(jì)算數(shù)組元素的最小值int average(int arr, int n); /計(jì)算數(shù)組元素的平均值void sortSel(int arr, int n); /對(duì)數(shù)組元素做選擇法排序2.12 本章小結(jié)(1)基本數(shù)據(jù)類型與各類構(gòu)造類型。(2)講解了主要的表達(dá)式的使用方式和使用規(guī)則。(3)程序的控制結(jié)

50、構(gòu)。三種循環(huán)結(jié)構(gòu)在C+中的使用。(4)一維數(shù)組,二組數(shù)組的定義、初始化及訪問。(5)函數(shù)的定義,聲明,調(diào)用方式,調(diào)用機(jī)制,遞歸函數(shù)等C中的知識(shí)及C+中的內(nèi)聯(lián)函數(shù),重載函數(shù),帶缺省參數(shù)值的函數(shù)。(6)結(jié)構(gòu)體及聯(lián)合體類型的定義和使用。(7)指針的定義、初始化、賦值、運(yùn)算;動(dòng)態(tài)內(nèi)存分配與釋放,指針函數(shù),函數(shù)指針,指針數(shù)組。3.1 變量的類型3.2 標(biāo)識(shí)符的作用域與可見性3.3 編譯預(yù)處理命令3.4 多文件編程第3章 C+變量的類型及程序結(jié)構(gòu)3.5 名字空間3.6 數(shù)學(xué)函數(shù)曲線繪制的設(shè)計(jì)與實(shí)現(xiàn)3.7 本章小結(jié)返回目錄3.1.1全局變量與局部變量變量的存儲(chǔ)類型3.1.2變量在內(nèi)存中的存儲(chǔ)3.1.33.1

51、 變量的類型全局變量與局部變量1.全局變量(global variable)定義在函數(shù)體外部的變量能被所有函數(shù)訪問使用便 于數(shù)據(jù)的共享同時(shí)也是很危險(xiǎn),易于被修改2.局部變量(local variable)定義在函數(shù)或復(fù)合語句中的變量只能在函數(shù)或復(fù)合語句中訪問使用變量的存儲(chǔ)類型auto:變量缺省的類別,局部的,動(dòng)態(tài)存儲(chǔ)區(qū)的棧區(qū)分配內(nèi)存空間register:生存期是局部的static:生存期是全局的,靜態(tài)存儲(chǔ)區(qū)分配內(nèi)存空間靜態(tài)全局變量:static修飾的全局變量,只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以靜態(tài)局部變量:始終駐留在全局?jǐn)?shù)據(jù)區(qū),直到程序運(yùn)行結(jié)束。但其作

52、用域?yàn)榫植孔饔糜?,?dāng)定義它的函數(shù)或語句塊結(jié)束時(shí),其作用域隨之結(jié)束extern:全局變量缺省的存儲(chǔ)類別在靜態(tài)存儲(chǔ)區(qū)分配內(nèi)存空間分析變量的作用域與可見性void func();int n = 1; int main() static int a; int b = -10; cout a: a b: b n: n endl; b += 4; func(); cout a: a b: b n: n endl; n += 10; func(); system(pause);return 0;void func() static int a = 2; int b = 5; a += 2; n += 12;

53、 b += 5; cout “a:” a “ b:” b; cout n: n endl;返回目錄3.2 標(biāo)識(shí)符的作用域與可見性塊作用域(block scope):在函數(shù)定義中由一對(duì)花括號(hào)括起來的一段程序單元作用域從說明點(diǎn)開始,直到結(jié)束塊的右花括號(hào)處為止函數(shù)作用域(function scope):整個(gè)函數(shù)定義所構(gòu)成的程序段在函數(shù)定義內(nèi)有效類作用域(class scope):簡稱類域,在類的定義中由一對(duì)花括號(hào)所括起來的部分類的名稱在整個(gè)類中是已知的,在類外是不可見作用域?yàn)轭惖某蓡T只能被通過對(duì)象調(diào)用文件作用域(file scope):也稱“全局作用域”,所有函數(shù)定義之外定義作用域?yàn)閺亩x處到整個(gè)源

54、文件結(jié)束全局變量缺省的存儲(chǔ)類別定義的全局變量和函數(shù)都具有文件作用域標(biāo)識(shí)符的作用域延伸到包含它的新的文件中分析程序中標(biāo)識(shí)符的作用域int i = 1; void fun() int i = 2; cout i: i :i i endl; class Point int i, j;public: void disp() cout i , j endl; ;int main() int i = 3; cout i; cout i endl; system(pause); return 0;返回目錄3.3.1文件包含命令#include宏定義#define3.3.2條件編譯#ifdefine3.3.3

55、3.3 編譯預(yù)處理命令文件包含命令#include查看詳情#include (系統(tǒng)):系統(tǒng)庫,位置在開發(fā)環(huán)境的路徑下#include using namespace ;#include/輸入輸出流#include/C+中的字符串類#include/C+中的格式控制操縱算子#include/C+中的數(shù)學(xué)庫函數(shù)using namespace std;#include “文件名”(自定義):用戶定義的頭文件,位置在工程目錄下宏定義#define#define 標(biāo)識(shí)符 表達(dá)式#define PI 3.14#define 標(biāo)識(shí)符(參數(shù)) 表達(dá)式#define max(x),(y) (x)(y)?(x):

56、(y)宏定義中包含兩行以上命令:此時(shí)必須在最右邊加上”且該行”后不能再有任何字符#define MAX(T,x,y)T max(T x, T y)return (xy ? x : y); 條件編譯#ifdefine #ifdef.#endif#ifdef 標(biāo)識(shí)符 程序段1 #else 程序段2 #endifif.#endif#if 條件1程序段1#elif 條件2程序段2.#else程序段n#endif#ifndef.#endif#ifndef 宏名程序段1#else程序段2#endif返回目錄3.4 多文件編程 多文件結(jié)構(gòu)C+程序稱為一個(gè)項(xiàng)目,一個(gè)項(xiàng)目由一個(gè)或多個(gè)文件組成,一個(gè)文件可以包函多

57、個(gè)函數(shù)的定義頭文件:.h擴(kuò)展名,包含其他文件要用的庫的聲明及不分配空間的聲明如類的定義源文件:.cpp擴(kuò)展名,函數(shù)的具體代碼及分配空間的定義編譯單元:源程序文件各個(gè)源程序文件進(jìn)行分別編輯,編譯,再進(jìn)行連接編輯形成擴(kuò)展名是.cpp擴(kuò)展名的文件編譯形成.obj擴(kuò)展名的文件連接形成.exe擴(kuò)展名的文件C+多文件程序結(jié)構(gòu)面向?qū)ο蟮某绦虻慕Y(jié)構(gòu)返回目錄3.5 名字空間名字空間:新的作用域級(jí)別,處理程序中的同名沖突分類:有名的名稱空間編譯形成.obj擴(kuò)展名的文件namespace 命名空間名 成員聲明序列匿名的命字空間namespace 成員聲明序列使用:個(gè)別使用聲明方式名字空間名:成員使用形式全局聲明方式

58、using namespace 名字空間名;全局聲明個(gè)別成員using 名字空間名 N:成員名M;返回目錄3.6 數(shù)學(xué)函數(shù)曲線繪制的設(shè)計(jì)與實(shí)現(xiàn)圖形庫:網(wǎng)上下載包含了graphics.h頭文件、graphics.lib庫文件、基本說明.htm及兩個(gè)繪圖的demo配置:方法一:頭文件graphics.h放在VS安裝目錄“VCinclude”下,把庫文件放在“VClib”下方法二:graphics.h和graphics.lib直接復(fù)制到工程目錄下使用:在文件中包含#includegraphics.h#include 函數(shù)中添加繪圖相關(guān)的代碼測(cè)試程序: #includegraphics.h #incl

59、ude int main() initgraph(640, 480); circle(300, 300, 100); Sleep(1000); closegraph(); return 0; 3.7 本章小結(jié)(1)變量的類型,全局變量和局部變量(2)標(biāo)識(shí)符的作用域與可見性,四種類別標(biāo)識(shí):auto、register、static、extern(3)編譯預(yù)處理命令,文件包含、宏定義、條件編譯。(4)多文件程序的結(jié)構(gòu),頭文件和源文件的編譯及連接。(5)名字空間的概念及使用。4.1 類與對(duì)象的定義4.2 構(gòu)造函數(shù)與析構(gòu)函數(shù)4.3 對(duì)象的使用4.4 類中的靜態(tài)成員4.5 友員第4章 類與對(duì)象4.6 常成

60、員與常對(duì)象4.7 對(duì)象的內(nèi)存管理4.8 圖書管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)4.9 本章小結(jié)返回目錄4.1.1從結(jié)構(gòu)體到類類的定義4.1.2類的成員函數(shù)的定義4.1.34.1類與對(duì)象的定義對(duì)象的建立4.1.4從結(jié)構(gòu)體到類C+中結(jié)構(gòu)體的定義 struct 結(jié)構(gòu)類型名 類型名 變量1; 類型名 變量2; 返回值類型 函數(shù)名稱(參數(shù)表) ;局部變量(local variable)定義在函數(shù)或復(fù)合語句中的變量只能在函數(shù)或復(fù)合語句中訪問使用定義結(jié)構(gòu)變量 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名結(jié)構(gòu)體成員的訪問結(jié)構(gòu)體變量名.成員名結(jié)構(gòu)體指針變量名-成員名結(jié)構(gòu)應(yīng)用例1:單鏈表 headdata1nextdata2nextdata3n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論