![【學(xué)習(xí)課件】第2章C++面對(duì)過程的程式設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/59aaaf0c0eda54cb2edad1af3a1b8c40/59aaaf0c0eda54cb2edad1af3a1b8c401.gif)
![【學(xué)習(xí)課件】第2章C++面對(duì)過程的程式設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/59aaaf0c0eda54cb2edad1af3a1b8c40/59aaaf0c0eda54cb2edad1af3a1b8c402.gif)
![【學(xué)習(xí)課件】第2章C++面對(duì)過程的程式設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/59aaaf0c0eda54cb2edad1af3a1b8c40/59aaaf0c0eda54cb2edad1af3a1b8c403.gif)
![【學(xué)習(xí)課件】第2章C++面對(duì)過程的程式設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/59aaaf0c0eda54cb2edad1af3a1b8c40/59aaaf0c0eda54cb2edad1af3a1b8c404.gif)
![【學(xué)習(xí)課件】第2章C++面對(duì)過程的程式設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/59aaaf0c0eda54cb2edad1af3a1b8c40/59aaaf0c0eda54cb2edad1af3a1b8c405.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第2章 C+面向過程的程序設(shè)計(jì)2.1 數(shù)據(jù)類型2.2 常量和變量 2.3 基本控制結(jié)構(gòu) 2.4 數(shù)組和指針 2.5 函數(shù) 習(xí)題 編輯ppt2.1 數(shù) 據(jù) 類 型數(shù)據(jù)類型的作用有兩個(gè):一是指明為數(shù)據(jù)分配多大的存儲(chǔ)空間并規(guī)定了數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),進(jìn)而規(guī)定了數(shù)據(jù)的取值范圍;二是規(guī)定了數(shù)據(jù)所能進(jìn)行的操作。 C+的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和構(gòu)造類型?;緮?shù)據(jù)類型是系統(tǒng)定義的,用戶可以直接使用。構(gòu)造類型由用戶自行定義。C+的數(shù)據(jù)類型如圖2-1所示。編輯ppt圖2-1 C+的數(shù)據(jù)類型編輯ppt2.1.1 基本數(shù)據(jù)類型的取值范圍在程序中使用數(shù)據(jù)時(shí),要注意不同類型數(shù)據(jù)的取值范圍,如果在給變量賦值時(shí)超出了其取值范圍,
2、則程序運(yùn)行結(jié)果往往不正確,即程序產(chǎn)生了邏輯錯(cuò)誤。表2-1列出了Visual C+中基本數(shù)據(jù)類型占用的字節(jié)數(shù)和取值范圍。編輯ppt數(shù)據(jù)類型長(zhǎng)度(字節(jié)數(shù))取 值 范 圍bool1false,truechar1128127unsigned char10255short (int)232 76832 767int4231(2311)unsigned (int)40(2321)long (int)4231(2311)float4(3.410383.41038)double8(1.7103081.710308)表2-1 基本數(shù)據(jù)類型占用的字節(jié)數(shù)和取值范圍編輯ppt2.1.2 C+的擴(kuò)展1. 布爾類型(bo
3、ol)布爾類型(bool)是ANSI C+新增的數(shù)據(jù)類型,其取值只能是true(1)和false(0)。布爾類型數(shù)據(jù)主要用來建立復(fù)雜的條件判斷和控制循環(huán)操作的標(biāo)志。編輯ppt2. 結(jié)構(gòu)名、聯(lián)合名和枚舉名可直接作為類型名C+中結(jié)構(gòu)、聯(lián)合和枚舉類型的使用與C語(yǔ)言有所區(qū)別。在C語(yǔ)言中定義結(jié)構(gòu)、聯(lián)合或枚舉類型的變量時(shí),必須加上struct、union或enum關(guān)鍵字,即在C語(yǔ)言中定義的結(jié)構(gòu)、聯(lián)合或枚舉類型名永遠(yuǎn)與相應(yīng)的關(guān)鍵字結(jié)合在一起使用。在C+中,自定義的結(jié)構(gòu)名、聯(lián)合名和枚舉名可以直接作為類型名使用,在定義變量時(shí),在結(jié)構(gòu)名、聯(lián)合名或枚舉名前可省略struct、union或enum關(guān)鍵字。因此,在C+
4、中由struct定義的結(jié)構(gòu)名或由union定義的聯(lián)合名或由enum定義的枚舉名與同一作用域內(nèi)的由typedef定義的類型名的名稱不能相同。例如,對(duì)于如下結(jié)構(gòu)和枚舉類型:編輯pptstruct stackdouble data20;int tos;enum colorRED,GREEN,BLUE;在C+中定義變量時(shí),可以按如下格式定義:stack st1,st2;color c;但在C語(yǔ)言中,定義變量時(shí)必須加上相應(yīng)的關(guān)鍵字,如下:struct stack st1,st2;enum color c;編輯ppt3. 無名聯(lián)合聯(lián)合(union)可以使不同數(shù)據(jù)類型的數(shù)據(jù)共享相同的存儲(chǔ)空間。在C+中定義聯(lián)
5、合時(shí),可以在union關(guān)鍵字后省略聯(lián)合名,這樣定義的聯(lián)合稱為無名聯(lián)合。例如:uniondouble d;int i;在此無名聯(lián)合中,d和i共享相同的存儲(chǔ)空間。無名聯(lián)合中定義的數(shù)據(jù)項(xiàng)可以直接作為變量使用,例如:d=8.3;i=5;編輯ppt4. 數(shù)據(jù)類型轉(zhuǎn)換在編寫程序時(shí)一般要求一個(gè)運(yùn)算符的各操作數(shù)類型相同,但當(dāng)表達(dá)式中出現(xiàn)多種類型數(shù)據(jù)的混合運(yùn)算時(shí),往往需要進(jìn)行類型轉(zhuǎn)換。表達(dá)式中的類型轉(zhuǎn)換分為自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。編輯ppt自動(dòng)類型轉(zhuǎn)換是指在不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)的類型。對(duì)于自動(dòng)類型轉(zhuǎn)換,C+與C語(yǔ)言相同。在進(jìn)行賦值運(yùn)算時(shí),右邊表達(dá)式的類型自動(dòng)轉(zhuǎn)換為左邊變量的類型;在
6、進(jìn)行算術(shù)混合運(yùn)算時(shí),將低類型(數(shù)據(jù)范圍小的數(shù)據(jù)類型)轉(zhuǎn)換為高類型(數(shù)據(jù)范圍大的數(shù)據(jù)類型);在進(jìn)行邏輯運(yùn)算時(shí),將其它數(shù)據(jù)類型轉(zhuǎn)換為bool類型,任何非0值轉(zhuǎn)換為true,0值轉(zhuǎn)換為false。如果系統(tǒng)不能進(jìn)行數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換,則運(yùn)算會(huì)出錯(cuò),此時(shí)可以使用C+的強(qiáng)制類型轉(zhuǎn)換。C+的強(qiáng)制類型轉(zhuǎn)換有兩種格式。編輯ppt格式1:(數(shù)據(jù)類型)表達(dá)式在使用這種格式時(shí),如果表達(dá)式為包含多個(gè)操作數(shù)的表達(dá)式,則表達(dá)式應(yīng)加括號(hào)。例如:float a=3.2,b=8.5;則int c=(int)a*b;/c的值為25int d=(int)(a*b);/d的值為27編輯ppt格式2:數(shù)據(jù)類型(表達(dá)式) 這是C+擴(kuò)展的一
7、種強(qiáng)制類型轉(zhuǎn)換方式。在使用這種格式時(shí),將數(shù)據(jù)類型名作為函數(shù)名,將表達(dá)式作為參數(shù),采用函數(shù)調(diào)用的形式。例如: int c=int(a*b);/c的值為27編輯ppt2.2 常量和變量2.2.1 常量常量是指在程序整個(gè)運(yùn)行過程中其值不變的量。常量既可以直接用其值表示(字面常量),也可以用標(biāo)識(shí)符表示(符號(hào)常量)。1. 整型常量整型常量有十進(jìn)制、八進(jìn)制和十六進(jìn)制三種表示方式。十進(jìn)制以19數(shù)字開頭,如123;八進(jìn)制以0開頭,如0127;十六進(jìn)制以0 x(或0X)開頭,如0 x5B。整型常量可以用后綴字母L(或l)表示長(zhǎng)整型,用后綴字母U(或u)表示無符號(hào)整型。編輯ppt2. 實(shí)型常量實(shí)型常量只有十進(jìn)制表
8、示方式,可以使用一般小數(shù)形式和指數(shù)形式來表示。在使用指數(shù)形式時(shí),E(或e)前面的尾數(shù)部分不能省略,指數(shù)部分必須是整數(shù)。例如:-34.4e-4、.235E6、1e-5等都是正確的形式。3. 字符常量字符常量是用單引號(hào)括起來的單個(gè)字符,如A、?、$等。對(duì)于一些具有特殊功能的字符,無法通過鍵盤直接輸入,C+提供了稱為轉(zhuǎn)義序列的表示方法。它用由一個(gè)反斜杠和一個(gè)字符組成的轉(zhuǎn)義字符表示這些特殊字符。表2-2列出了C+中常用的轉(zhuǎn)義字符。編輯ppt轉(zhuǎn)義字符含 義a響鈴b退格n換行r回車(不換行,光標(biāo)移到本行最前)t水平制表符0空字符,通常用作字符串結(jié)束標(biāo)志反斜杠單引號(hào)雙引號(hào)ddd13位八進(jìn)制ASCII碼值所代
9、表的字符xhh12位十六進(jìn)制ASCII碼值所代表的字符表2-2 C+中常用的轉(zhuǎn)義字符編輯ppt4. 字符串常量字符串常量是用一對(duì)雙引號(hào)括起來的字符序列。例如,China、This is a string等都是字符串常量。圖2-2 字符串和字符的存儲(chǔ)形式 字符串常量與字符常量不同,它在內(nèi)存中按字符串中字符的排列順序存放,每個(gè)字符占一個(gè)字節(jié),并在末尾添加0作為結(jié)束標(biāo)志。因此,字符串所占用的內(nèi)存字節(jié)數(shù)比字符串中字符的個(gè)數(shù)多1。圖2-2是字符串China、a和字符a的存儲(chǔ)形式。從圖中可以看出,字符串a(chǎn)和字符a是不同的。 編輯ppt圖2-2 字符串和字符的存儲(chǔ)形式編輯ppt5. 布爾常量布爾常量只有兩個(gè)
10、:false和true。6. 符號(hào)常量除了直接用值表示常量外,還可以用標(biāo)識(shí)符來表示常量,稱為符號(hào)常量。C+中可以使用const修飾符和#define宏定義命令定義符號(hào)常量。使用const聲明常量的格式為:const 數(shù)據(jù)類型 常量名=常量值;例如,可以定義一個(gè)符號(hào)常量PI來表示:const double PI=3.1415926;編輯ppt在使用const定義符號(hào)常量時(shí)必須進(jìn)行初始化,在程序運(yùn)行過程中不能改變其值。例如,下列語(yǔ)句是錯(cuò)誤的:const double PI;PI=3.14159026; /錯(cuò)誤,不允許改變常量的值定義符號(hào)常量時(shí),可以像C語(yǔ)言中那樣用#define宏定義命令定義。對(duì)于
11、宏定義命令#define,編譯器只做簡(jiǎn)單文本替換,只是對(duì)源程序編寫上的一種簡(jiǎn)化,它不進(jìn)行類型檢查,在某些情況下易出錯(cuò)。由const定義的符號(hào)常量具有類型,在使用時(shí)系統(tǒng)需要進(jìn)行類型檢查。編輯ppt【例2.1】 符號(hào)常量的定義和使用示例。#include#define P 1void main()float f=1.0;coutResult of 1.0+1/2 is f+P/2endl;程序運(yùn)行結(jié)果為:Result of 1.0+1/2 is 1編輯ppt從程序運(yùn)行結(jié)果看,程序中將P替換為1,其實(shí)是一個(gè)字面常量。如果將程序中的宏命令#define P 1修改為const float P=1;,則
12、程序運(yùn)行結(jié)果為:Result of 1.0+1/2 is 1.5程序中P的數(shù)據(jù)類型是float。在C+中,用const定義的符號(hào)常量可以用來定義數(shù)組。例如:const int n=8; int arrayn;而在C語(yǔ)言中,語(yǔ)句int arrayn;是錯(cuò)誤的。 const還可以修飾指針和函數(shù)的參數(shù)和返回值。編輯ppt2.2.2 變量1. 變量的定義變量定義語(yǔ)句的形式如下:存儲(chǔ)類型 數(shù)據(jù)類型 變量名1,變量名2,變量名n;變量定義決定了為變量分配存儲(chǔ)空間的大小和位置。例如: int a,b;定義了兩個(gè)整型變量,系統(tǒng)在動(dòng)態(tài)存儲(chǔ)區(qū)(稱為堆)為兩個(gè)變量各分配4字節(jié)存儲(chǔ)空間。 static float f
13、;定義了一個(gè)單精度實(shí)型變量,系統(tǒng)在靜態(tài)存儲(chǔ)區(qū)為其分配4字節(jié)存儲(chǔ)空間。編輯ppt在定義變量時(shí),可以對(duì)其進(jìn)行初始化,格式如下:存儲(chǔ)類型 數(shù)據(jù)類型 變量名=表達(dá)式;或存儲(chǔ)類型 數(shù)據(jù)類型 變量名(表達(dá)式);例如: int a=5; float f(8.2+a); 在C語(yǔ)言中只能使用常量對(duì)變量進(jìn)行初始化,而在C+中可以使用任何有效的表達(dá)式進(jìn)行初始化。編輯ppt2. 存儲(chǔ)類型 存儲(chǔ)類型用來決定為變量分配存儲(chǔ)空間的區(qū)域。變量的存儲(chǔ)類型有以下4種: auto:缺省的存儲(chǔ)類型。在動(dòng)態(tài)存儲(chǔ)區(qū)中為變量分配存儲(chǔ)空間。 register:變量存儲(chǔ)在寄存器中。 extern:用于聲明外部變量,變量存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)中。st
14、atic:用于聲明內(nèi)部變量或外部變量,變量存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)中。存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)中的變量直到程序運(yùn)行結(jié)束才釋放其占有的內(nèi)存空間。編輯ppt3. 變量定義語(yǔ)句的位置在C語(yǔ)言中,全局變量的定義必須在所有函數(shù)定義之前,局部變量的定義必須在復(fù)合語(yǔ)句的可執(zhí)行語(yǔ)句之前。C+中變量定義語(yǔ)句的位置非常靈活,可以與可執(zhí)行語(yǔ)句在程序中交替出現(xiàn)。例如以下程序段:void func()int i(5),j;j=2*i+10;float f;/變量定義在可執(zhí)行語(yǔ)句之后編輯ppt在C語(yǔ)言中是錯(cuò)誤的,因?yàn)檎Z(yǔ)句float f;在可執(zhí)行語(yǔ)句之后,但在C+中這是正確的。 在C+中甚至可以在for循環(huán)語(yǔ)句中定義變量,例如: for
15、(int i=0;i10;i+)變量的作用域從定義位置開始到其所在的復(fù)合語(yǔ)句結(jié)束。編輯ppt4. 作用域運(yùn)算符“:” C/C+中,在相同的作用域內(nèi),多個(gè)變量不能同名,但在不同的作用域內(nèi)允許定義同名的變量。如果一個(gè)內(nèi)層作用域中定義了與外層作用域中同名的變量,那么在該作用域模塊中對(duì)這個(gè)變量的訪問只是對(duì)該內(nèi)層作用域局部變量的訪問。編輯ppt【例2.2】 不同作用域同名變量的訪問。#includeint i=0;void func();void main()func();編輯pptvoid func()int i=10;int i=100;int i=1000;cout“i is ”iendl;/輸出
16、:i is 1000cout“i is ”iendl;/輸出:i is 100;cout“i is ”iendl;/輸出:i is 10編輯ppt【例2.3】 作用域運(yùn)算符的使用示例。#includeint var=100;void main()int var=200;cout:var,;/輸出全局變量值coutvar,;/輸出局部變量值:var=500;/訪問全局變量coutvar,;cout:varendl;程序運(yùn)行結(jié)果為: 100,200,200,500編輯ppt【例2.4】 作用域運(yùn)算符的錯(cuò)誤用法示例。#includevoid main()編輯pptint i;for(i=0;i10;
17、i+)for (int i=0;i10;i+) /重新定義局部變量iint k=10;cout“outside i is ”:iendl“inner i,k is ”ikendl;/:i的使用錯(cuò)誤,沒有全局變量icouti is iendl;編輯ppt2.3 基本控制結(jié)構(gòu)2.3.1 順序結(jié)構(gòu)順序結(jié)構(gòu)是程序中最常用的結(jié)構(gòu),實(shí)現(xiàn)起來比較簡(jiǎn)單,只需按照處理問題的過程順序?qū)懗鱿鄳?yīng)的語(yǔ)句即可?!纠?.5】 從鍵盤任意輸入一個(gè)三位整數(shù),要求正確分離它的個(gè)位、十位和百位數(shù),并分別在屏幕上輸出。編輯ppt#include void main()int x,b0,b1,b2;coutx;b2=x/100;b1=
18、(x-b2*100)/10;b0=x%10;coutbit2=b2,bit1=b1,bit0=b0endl;編輯ppt程序運(yùn)行結(jié)果為:Please enter an three-figure integer:258bit2=2,bit1=5,bit0=8編輯ppt2.3.2 選擇結(jié)構(gòu) 選擇結(jié)構(gòu)根據(jù)給定的條件來選擇需要執(zhí)行的代碼。C+提供了兩種語(yǔ)句來實(shí)現(xiàn)選擇結(jié)構(gòu):if語(yǔ)句和switch語(yǔ)句。1. if語(yǔ)句 if語(yǔ)句有多種形式,其基本形式為: if (表達(dá)式) 語(yǔ)句執(zhí)行順序是:首先計(jì)算表達(dá)式的值,若表達(dá)式的值為true,則執(zhí)行其中的語(yǔ)句,否則跳過該語(yǔ)句,執(zhí)行if語(yǔ)句后的下一條語(yǔ)句,如圖2-3(a)
19、所示。 編輯ppt圖2-3 if語(yǔ)句流程圖(a) 單分支if語(yǔ)句;(b) 雙分支if語(yǔ)句 編輯pptif語(yǔ)句中,表達(dá)式可以為任意表達(dá)式,如果為非邏輯表達(dá)式,則其值為非0都作為true,為0作為false。其中的語(yǔ)句如果多于1條,則應(yīng)用花括號(hào)“”括起來。 if語(yǔ)句的另外兩種形式為: 形式一:if (表達(dá)式) 語(yǔ)句1 else 語(yǔ)句2 當(dāng)表達(dá)式的值為true時(shí),執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2,如圖2-3(b)所示。編輯ppt形式二:if (表達(dá)式1) 語(yǔ)句1 else if (表達(dá)式2) 語(yǔ)句2 else if (表達(dá)式3) 語(yǔ)句3 else if (表達(dá)式n) 語(yǔ)句n else 語(yǔ)句n+1編輯ppt
20、當(dāng)表達(dá)式1的值為true時(shí),執(zhí)行語(yǔ)句1;否則判定表達(dá)式2,當(dāng)為true時(shí)執(zhí)行語(yǔ)句2;依次類推,若表達(dá)式1n的值都為false,則執(zhí)行語(yǔ)句n1。其執(zhí)行過程如圖2-4所示。這種格式不管有多少個(gè)分支,程序都只執(zhí)行一個(gè)分支。編輯ppt圖2-4 多分支if語(yǔ)句流程圖編輯ppt【例2.6】 輸入某個(gè)學(xué)生的成績(jī),根據(jù)成績(jī)判定為優(yōu)、良、中、及格或不及格。#include void main()float score;coutscore;cout=90)cout=80)cout=70)cout=60)cout及格;elsecout不及格;coutendl;編輯ppt2. switch語(yǔ)句當(dāng)程序分支較多時(shí),使用多
21、分支if語(yǔ)句結(jié)構(gòu)復(fù)雜。為了方便地實(shí)現(xiàn)多分支結(jié)構(gòu),C+提供了switch語(yǔ)句。其基本格式為:switch (表達(dá)式)case 常量表達(dá)式1:語(yǔ)句1break;case 常量表達(dá)式2:語(yǔ)句2break;編輯pptcase 常量表達(dá)式n:語(yǔ)句nbreak;default:語(yǔ)句n+1編輯ppt其中,各case后面的break和default是可選語(yǔ)句。其執(zhí)行過程為:首先計(jì)算表達(dá)式的值,然后自上而下將結(jié)果與case后面的常量表達(dá)式的值依次進(jìn)行比較,如果相等,則按順序執(zhí)行此case后的所有語(yǔ)句,包括后續(xù)case中的語(yǔ)句,而不再進(jìn)行判斷,直到遇到break語(yǔ)句或switch語(yǔ)句結(jié)束。如果需要在執(zhí)行完本cas
22、e分支后跳出switch語(yǔ)句,則應(yīng)在case分支最后加上一條break語(yǔ)句。如果表達(dá)式的值與所有case后常量表達(dá)式的值都不相同,則執(zhí)行default后的語(yǔ)句,如果省略default則不執(zhí)行任何語(yǔ)句。其流程如圖2-5所示。編輯ppt圖2-5 switch語(yǔ)句的執(zhí)行流程編輯ppt在switch語(yǔ)句中,表達(dá)式與各常量表達(dá)式的類型必須一致,且只能是字符型、整型或枚舉型。case后面的語(yǔ)句如果包含多條語(yǔ)句,也不需使用花括號(hào)“”括起來。編輯ppt【例2.7】 使用switch語(yǔ)句完成例2.6。#include void main()int score,grade;coutscore;grade=scor
23、e/10;coutThe grade is:;switch (grade)編輯pptcase 10:case 9:coutscore-優(yōu);break;case 8:coutscore-良;break;case 7:coutscore-中;break;case 6:coutscore-及格;break;編輯pptdefault:coutscore-不及格;coutendl; 說明:程序中使用表達(dá)式“score/10”將分?jǐn)?shù)范圍轉(zhuǎn)換為一個(gè)整數(shù)。編輯ppt2.3.3 循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,重復(fù)執(zhí)行某個(gè)程序段。重復(fù)執(zhí)行的程序段稱為循環(huán)體。利用循環(huán)結(jié)構(gòu)可以使復(fù)雜的問題簡(jiǎn)單化。C+提
24、供了三種循環(huán)結(jié)構(gòu)控制語(yǔ)句:while語(yǔ)句、do-while語(yǔ)句和for語(yǔ)句。編輯ppt1. while語(yǔ)句 while語(yǔ)句的格式為:while (表達(dá)式)語(yǔ)句圖2-6 while語(yǔ)句的執(zhí)行流程 while語(yǔ)句首先計(jì)算表達(dá)式的值,如果表達(dá)式的值為true(非0),則執(zhí)行循環(huán)體語(yǔ)句,否則退出循環(huán),執(zhí)行該循環(huán)語(yǔ)句后面的語(yǔ)句。每執(zhí)行完一次循環(huán)體語(yǔ)句后,再計(jì)算表達(dá)式的值,如果為true(非0),則再次執(zhí)行循環(huán)體,直至表達(dá)式的值為false(0)時(shí)退出循環(huán)。其執(zhí)行流程如圖2-6所示。 編輯ppt圖2-6 while語(yǔ)句的執(zhí)行流程編輯ppt【例2.8】 利用公式計(jì)算e的值,直到。#include void
25、main()double e=1.0;double item=1.0;int n=1;while (item=1e-7)item=item/n;e=e+item;n+;coute=e(n=n)endl;程序運(yùn)行結(jié)果為:e=2.71828(n=12)編輯ppt2. do-while語(yǔ)句 do-while語(yǔ)句的格式為:do語(yǔ)句while (表達(dá)式); do-while語(yǔ)句與while語(yǔ)句功能相似,所不同的是先執(zhí)行循環(huán)體然后計(jì)算表達(dá)式的值并判斷,若表達(dá)式的值為true(非0),則繼續(xù)執(zhí)行循環(huán)體語(yǔ)句,直到表達(dá)式的值為false(0)時(shí)結(jié)束循環(huán)。其執(zhí)行流程如圖2-7所示。編輯ppt圖2-7 do-whi
26、le語(yǔ)句的執(zhí)行流程編輯ppt 注意,do-while語(yǔ)句最后有一個(gè)分號(hào),表示do-while語(yǔ)句的結(jié)束。 在使用while語(yǔ)句和do-while語(yǔ)句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)時(shí),為了避免出現(xiàn)死循環(huán),在循環(huán)體語(yǔ)句中應(yīng)該包含改變循環(huán)條件表達(dá)式值的語(yǔ)句。編輯ppt3. for語(yǔ)句 for語(yǔ)句是C+中實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的使用最頻繁、功能最強(qiáng)的語(yǔ)句,并且其使用方式非常靈活。for語(yǔ)句完全可以代替其它兩種循環(huán)結(jié)構(gòu)語(yǔ)句。 for語(yǔ)句的格式為:for (表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句編輯pptfor語(yǔ)句的執(zhí)行過程是:首先計(jì)算表達(dá)式1的值,再計(jì)算表達(dá)式2的值并判斷,如果表達(dá)式2的值為true(非0),則執(zhí)行一次循環(huán)體,否則退出
27、循環(huán)。每執(zhí)行一次循環(huán)體后計(jì)算表達(dá)式3,然后再計(jì)算表達(dá)式2的值并判斷是否執(zhí)行循環(huán)。其執(zhí)行流程如圖2-8所示。for語(yǔ)句中的三個(gè)表達(dá)式用分號(hào)分隔,可以省略其中的任何一個(gè)或多個(gè)表達(dá)式,但分號(hào)不能省略。編輯ppt圖2-8 for語(yǔ)句的執(zhí)行流程編輯ppt表達(dá)式1一般用于給循環(huán)控制條件賦初值,但也可以是其它與循環(huán)控制條件無關(guān)的表達(dá)式。若表達(dá)式1省略或它是與循環(huán)控制條件無關(guān)的表達(dá)式,則應(yīng)在for語(yǔ)句前給循環(huán)控制條件賦初值。 表達(dá)式2一般作為控制循環(huán)的條件,如果省略,則應(yīng)在循環(huán)體內(nèi)使用相應(yīng)的if語(yǔ)句控制循環(huán)退出,否則進(jìn)入死循環(huán)。表達(dá)式3一般用于改變循環(huán)控制條件的值。若表達(dá)式3省略或它是與循環(huán)控制條件無關(guān)的表達(dá)
28、式,則應(yīng)在循環(huán)體中增加改變循環(huán)控制條件值的語(yǔ)句,以免進(jìn)入死循環(huán)。編輯ppt【例2.9】 利用公式計(jì)算的值,直到最后一項(xiàng)的絕對(duì)值小于108為止。#include #include 編輯pptvoid main()double pi,sum(0),item=1.0,sign=1.0;for(int i=2;fabs(item)=1e-8;i+)sum=sum+item;sign=-sign;item=sign/(2*i-1);pi=4*sum;coutPI is piendl;程序運(yùn)行結(jié)果為:PI is 3.14159編輯ppt2.3.4 流程的轉(zhuǎn)移控制 C+提供了三種轉(zhuǎn)移控制語(yǔ)句:goto語(yǔ)句、
29、break語(yǔ)句和continue語(yǔ)句。1. goto語(yǔ)句 goto語(yǔ)句的語(yǔ)法格式為:goto 語(yǔ)句標(biāo)號(hào); goto語(yǔ)句是無條件轉(zhuǎn)移語(yǔ)句,使程序直接跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)的語(yǔ)句去執(zhí)行。語(yǔ)句標(biāo)號(hào)是用戶自定義標(biāo)識(shí)符,表示goto語(yǔ)句的轉(zhuǎn)向入口。 由于goto語(yǔ)句會(huì)破環(huán)程序的結(jié)構(gòu)化特性,影響程序的可讀性,故在C+中建議少用或不用。編輯ppt2. break語(yǔ)句 break語(yǔ)句用于switch語(yǔ)句和循環(huán)語(yǔ)句中。在switch語(yǔ)句中,break用于跳出switch語(yǔ)句。在循環(huán)語(yǔ)句中,break用于跳出循環(huán),即程序遇到break語(yǔ)句時(shí)提前結(jié)束循環(huán),執(zhí)行循環(huán)語(yǔ)句的下一條語(yǔ)句。在多重循環(huán)中,break語(yǔ)句只退出本
30、層循環(huán)。3. continue語(yǔ)句 continue語(yǔ)句只用在循環(huán)語(yǔ)句中,用于結(jié)束本次循環(huán),即跳過循環(huán)體中continue語(yǔ)句后面的語(yǔ)句,直接進(jìn)入下一次循環(huán)的判斷。編輯ppt2.4 數(shù)組和指針2.4.1 數(shù)組 數(shù)組是一種構(gòu)造類型。它是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合,其中每個(gè)數(shù)據(jù)稱為數(shù)組的元素。編輯ppt1. 數(shù)組的定義 數(shù)組與其它變量一樣,必須先定義后使用。數(shù)組的定義包括確定數(shù)組的名稱、確定數(shù)組元素的類型和數(shù)組的結(jié)構(gòu)(維數(shù)和每一維的大小)。 數(shù)組的定義格式如下: 數(shù)據(jù)類型 數(shù)組名常量表達(dá)式1常量表達(dá)式2;其中,“數(shù)據(jù)類型”確定了數(shù)組元素的類型,可以是C+中任意合法的數(shù)據(jù)類型,包括構(gòu)造類型
31、;“數(shù)組名”是一個(gè)標(biāo)識(shí)符,用于標(biāo)識(shí)該數(shù)組;常量表達(dá)式的個(gè)數(shù)確定數(shù)組的維數(shù),常量表達(dá)式的個(gè)數(shù)為1時(shí),稱為一維數(shù)組,為2時(shí),稱為二維數(shù)組。例如:int score100;float matrix23;編輯pptC語(yǔ)言中,定義數(shù)組時(shí),下標(biāo)必須是常量,不允許使用表達(dá)式。C+中允許使用常量表達(dá)式來定義數(shù)組。例如:const int N=80;char chN+1;定義數(shù)組時(shí),系統(tǒng)自動(dòng)為數(shù)組分配一塊連續(xù)的存儲(chǔ)空間,數(shù)組名代表這塊存儲(chǔ)空間的起始地址。數(shù)組元素按順序在內(nèi)存中按行存放。編輯ppt2. 數(shù)組的初始化 在定義數(shù)組的同時(shí),可以對(duì)數(shù)組元素賦初值。元素初值由在等號(hào)(=)后面用花括號(hào)括起來的初始化列表給出。
32、例如:int score5=89,52,78,67,93;float matrix23=2.1,2.2,2.3,4.3,4.4,4.5; 在進(jìn)行初始化時(shí),初始化列表中數(shù)據(jù)的類型應(yīng)與數(shù)組元素的類型相同,所給數(shù)據(jù)的個(gè)數(shù)不能大于數(shù)組元素的個(gè)數(shù)。 對(duì)于一維數(shù)組,如果初始化列表中數(shù)據(jù)的個(gè)數(shù)與數(shù)組元素的個(gè)數(shù)相同,則在定義時(shí)可以省略數(shù)組的大小。例如:int score=89,52,78,67,93;編輯ppt對(duì)于二維數(shù)組,如果初始化列表中數(shù)據(jù)的個(gè)數(shù)與數(shù)組元素的個(gè)數(shù)相同,則在定義時(shí)可以省略數(shù)組第一維的大小,但第二維的大小不能省略,系統(tǒng)自動(dòng)根據(jù)初始化列表中數(shù)據(jù)的個(gè)數(shù)確定第一維的大小。例如:float matri
33、x3=2.1,2.2,2.3,4.3,4.4,4.5,6.5,6.6,6.7; 二維數(shù)組初始化時(shí),按照數(shù)組元素的存儲(chǔ)順序?qū)Ω髟刭x初值,但為了更直觀,常采用分行賦初值的方法。例如:float matrix3=2.1,2.2,2.3,4.3,4.4,4.5;int a34=1,2,3,4,5,6;編輯ppt3. 數(shù)組元素的引用 在C+中,當(dāng)數(shù)組作為函數(shù)的參數(shù)或作為字符串操作時(shí),可以進(jìn)行整體引用。其它情況不允許對(duì)數(shù)組進(jìn)行整體引用,只能分別對(duì)數(shù)組的元素進(jìn)行操作。數(shù)組元素相當(dāng)于一個(gè)變量。一維數(shù)組元素的引用方式為:數(shù)組名下標(biāo)表達(dá)式 二維數(shù)組元素的引用方式為:數(shù)組名下標(biāo)表達(dá)式1下標(biāo)表達(dá)式2編輯ppt下標(biāo)表
34、達(dá)式的結(jié)果必須是整數(shù),數(shù)組元素的下標(biāo)從0開始,最大值為相應(yīng)維的大小減1。在C+中,系統(tǒng)并不對(duì)下標(biāo)越界進(jìn)行檢查。因此,在對(duì)數(shù)組元素進(jìn)行操作時(shí)應(yīng)避免數(shù)組下標(biāo)越界,以免破壞其它內(nèi)存空間的數(shù)據(jù),造成不可預(yù)見的后果。 在使用數(shù)組時(shí),應(yīng)注意定義數(shù)組和引用數(shù)組元素的區(qū)別。例如:int a34;/定義數(shù)組及其大小a23=5;/對(duì)數(shù)組元素的引用編輯ppt【例2.10】 利用冒泡排序法對(duì)整型數(shù)組進(jìn)行排序。#include void main()const int COUNT=10;int arrayCOUNT;coutPlease input 10 integer numbers:endl;for (int i=
35、0;iarrayi;編輯pptfor (i=0;ii;j-)if (arrayj-1arrayj)int temp=arrayj-1;arrayj-1=arrayj;arrayj=temp;coutThe result is:endl;for (i=0;iCOUNT;i+)coutarrayi ;coutendl;編輯ppt2.4.2 指針1. 指針的定義 指針作為變量,也必須先定義后使用,其定義形式為:數(shù)據(jù)類型 *指針名;其中,“數(shù)據(jù)類型”是指針?biāo)赶虻淖兞康念愋汀@纾篿nt *ptr;定義了一個(gè)名為ptr的指針,該指針用于存放整型變量的地址,即該指針指向一個(gè)整型變量。 需要特別注意的是,
36、指針定義后其指向是不確定的,在讓其指向具體的變量前就向指針?biāo)赶虻膬?nèi)存空間寫數(shù)據(jù),可能造成不可預(yù)料的后果。因此,在使用一個(gè)指針變量前,必須要初始化指針變量,讓其指向具體的變量。編輯ppt請(qǐng)運(yùn)行以下程序,看有什么結(jié)果。#include void main()int *ptr;*ptr=50;cout*ptrendl;編輯ppt2. 指針的運(yùn)算 C+中有兩個(gè)與指針有關(guān)的運(yùn)算符,它們是指針運(yùn)算符“*”和取地址運(yùn)算符“&”。另外,指針還可以進(jìn)行賦值運(yùn)算、加減運(yùn)算、比較運(yùn)算等。 取地址運(yùn)算符“&”用于取一個(gè)變量的地址,指針運(yùn)算符“*”與指針名結(jié)合表示該指針?biāo)赶虻淖兞俊V羔樀馁x值運(yùn)算一般用于將一個(gè)變量的
37、地址賦值給指針,即讓指針指向這個(gè)變量。例如:int *ptr,i;/定義了一個(gè)指向整型變量的指針ptr和一個(gè)整型變量iptr=&i;/將變量i的地址賦值給指針ptr,即讓ptr指向變量i編輯ppt指針的賦值運(yùn)算還可以用于同類型指針之間的賦值,結(jié)果是使兩個(gè)指針指向同一個(gè)變量。 指針可以與一個(gè)整數(shù)進(jìn)行加減運(yùn)算。指針ptr加上一個(gè)整數(shù)n(即ptr+n),表示指向當(dāng)前指針?biāo)赶虻淖兞亢竺娴牡趎個(gè)變量;指針ptr減去一個(gè)整數(shù)n(即ptr-n),表示指向當(dāng)前指針?biāo)赶虻淖兞壳懊娴牡趎個(gè)變量。 指針可以進(jìn)行+和-運(yùn)算。對(duì)指針進(jìn)行+運(yùn)算表示讓指針指向下一個(gè)變量,對(duì)指針進(jìn)行-運(yùn)算表示讓指針指向前一個(gè)變量。對(duì)指針
38、進(jìn)行+或-運(yùn)算并不是地址加1或減1。兩個(gè)同類型的指針可以相減,表示兩個(gè)指針之間存放變量的個(gè)數(shù),并不表示地址的差值。編輯ppt【例2.11】 指針運(yùn)算示例。#include void main()int a,b,*p1=&a,*p2=&b;/定義指針p1和p2,并初始化,使之分別指向變量a和bcoutab;cout*p1 *p2endl;/輸出p1和p2所指向的變量的值couta bendl;cout&a &bendl;/輸出變量a和b的地址coutp1 p2endl;/輸出指針的值(分別為變量a和b的地址)coutp1-p2endl;coutp2+1endl;編輯ppt程序運(yùn)行結(jié)果為:Plea
39、se input two integer numbers:3 83 83 80 x0012FF7C 0 x0012FF780 x0012FF7C 0 x0012FF7810 x0012FF7C 請(qǐng)注意運(yùn)行結(jié)果中幾個(gè)地址之間的關(guān)系。需要說明的是,在不同的系統(tǒng)中輸出的地址值有差異。編輯ppt2.4.3 指針與數(shù)組的關(guān)系 C+中,指針與數(shù)組的關(guān)系十分密切。實(shí)際上,數(shù)組名本身就是一個(gè)常量指針,它始終保存數(shù)組在內(nèi)存中的首地址。因此,對(duì)數(shù)組元素的引用可以用不同的表示方式。 對(duì)于一維數(shù)組,假設(shè)有如下語(yǔ)句:int a5;int *p=a;則ai、*(a+i)、pi和*(p+i)都表示數(shù)組中第i(i=0,1,4
40、)個(gè)元素。編輯ppt【例2.12】 利用指針引用數(shù)組元素的方法求數(shù)組元素的和。#include void main()int a=1,3,5,7,9;int sum=0,*pa=a;for (int i=0;i5;i+)sum=sum+*pa;pa+;coutsum=sumendl;編輯ppt C+中,二維數(shù)組可以看成是由若干一維數(shù)組構(gòu)成的。例如,有下面的定義語(yǔ)句:int b34;則可以將數(shù)組b看成是由b0、b1和b2三個(gè)元素構(gòu)成的一維數(shù)組,其中每個(gè)元素又是由4個(gè)整型元素組成的一維數(shù)組。則根據(jù)一維數(shù)組與指針的關(guān)系可知,表達(dá)式b+0表示元素b0,表達(dá)式b+1表示元素b1,表達(dá)式b+2表示元素b2
41、。由于b0、b1和b2又是一維數(shù)組,則表示數(shù)組b1中下標(biāo)為1的元素可以是b11、*(b1+1)。因此,表示元素bij的形式有bij、*(bi+j)、*(*(b+i)+j)和(*(b+i)j等。編輯ppt由于二維數(shù)組可以看成是元素為一維數(shù)組的一維數(shù)組,因此b是指向一維數(shù)組的常量指針。若有以下定義語(yǔ)句:int b34,*pb;則語(yǔ)句pb=b;是錯(cuò)誤的,因?yàn)閜b是指向整型變量的指針,b是指向一維數(shù)組的指針,二者類型不同。 C+中提供了指向數(shù)組的指針,其定義格式如下:數(shù)據(jù)類型 (*指針名)常量表達(dá)式;其中,常量表達(dá)式規(guī)定了指針?biāo)赶蛞痪S數(shù)組的長(zhǎng)度。例如:int (*p)4;定義了指向長(zhǎng)度為4的一維數(shù)組
42、的指針p,則p=b; 合法。 編輯ppt2.4.4 動(dòng)態(tài)內(nèi)存分配 C語(yǔ)言中使用庫(kù)函數(shù)malloc()和free()來實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存的分配和釋放,C+仍然支持這種方式。另外,C+提供了運(yùn)算符new和delete來進(jìn)行動(dòng)態(tài)內(nèi)存的分配和釋放。 使用new和delete來代替庫(kù)函數(shù)malloc()和free()有以下優(yōu)勢(shì):new和delete是運(yùn)算符,使用時(shí)不需要包含頭文件;在對(duì)指針賦值時(shí)不需要進(jìn)行類型轉(zhuǎn)換,系統(tǒng)自動(dòng)返回正確的類型;使用new給對(duì)象分配內(nèi)存空間時(shí)會(huì)自動(dòng)調(diào)用該對(duì)象的構(gòu)造函數(shù),使用delete釋放對(duì)象時(shí)會(huì)自動(dòng)調(diào)用該對(duì)象的析構(gòu)函數(shù)。編輯ppt1. new運(yùn)算符 new運(yùn)算符用于向系統(tǒng)申請(qǐng)內(nèi)存空
43、間,并返回該內(nèi)存空間的首地址。其使用格式如下:指針= new 數(shù)據(jù)類型;其中,“數(shù)據(jù)類型”表示分配的內(nèi)存空間存放數(shù)據(jù)的類型,系統(tǒng)根據(jù)數(shù)據(jù)類型分配相應(yīng)大小的內(nèi)存空間,它可以是任意合法的數(shù)據(jù)類型。指針的類型必須與new后的數(shù)據(jù)類型相同,否則應(yīng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例如:double *p=new double;向系統(tǒng)申請(qǐng)了8個(gè)字節(jié)的內(nèi)存空間,用于存放一個(gè)double類型的數(shù)據(jù),并將首地址賦值給指針p。編輯ppt在分配內(nèi)存空間時(shí),可以對(duì)分配的內(nèi)存空間進(jìn)行初始化,格式如下:指針= new 數(shù)據(jù)類型(表達(dá)式);系統(tǒng)用表達(dá)式的值初始化分配的內(nèi)存空間。 new運(yùn)算符可以為數(shù)組申請(qǐng)內(nèi)存空間,建立動(dòng)態(tài)數(shù)組。為一維數(shù)
44、組申請(qǐng)存儲(chǔ)空間的格式為:指針= new 數(shù)據(jù)類型整型表達(dá)式;其中,“數(shù)據(jù)類型”表示數(shù)組元素的類型。為數(shù)組分配存儲(chǔ)空間時(shí),不能進(jìn)行初始化。例如:int n=5;int *p=new intn+1;建立了一個(gè)有6個(gè)整型元素的數(shù)組,并將數(shù)組的首地址賦值給指針p。編輯ppt為二維數(shù)組申請(qǐng)內(nèi)存空間的格式為:指針= new 數(shù)據(jù)類型表達(dá)式常量表達(dá)式;其中,第一維的大小可以是任意合法的表達(dá)式,第二維的大小必須是常量表達(dá)式。例如:int n=5;int (*p)4=new intn4; 使用new可以建立任意維數(shù)的動(dòng)態(tài)數(shù)組,格式如下:指針 = new 數(shù)據(jù)類型表達(dá)式常量表達(dá)式1常量表達(dá)式2;其中,第一維的大小
45、可以是任意合法的表達(dá)式,其它維的大小必須是常量表達(dá)式。 編輯ppt使用new動(dòng)態(tài)分配內(nèi)存時(shí),如果系統(tǒng)沒有足夠的存儲(chǔ)空間滿足申請(qǐng)要求,或由于其它原因造成分配內(nèi)存失敗,new將返回空指針(NULL)。因此通常應(yīng)對(duì)內(nèi)存的動(dòng)態(tài)分配是否成功進(jìn)行檢查。例如:int *p=new int;if (!p)coutallocation failureendl;return;編輯ppt2. delete運(yùn)算符 由new動(dòng)態(tài)分配的存儲(chǔ)空間在使用結(jié)束后一定要釋放,否則會(huì)造成內(nèi)存泄漏。運(yùn)算符delete用于釋放使用new動(dòng)態(tài)分配的存儲(chǔ)空間。它的使用格式一般為:delete 指針;其中,“指針”必須是new分配的存儲(chǔ)空間
46、的首地址。 釋放動(dòng)態(tài)分配的數(shù)組存儲(chǔ)空間時(shí),應(yīng)使用如下格式:delete 指針;其中,“指針”必須是動(dòng)態(tài)數(shù)組的首地址。直接使用delete運(yùn)算符(不加)來釋放動(dòng)態(tài)數(shù)組是錯(cuò)誤的,但編譯器并不能發(fā)現(xiàn)這種錯(cuò)誤。編輯ppt【例2.13】 從鍵盤輸入若干個(gè)整數(shù)存入數(shù)組并求這些整數(shù)的和。#include void main()int count,sum=0;coutcount;int *p=new intcount;if (!p)編輯pptcoutallocation failureendl;return;coutplease input count integer umbers:endl;for (int
47、 i=0;i*(p+i);sum=sum+ *(p+i);coutsum=sumendl;delete p;編輯ppt由于事先并不知道需要處理多少個(gè)數(shù)據(jù),因此程序中使用new運(yùn)算符建立了動(dòng)態(tài)數(shù)組p,使用結(jié)束后,使用delete p;釋放動(dòng)態(tài)數(shù)組。 如果將例2.13程序中的for循環(huán)語(yǔ)句改成如下形式:for (int i=0;i*p;sum=sum+ *p;p+;則for循環(huán)語(yǔ)句執(zhí)行結(jié)束后,指針p已經(jīng)不指向new分配動(dòng)態(tài)數(shù)組的首地址,當(dāng)使用語(yǔ)句delete p;釋放動(dòng)態(tài)數(shù)組時(shí),會(huì)在運(yùn)行時(shí)產(chǎn)生錯(cuò)誤。編輯ppt2.5 函 數(shù)2.5.1 函數(shù)的定義和調(diào)用 函數(shù)必須先定義才能使用。 函數(shù)定義的一般格式為
48、:數(shù)據(jù)類型 函數(shù)名(參數(shù)表)函數(shù)體編輯ppt其中: “數(shù)據(jù)類型”是指函數(shù)返回值的類型,缺省為int。函數(shù)的返回值通過return語(yǔ)句帶回,其形式為:return 表達(dá)式; return語(yǔ)句結(jié)束函數(shù)的執(zhí)行,返回到調(diào)用函數(shù),同時(shí)返回函數(shù)值到調(diào)用表達(dá)式中。其中的表達(dá)式可以省略,此時(shí),return語(yǔ)句只是結(jié)束函數(shù)的執(zhí)行但不返回值。 如果一個(gè)函數(shù)不返回值,則其數(shù)據(jù)類型應(yīng)為void。 “函數(shù)名”是一個(gè)標(biāo)識(shí)符,必須符合C+標(biāo)識(shí)符的命名規(guī)則。編輯ppt “參數(shù)表”是函數(shù)接收調(diào)用數(shù)據(jù)的主要途徑,其聲明格式為:數(shù)據(jù)類型 參數(shù)名1, 數(shù)據(jù)類型 參數(shù)名2, 數(shù)據(jù)類型 參數(shù)名n 定義函數(shù)時(shí)聲明的參數(shù)稱為形式參數(shù)(簡(jiǎn)稱形
49、參)。 如果一個(gè)函數(shù)在調(diào)用時(shí)不需要接收數(shù)據(jù),則形式參數(shù)可以省略。此時(shí),函數(shù)名后的括號(hào)內(nèi)為空,但一對(duì)圓括號(hào)不能省略。 “函數(shù)體”是由一對(duì)花括號(hào)“”括起來的語(yǔ)句序列,可以包含說明語(yǔ)句和其它分程序。函數(shù)體實(shí)現(xiàn)函數(shù)的功能。編輯ppt【例2.14】 編寫一個(gè)求階乘的函數(shù)。 階乘n!定義為:n!n(n1)(n2)21,且規(guī)定0!1。函數(shù)定義如下:int fac(int n)int result=1;if (n=1;i-)result=result*i;return result;編輯ppt函數(shù)定義后就可以使用,函數(shù)的使用是通過函數(shù)調(diào)用來實(shí)現(xiàn)的。函數(shù)調(diào)用的一般格式為:函數(shù)名(實(shí)參列表)其中,“實(shí)參列表”用來
50、對(duì)形式參數(shù)進(jìn)行初始化,即將實(shí)參數(shù)據(jù)傳遞給函數(shù)。實(shí)參列表中參數(shù)的個(gè)數(shù)、類型和次序應(yīng)與函數(shù)定義時(shí)的形式參數(shù)一一對(duì)應(yīng)。 函數(shù)調(diào)用可以作為一條語(yǔ)句,這時(shí)函數(shù)可以沒有返回值。函數(shù)調(diào)用也可以出現(xiàn)在表達(dá)式中,這時(shí)函數(shù)必須有一個(gè)返回值。編輯ppt2.5.2 函數(shù)原型 C+的類型檢查較C語(yǔ)言更為嚴(yán)格,對(duì)于函數(shù)遵循“先定義后使用”的原則。如果函數(shù)定義在先,則可以直接調(diào)用。在程序設(shè)計(jì)中為了避免在安排函數(shù)定義的先后次序上花費(fèi)過多的精力,C+提供了函數(shù)原型,允許函數(shù)調(diào)用在前,定義在后,但必須在函數(shù)調(diào)用前對(duì)該函數(shù)進(jìn)行原型說明。函數(shù)原型是對(duì)函數(shù)的一種引用性說明,也稱其為函數(shù)聲明。 函數(shù)原型的重要作用是可以使編譯器檢查一個(gè)函
51、數(shù)調(diào)用中可能存在的問題,維護(hù)程序的正確性。 函數(shù)原型的語(yǔ)法形式一般為:函數(shù)類型 函數(shù)名(形式參數(shù)類型表); 函數(shù)原型是一條語(yǔ)句,它必須以分號(hào)結(jié)束。 函數(shù)原型與函數(shù)定義時(shí)的函數(shù)返回類型、函數(shù)名、參數(shù)類型、參數(shù)個(gè)數(shù)和次序必須完全一致。編輯ppt【例2.15】 函數(shù)原型示例。#include void main()int a,b,c;int max(int,int);/函數(shù)原型說明coutab;c=max(a,b);/函數(shù)調(diào)用coutThe max value of a and b is:cy?x:y; 在函數(shù)原型的形式參數(shù)類型表中可以包含形式參數(shù)名,例如:int max(int x,int y);
52、函數(shù)原型語(yǔ)句可以放在調(diào)用函數(shù)內(nèi)、對(duì)函數(shù)的調(diào)用之前,也可以放在源程序文件開頭、函數(shù)的外部。通??蓪⒁粋€(gè)源程序文件中所有外部函數(shù)的函數(shù)原型放在一個(gè)頭文件中,當(dāng)另一個(gè)源程序文件需要調(diào)用這些函數(shù)時(shí),只需要在該源程序文件開頭用#include編譯預(yù)處理指令包含此頭文件即可。 編輯ppt2.5.3 內(nèi)聯(lián)函數(shù) 內(nèi)聯(lián)函數(shù)是C+對(duì)C語(yǔ)言的擴(kuò)展。使用函數(shù)可以提高程序的模塊化程度,使程序易于調(diào)試和維護(hù),提高開發(fā)效率。但是函數(shù)調(diào)用也會(huì)降低程序的執(zhí)行效率。在進(jìn)行函數(shù)調(diào)用時(shí),系統(tǒng)需要做一些額外的工作。首先需要保護(hù)現(xiàn)場(chǎng)和保存返回地址,然后轉(zhuǎn)到被調(diào)函數(shù)執(zhí)行,當(dāng)被調(diào)函數(shù)執(zhí)行結(jié)束后,需要取出返回地址并恢復(fù)現(xiàn)場(chǎng),繼續(xù)執(zhí)行下面的語(yǔ)句
53、。這些額外的工作,需要花費(fèi)一定的時(shí)間和空間,特別是對(duì)于一些函數(shù)體比較簡(jiǎn)單、規(guī)模較小但又使用頻繁的函數(shù),其執(zhí)行效率較低。編輯ppt為了提高調(diào)用頻繁、函數(shù)代碼少的函數(shù)的執(zhí)行效率,C+引入了內(nèi)聯(lián)函數(shù)。當(dāng)程序中出現(xiàn)對(duì)內(nèi)聯(lián)函數(shù)的調(diào)用時(shí),C+編譯程序?qū)⒑瘮?shù)的代碼直接插入到函數(shù)調(diào)用處,即用函數(shù)代碼替換函數(shù)調(diào)用。因此可以節(jié)省函數(shù)調(diào)用的時(shí)間,但會(huì)使程序的長(zhǎng)度增加。使用內(nèi)聯(lián)函數(shù)實(shí)際上是用空間換時(shí)間,其目的是提高程序的執(zhí)行效率。定義內(nèi)聯(lián)函數(shù)的方法是在定義函數(shù)時(shí)用關(guān)鍵字inline修飾該函數(shù)。編輯ppt【例2.16】 編程求110這10個(gè)數(shù)的三次方,并輸出。#include inline int intcube(in
54、t n)return n*n*n;void main()for(int i=1;i=10;i+)int p=intcube(i);couti*i*i=pendl;編輯ppt使用內(nèi)聯(lián)函數(shù)時(shí)應(yīng)注意:(1) 內(nèi)聯(lián)函數(shù)體內(nèi)不能含有循環(huán)語(yǔ)句和switch語(yǔ)句,也不能是遞歸函數(shù)。如果函數(shù)體內(nèi)含有這些語(yǔ)句,系統(tǒng)會(huì)將此函數(shù)作為普通函數(shù)處理。(2) 內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在對(duì)該函數(shù)的調(diào)用之前,否則編譯器將無法知道插入什么代碼。(3) 內(nèi)聯(lián)函數(shù)不應(yīng)過大,一般宜在15行之間。(4) 內(nèi)聯(lián)函數(shù)內(nèi)不能包含static變量。C+中的內(nèi)聯(lián)函數(shù)具備宏定義#define的功能,但由于它是一個(gè)函數(shù),編譯時(shí)需要進(jìn)行類型和語(yǔ)法檢查,
55、故消除了宏定義的不安全因素。編輯ppt2.5.4 函數(shù)參數(shù)的默認(rèn)值 C+允許在函數(shù)原型或函數(shù)定義中為一個(gè)或多個(gè)形參指定默認(rèn)值,這一點(diǎn)與C語(yǔ)言不同。在調(diào)用含有默認(rèn)值的函數(shù)時(shí),如果為形參指定了相應(yīng)的實(shí)參,則形參使用實(shí)參的值,如果未指定相應(yīng)的實(shí)參,則C+自動(dòng)以默認(rèn)值作為參數(shù)的值。這為函數(shù)的使用提供了便利。例如,若函數(shù)add的函數(shù)原型為:int add(int x=0,int y=0);則為形參x和y分別指定了默認(rèn)值0。如果函數(shù)調(diào)用語(yǔ)句為:a=add(5,8);編輯ppt則形參x和y分別取實(shí)參5和8。若函數(shù)調(diào)用語(yǔ)句為:a=add(5);則形參x取實(shí)參值5,形參y取默認(rèn)值0。如函數(shù)調(diào)用語(yǔ)句為:a=add
56、();則形參x和y都取其默認(rèn)值0。 為形參指定的默認(rèn)值可以是任何初始化表達(dá)式,這個(gè)表達(dá)式可以含有函數(shù)調(diào)用或其它的全局變量。編輯ppt在使用和設(shè)置參數(shù)默認(rèn)值時(shí)應(yīng)注意:(1) 如果需要為多個(gè)形參指定默認(rèn)值,則在函數(shù)原型中或函數(shù)定義中,必須將所有指定默認(rèn)值的參數(shù)放在參數(shù)表的右部,即在帶默認(rèn)值的參數(shù)的右邊不能有未指定默認(rèn)值的參數(shù)。例如下面三個(gè)函數(shù)原型中,第一個(gè)是正確的,其它兩個(gè)是錯(cuò)誤的:void fun1(int w,int x=1,int y=1,int z=1);/正確的函數(shù)原型void fun2(int w=1,int x=2,int y=3,int z);/錯(cuò)誤的函數(shù)原型void fun3(i
57、nt w=1,int x,int y,int z=3);/錯(cuò)誤的函數(shù)原型在進(jìn)行函數(shù)調(diào)用時(shí),編譯器按從左到右的順序?qū)?shí)參與形參相聯(lián)系,如果省略前面的實(shí)參,則編譯器將無法區(qū)分隨后的實(shí)參對(duì)應(yīng)哪個(gè)形參。編輯ppt(2) 為參數(shù)指定默認(rèn)值必須在函數(shù)調(diào)用之前進(jìn)行。因此,如果存在函數(shù)原型,則參數(shù)的默認(rèn)值應(yīng)在函數(shù)原型中指定,否則在函數(shù)定義中指定。另外,如果在函數(shù)原型中已經(jīng)指定了參數(shù)的默認(rèn)值,則在函數(shù)定義中不允許重復(fù)指定,即使指定的默認(rèn)值完全相同也不行。(3) 在函數(shù)調(diào)用時(shí),如果省略某個(gè)實(shí)參(使用默認(rèn)值),則該參數(shù)右邊的所有參數(shù)都必須省略。例如,下面三個(gè)對(duì)函數(shù)fun1()的調(diào)用語(yǔ)句中,前面兩個(gè)是正確的,最后一個(gè)
58、是錯(cuò)誤的:fun1(5,8);/正確,相當(dāng)于fun1(5,8,1,1);fun1(5,8,10);/正確,相當(dāng)于fun1(5,8,10,1);fun1(5, ,8);/錯(cuò)誤的函數(shù)調(diào)用編輯ppt2.5.5 函數(shù)重載 在C語(yǔ)言中,要求函數(shù)名必須唯一,即使是功能相同的函數(shù)也必須具有不同的函數(shù)名。例如求一個(gè)數(shù)的絕對(duì)值,由于該數(shù)可以是int、double或long,雖然都是求絕對(duì)值,也必須定義三個(gè)不同函數(shù)名的函數(shù)。在C語(yǔ)言函數(shù)庫(kù)中這三個(gè)函數(shù)的函數(shù)原型為:int abs(int);long labs(long);double fabs(double);在使用時(shí)必須根據(jù)參數(shù)類型決定調(diào)用哪一個(gè)函數(shù),不能混淆,
59、否則會(huì)造成記憶和使用的不方便。編輯ppt【例2.17】 求絕對(duì)值函數(shù)的重載。#include int abs(int n)return n=0?n:-n;long abs(long n)return n=0?n:-n;double abs(double n)return n=0?n:-n;編輯pptvoid main()int i=-5;long l=8345L;double d=-3.6;cout|i|=abs(i)endl;cout|l|=abs(l)endl;cout|d|=abs(d)endl; 對(duì)于重載函數(shù)的調(diào)用,C+編譯器根據(jù)函數(shù)調(diào)用時(shí)實(shí)參的類型或個(gè)數(shù)來確定調(diào)用的是哪一個(gè)函數(shù)。例如
60、,對(duì)于函數(shù)調(diào)用abs(d),根據(jù)參數(shù)d的類型,編譯器確定調(diào)用的是函數(shù)double abs(double)。編輯ppt【例2.18】 參數(shù)個(gè)數(shù)不同的函數(shù)重載示例。#include int max(int a,int b)return ab?a:b;int max(int a,int b,int c)int t=max(a,b);return max(t,c);編輯pptint max(int a,int b,int c,int d)int t1=max(a,b);int t2=max(c,d);return max(t1,t2);void main()coutmax(45,83)endl;cou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房按揭買房買賣合同
- 國(guó)際公路運(yùn)輸合同范本
- 2025船舶買賣合同書樣本版
- 提高創(chuàng)新能力的技能培訓(xùn)
- 提高人際關(guān)系的培訓(xùn)課程
- 品牌服務(wù)合同范本
- 2024年公共事業(yè)領(lǐng)域投資合同
- 吊車零租賃合同范本
- 鋼釘鐵釘售賣合同
- 2025有限責(zé)任公司銀行貸款擔(dān)保合同
- 職業(yè)健康監(jiān)護(hù)評(píng)價(jià)報(bào)告編制指南
- 管理ABC-干嘉偉(美團(tuán)網(wǎng)COO)
- 基于視覺的工業(yè)缺陷檢測(cè)技術(shù)
- 軍事英語(yǔ)詞匯整理
- 家庭教育指導(dǎo)委員會(huì)章程
- DB31-T 1440-2023 臨床研究中心建設(shè)與管理規(guī)范
- 老客戶維護(hù)方案
- 高處作業(yè)安全教育培訓(xùn)講義課件
- 萬(wàn)科物業(yè)管理公司全套制度(2016版)
- 動(dòng)物檢疫技術(shù)-動(dòng)物檢疫處理(動(dòng)物防疫與檢疫技術(shù))
- 英語(yǔ)經(jīng)典口語(yǔ)1000句
評(píng)論
0/150
提交評(píng)論