c程序設(shè)計教案_第1頁
c程序設(shè)計教案_第2頁
c程序設(shè)計教案_第3頁
c程序設(shè)計教案_第4頁
c程序設(shè)計教案_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+程序設(shè)計教案海南軟件職業(yè)技術(shù)學院Hainan Software Profession Institute(2006-2007學年度第一學期)教師姓名: 季文 天 系 部: 軟 件 工 程 系 授課專業(yè): 軟 件 技 術(shù) 授課班級: 05軟件技術(shù) 3班 目錄課題01:Visual C+6.0開發(fā)環(huán)境2課題02:C+數(shù)據(jù)類型、表達式、語句5課題03: 數(shù)組7課題04: 結(jié)構(gòu)類型11課題05:函數(shù)13課題06:函數(shù)參數(shù)16課題07:內(nèi)聯(lián)函數(shù)與遞歸函數(shù)19課題08:函數(shù)重載21課題09: 指針23課題10: 指針與數(shù)組、字符串指針26課題11: 指針與函數(shù)28課題12: 指針與動態(tài)分配內(nèi)存31課題

2、13: 引用33課題14: 類與對象36課題15: 類的靜態(tài)成員及常量成員39課題16: 友元43課題17: 運算符重載46課題18: 繼承與派生49課題19: 派生關(guān)系中的二義性處理53課題20: 虛基類56課題21: 多態(tài)性與虛函數(shù)59課題22: 模板62課題23: 文件、流及C+的流類庫66課題24: 插入與提取運算符的重載69課題25: 磁盤文件I/O70課題01:Visual C+6.0開發(fā)環(huán)境一、教學目標:1.掌握Visual C+6.0開發(fā)工具的選單、工具欄、項目、工作區(qū)等概念2.掌握使用VC編寫控制臺應(yīng)用程序3.掌握使用VC進行程序調(diào)試二、教學重點:1、掌握Visual C+6

3、.0開發(fā)工具的選單、工具欄、項目、工作區(qū)等概念三、教學難點:1、使用VC編寫控制臺應(yīng)用程序。2、使用VC進行程序調(diào)試四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入Visual C+是Microsoft公司推出的目前使用極為廣泛的基于Windows平臺的可視化開發(fā)環(huán)境。Visual C+ 6.0 是在以往版本不斷更新的基礎(chǔ)上形成的,由于其功能強大、靈活性好、完全可擴展以及具有強有力的Internet支持,在各種C+語言開發(fā)工具中脫穎而出,成為目前最為流行的C+語言集成開發(fā)環(huán)境。(二)、講授新課1、開發(fā)環(huán)境概述:板書或幻燈片演示下圖:Visual C+

4、6.0開發(fā)環(huán)境包括:l 標題欄l 工具欄l 選單l 項目工作區(qū)窗口l 輸出窗口l 狀態(tài)欄l 文檔窗依次介紹各項功能,詳細介紹選單、工具欄、項目工作區(qū)。2、簡單的控制臺應(yīng)用程序使用Appwinzard創(chuàng)建一個控制臺應(yīng)用程序,使學生理解“工程”概念,熟悉項目的程序框架,以及如何添加程序代碼、編譯、運行。以下面程序為例,講述如何建立控制臺應(yīng)用程序:【例Ex_Hello】#include <stdafx.h>int main(int argc,char* argv)cout<<”Hello world”;return 0;【運行結(jié)果】:【例Ex_Hello】利用投影演示P18例

5、Ex_Hello。3、程序調(diào)試在軟件開發(fā)過程中,大部分的工作往往體現(xiàn)在程序的調(diào)試上。調(diào)試一般按這樣的步驟進行:“修正語法錯誤設(shè)置斷點啟用調(diào)試器控制程序運行查看和修改變量的值”l 修正語法錯誤調(diào)試最初的任務(wù)主要是修正一些語法錯誤,比如:n 未定義或不合法的標識符n 數(shù)據(jù)類型或參數(shù)類型及個數(shù)不匹配。l 設(shè)置斷點用C+調(diào)試的斷點可以有以下類型:n 為之斷點n 數(shù)據(jù)斷點n 條件斷點l 啟用調(diào)試器Visual C+ 6.0創(chuàng)建的項目,系統(tǒng)會自動為項目創(chuàng)建Win32 Debug版本的默認配置,選擇”build”選單-“start debug”-“Go”、”step into” 、 “Run to curs

6、or”命令,就可以啟動調(diào)試器了。l 控制程序運行可以通過”step into ,step over ,step out ,run to cursor”控制程序運行。l 查看和修改變量的值在程序調(diào)試的時候VC會自動顯示”Watch”和”Variables”兩個調(diào)試窗口,通過這兩個窗口可以查看或修改當前運行程序的變量的值。課題02:C+數(shù)據(jù)類型、表達式、語句一、教學目標:1.掌握C+程序結(jié)構(gòu)、基本組成2.掌握C+的基本數(shù)據(jù)類型、基本輸入/輸出3.掌握C+運算符、表達式4.掌握C+基本語句二、教學重點:1.C+程序結(jié)構(gòu)、基本組成2.C+基本數(shù)據(jù)類型、輸入輸出三、教學難點:1.C+運算符、表達式2.C

7、+基本語句四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入C+是在20世紀80年代初期由貝爾實驗室設(shè)計的一種在C語言的基礎(chǔ)上增加了面向?qū)ο笾С值恼Z言,她是目前應(yīng)用最為廣泛的編程語言。今天我們來學習他的基本結(jié)構(gòu)、數(shù)據(jù)類型、運算符和表達式、基本語句。(二)、講授新課1、C+程序結(jié)構(gòu)一個C+程序往往由預處理命令、語句、函數(shù)、變量和對象、輸入與輸出以及注釋幾個部分組成。l 預處理命令包括:宏定義命令、文件包含命令和條件編譯命令l 語句語句是組成程序的基本單元l 函數(shù)一個C+程序是由若干個函數(shù)組成。一個程序中有且僅有一個主函數(shù)main.l 變量和對象C+是面向

8、對象的語言,所以在C+中相比C語言多了對象,她是“類”的實例l 輸入輸出程序中總是少不了輸入和輸出語句。l 注釋注釋可以提高程序的可讀性、幫助程序員理解,在程序運行中不執(zhí)行。在編寫C+程序時,還要注意程序的書寫風格,要注意縮進和注釋。在編寫程序時,標識符應(yīng)該遵循以下原則:l 合法性l 有效性l 異讀性2、基本數(shù)據(jù)類型C+數(shù)據(jù)類型分為基本數(shù)據(jù)類型、派生類型以及復合類型3類?;緮?shù)據(jù)類型包括:l charl intl floatl double以及上述類型的變種,包括l shortl longl signedl unsignedl voidP29表2.1列出了C+的基本數(shù)據(jù)類型根據(jù)數(shù)據(jù)在程序中的可

9、變性,我們將數(shù)據(jù)分為:l 常量n 整型常量n 浮點型常量n 字符常量n 字符串常量n 符號常量l 變量n 變量定義n 變量的初始化要注意一個未初始化的變量不是沒有數(shù)值,而是取決于變量在系統(tǒng)中的存儲形式,她可能是系統(tǒng)的默認值或無效值。3、基本輸入、輸出C+中是通過標準的輸入流cin和標準輸出流cout來實現(xiàn)數(shù)據(jù)的輸入輸出?!九e例:Ex_CoutEnd】【舉例:Ex_Algorism】4、運算符和表達式C+用來記述運算的符號稱為運算符,按照操作數(shù)的個數(shù)可以分為:n 單目運算符n 雙目運算符n 三目運算符根據(jù)其功能可以分為:n 算術(shù)運算符n 賦值運算符n 關(guān)系運算符n 邏輯運算符n 位運算符變量、常

10、量通過一個或多個運算符組合起來就構(gòu)成了表達式,比如有關(guān)系運算符構(gòu)成的表達式成為關(guān)系表達式。5、基本語句C+提供了如表達式語句、復合語句、選擇語句和循環(huán)語句等,滿足了結(jié)構(gòu)化程序設(shè)計所需要的3中基本結(jié)構(gòu)。n 選擇語句n 條件語句 if elsen 開關(guān)語句switchn 循環(huán)語句n whilen do whilen for以上基本語句和C語言保持一致。課題03: 數(shù)組一、教學目標:1.了解構(gòu)造類型的意義2.了解數(shù)組的概念3.掌握一維數(shù)組、多維數(shù)組的定義二、教學重點:1一維數(shù)組的定義2數(shù)組的基本操作三、教學難點:1多維數(shù)組將維處理過程及多維數(shù)組的存儲2字符串數(shù)組的使用四、課時安排:2節(jié)課五、教具準備

11、:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入在計算機所處理的數(shù)據(jù)中,最常見的,也是最需要由計算機高速處理的數(shù)據(jù)是成批出現(xiàn)的同一類型的數(shù)據(jù),C+語言中把這類數(shù)據(jù)稱為數(shù)組。例如:· 監(jiān)測系統(tǒng)在一段時間內(nèi)獲得的檢測、采樣值,可能是int 型或float 型數(shù)據(jù)的數(shù)組;· 一個管理系統(tǒng)的數(shù)據(jù)庫,可能是一系列結(jié)構(gòu)類型(記錄)數(shù)據(jù)的序列;· 一幅電視圖像,可能是其每個像素的顏色及灰度值(整型數(shù))的二維陣列。任何一種類型的一批數(shù)據(jù),都可以組成數(shù)組,例如int 型,float 型,char 型數(shù)據(jù)可以組成數(shù)組;這些基本類型的派生類型(如long 型,double

12、型,unsigned char 型)的數(shù)據(jù),枚舉、結(jié)構(gòu)、聯(lián)合類型的數(shù)據(jù),以至由用戶或系統(tǒng)定義的類(類型)的對象,都可以組成數(shù)組。(二)、講授新課1、一維數(shù)組由n 個同一類型數(shù)據(jù)組成的一維序列,構(gòu)成一維數(shù)組,一維數(shù)組的下標為0,n-1。1一維數(shù)組的說明任何一種已知類型數(shù)據(jù)都可說明為數(shù)組,數(shù)組說明的格式為:<類型名><數(shù)組名><元素數(shù)><初值表> ;類型名:可以是基本類型名,基本類型的派生類型名,類名,枚舉類型名,結(jié)構(gòu),聯(lián)合類型名(也可以是枚舉、結(jié)構(gòu)聯(lián)合的類型說明)。關(guān)于指針數(shù)組將在下節(jié)說明。還有數(shù)組類型的數(shù)組就是多維數(shù)組了,也將在下面介紹。數(shù)組名:

13、標識符,數(shù)組名有兩個附加作用:(1)是表示數(shù)組元素的下標變量。如array2表示數(shù)組的第三個元素。(2)它還是一個指向數(shù)組的首元指針。元素數(shù):一個正整數(shù),指出數(shù)組的元素個數(shù),或數(shù)組的大?。╯ize)。元素數(shù)要用方括號“”括起來。方括號不可缺省,元素數(shù)則有時可缺省,這時必須賦初值,系統(tǒng)按所賦的初值個數(shù)確定數(shù)組的大小。初值表:可缺省。是由花括號,括起來且用逗號,分開的初始化常量值。例如:int list 100,A1010 ,B4,3,2;char ch26;complex com4=(3.2,4.7),(0.0,0.0);其中,數(shù)組list100未賦初值。數(shù)組A1010為一個二維數(shù)組,未賦初值。

14、數(shù)組B已賦初值,元素數(shù)為3。數(shù)組com4是用戶定義的complex 類型的數(shù)組,數(shù)組有4 個元素,其中前兩個元素已賦初值,初值分別為(3.2,4.7),(0.0, 0.0)。2數(shù)組的操作下標變量C+語言未提供對于數(shù)組整體進行操作的運算符和運算。對于數(shù)組的操作是通過對于其元素,即下標變量進行的。下標變量的格式為:<數(shù)組名><下標>下標:整數(shù),或整型表達式,其取值范圍為0n-1,n=數(shù)組元素總數(shù),例如:int A4;共有四個下標變量:A0,A1,A2,A3。對于下標變量可進行下列操作。(1)賦值。可以三種方式進行:初始化:int A41,2,3 ;相當于一次為A0,A1,A

15、2 賦值為1,2,3。賦值語句:A3= 4* A1 ;相當于把4*2=8 賦值A(chǔ)3。輸入語句:cinA0 ;或for(int i=0;i4;i+) cinAi;后者可通過鍵盤操作,為數(shù)組的四個元素依次賦值。(2)一般運算。下標變量可與同一類型的一般變量一樣參加它所允許的運算。如:A0+= A2+;coutA0” ”A1*A2;等等。下標也可以是一個表達式,如:int A41,2,3,4;A3AA2-A1*4;下標表達式應(yīng)注意其值應(yīng)保持在0n-1 范圍之內(nèi)。2、多維數(shù)組若干同一類型的數(shù)據(jù)m 列n 行的矩陣,則可稱為二維數(shù)組,二維數(shù)組亦可視為一維數(shù)組的數(shù)組。int Amn;說明了一個二維數(shù)組,它有

16、m×n 個元素,它也可以視為由n 個一維數(shù)組int Am組成的(一維)數(shù)組。類似地,還可以說明三維,四維數(shù)組,二維以上的數(shù)組統(tǒng)稱為多維數(shù)組。1說明和初始化多維數(shù)組的說明(以二維為例):<類型名><數(shù)組名><行數(shù)><列數(shù)>類型名:同前節(jié)說明。數(shù)組名:同前節(jié)說明。行數(shù):正整數(shù)。列數(shù):正整數(shù)。例如:char ch23;該二維數(shù)組共有2 行3 列,元素個數(shù)為2*3= 6。在二維數(shù)組中,為數(shù)組賦初值的方式有:int a23=1,2,3,4,5,6;亦可寫為:int a23=1,2,3,4,5,6;二者效果是一樣的。系統(tǒng)將按逐行的次序順序為各元素賦

17、值。其次序為:a00,a01,a02,a10,a11,a12對于三維以上的高維數(shù)組,其賦值方法是一樣的。2二維數(shù)組的操作對于二維數(shù)組的操作,同樣是通過對其元素即下標變量的操作來進行的。操作中應(yīng)注意:(1)注意下標表達式的取值范圍:char Amn;則下標變量Aij中i 的值應(yīng)在0m-1 之間,j 的值應(yīng)在0n-1 之間。(2)當只有一個下標時:Ai(O <= i <= n-1)表示的是一個一維數(shù)組,其元素個數(shù)為n,這些元素可用下標變量:Ai0,Ai1,Ain-1來表示。(3)更高維的數(shù)組,其定義和操作類似。3、 數(shù)組與字符串從表面上看,一個字符串就是一個字符數(shù)組,但在C+語言中,二

18、者并不完全相同,讀者在涉及到字符串處理時,必須注意。字符串是一個以串尾符'0'結(jié)尾的字符類型數(shù)組。從下面的例子可看出其區(qū)別:char string17="China";char string2 = "China";char string37= 'c','h','i','n','a' ;char string47= 'c','h','i' ,'n','a','0';這

19、說明了四個字符型數(shù)組,它們是互不相同的。課題04: 結(jié)構(gòu)類型一、教學目標:1.了解結(jié)構(gòu)類型的意義2.掌握結(jié)構(gòu)類型的定義及應(yīng)用方法3.掌握結(jié)構(gòu)數(shù)組的使用方法二、教學重點:1結(jié)構(gòu)類型的定義2結(jié)構(gòu)類型使用方法三、教學難點:1結(jié)構(gòu)數(shù)組的使用方法四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入實際應(yīng)用中往往需要把若干種不同類型的數(shù)據(jù)組合為一個導出類型,這就是結(jié)構(gòu)類型。數(shù)組是把若干相同類型的數(shù)據(jù)放在一起,結(jié)構(gòu)則是把若干不同的數(shù)據(jù)放在一起。例如,一個公司雇員的數(shù)據(jù)可能包括:char name20;enum male,femalesex;float salary;c

20、har phone11;那么我們?nèi)绾翁幚磉@樣的數(shù)據(jù)呢?下面就讓我們來學習一種新的構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體。(二)、講授新課對公司雇員數(shù)據(jù)進行處理或檢索時,把它們組成結(jié)構(gòu)類型會更方便:struct Employee char name20;enum male,femalesex;float salary;char phone11;C+語言中的結(jié)構(gòu)是作為類似于類的概念處理的,這一點將在以后學習中說明,在本章結(jié)構(gòu)(以及聯(lián)合)類型僅作為一種構(gòu)造數(shù)據(jù)類型。1、結(jié)構(gòu)類型與結(jié)構(gòu)變量說明結(jié)構(gòu)類型說明的格式為:struct <類型名> <成員表>類型名:標識符。成員表:<類型> &

21、lt;成員1><類型> <成員2>.<類型> <成員n>結(jié)構(gòu)類型的變量說明的格式為:struct <結(jié)構(gòu)類型名> <變量名表>變量說明中的關(guān)鍵字struct 可以省略(C 語言中不可),變量名表與一般變量說明一樣,其賦初始值的方法可從下面的例子中了解:struct Employee char name20;enum male,femalesex;float salary;char phone11; / 結(jié)構(gòu)類型Employee 的定義struct Employee gy1,gy2; / 變量gy1,gy2 的說明Em

22、ployee gy3,gy4=“John Smith”,male,2107.5,02223501234;/ 變量gy3,gy4(賦初值)的說明結(jié)構(gòu)類型及其變量的說明也可放在一起:struct Employee char name20;enum male,femalesex;float salary;char phone11;gy1,gy2;2、結(jié)構(gòu)變量的引用和賦值一個結(jié)構(gòu)變量由若干分量組成,對結(jié)構(gòu)分量的存取由圓點運算符“.”實現(xiàn),例如,在上例中,雇員gy1 的姓名可表示為 ,其電話號碼可表示為gy1.phone。因此,為結(jié)構(gòu)變量賦值,除了在變量說明中賦初值(如為gy4 賦初值)

23、的方法外,還可以用賦值語句或輸入語句為結(jié)構(gòu)分量賦值的方法: = “Tom Green”;gy3.sex = male;cin >> gy3.salary;cin >> gy3.phone;無論采用哪種方法為結(jié)構(gòu)分量賦值,都必須保證類型一致。C+語言還允許直接對結(jié)構(gòu)變量賦值,下面的賦值語句也是允許的:gy1 = gy4;gy3 = gy4;一般,數(shù)組變量不能這樣直接賦值。3、結(jié)構(gòu)數(shù)組結(jié)構(gòu)類型的數(shù)據(jù)也可以組成數(shù)組,稱為結(jié)構(gòu)數(shù)組。結(jié)構(gòu)數(shù)組在許多實際應(yīng)用問題中的采用非常普遍,例如,通訊錄,學生成績單,商業(yè)銷售記錄,人事檔案,資料登記表等等。下面的結(jié)構(gòu)數(shù)組是一個公

24、司的雇員檔案:struct Employee char name20;enum male,femalesex;float salary;char phone11;Employee efile100;數(shù)組的每一個分量是一個雇員的檔案數(shù)據(jù)。課題05:函數(shù) 一、教學目標:1.了解函數(shù)的作用、意義2.掌握函數(shù)的說明、調(diào)用、返回3.掌握函數(shù)的使用方法二、教學重點:1函數(shù)的說明2函數(shù)的調(diào)用三、教學難點:1函數(shù)返回四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入函數(shù)概念是C+語言中最重要的概念之一,函數(shù)設(shè)計是程序設(shè)計的主要部分或?qū)嵸|(zhì)部分。函數(shù)在C+程序設(shè)計中的意義

25、體現(xiàn)在四個方面。(1)從歷史上說,函數(shù)的思想來源于子程序,(如BASIC 語言中的子程序),把程序中反復出現(xiàn)的相同或相近的程序改寫成子程序,可以大大縮短程序的長度。函數(shù)實際上是參數(shù)化的子程序。(2)從結(jié)構(gòu)化程序設(shè)計(SP)的觀點來看,函數(shù)絕不僅僅是為了縮短程序長度,更重要的是通過函數(shù)設(shè)計,可以把整個程序要完成的整體的復雜的計算任務(wù),分解為一個個較小的,相對簡單的子任務(wù)。這種模塊化的程序易設(shè)計,易閱讀,易調(diào)試,易維護,較少出錯。(3)從運算的角度說,函數(shù)就是C+語言提供的由用戶定義的運算。運算符是系統(tǒng)提供的運算,而函數(shù)是由用戶自己定義的運算。(4)作為面向?qū)ο蟪绦蛟O(shè)計(OOP)語言的C+,以類為

26、核心,類由數(shù)據(jù)和方法組成,方法就是對數(shù)據(jù)的運算和處理,亦即類的函數(shù)成員。故函數(shù)設(shè)計同樣是OOP 的重要組成部分。(二)、講授新課1、函數(shù)的說明C+程序允許兩種函數(shù)說明語句的形式,我們把它們分別稱為函數(shù)原型(或函數(shù)聲明)和函數(shù)定義。1函數(shù)原型函數(shù)原型(亦稱函數(shù)聲明)用來指出函數(shù)的名稱,類型和參數(shù),其格式為:屬性說明類型函數(shù)名(參數(shù)表);例如:int add (int a, int b);inline void swap (float & s, float & t);void print (char *) ;屬性說明:可缺省,一般可以是下面的關(guān)鍵字之一:inline,static,

27、virtual,friend 等。inline 表示該函數(shù)為內(nèi)聯(lián)函數(shù);static 表示該函數(shù)為靜態(tài)函數(shù);virtual 表示該函數(shù)為虛函數(shù);friend 表示該函數(shù)為某類(class)的友元函數(shù)。其含義的細節(jié)在后面有關(guān)章節(jié)介紹。類型:指函數(shù)的返回類型。C +語言規(guī)定除了特別情形(main()函數(shù)和類的構(gòu)造函數(shù),析構(gòu)函數(shù))之外,所有函數(shù)都必須在說明中指出返回類型。一個函數(shù)可能有多個結(jié)果,不一定都用返回值的方式輸出(還可通過全局變量,引用參數(shù)和指針等方式傳出)計算結(jié)果,但函數(shù)調(diào)用作為一個表達式,該表達式的值則只能是函數(shù)的返回值。函數(shù)名:一個標識符。參數(shù)表:它可能為空,void 或類型參數(shù)名,類型

28、參數(shù)名 的形式。例如: main()print(void)cuberoot(float x)add(int a,int b)其中,函數(shù)原型中的參數(shù)表可忽略參數(shù)名,如:int add(int, int)void swap(float &, float &)它們與函數(shù)原型int add (int a, int b); void swap (float & s, float & t); 是等價的,事實上在編譯時,函數(shù)原型中的參數(shù)名是被忽略的,后者的參數(shù)表中的符號&表示該參數(shù)為引用型參數(shù),用以區(qū)別于一般的賦值型參數(shù),其用法在下面介紹。2函數(shù)定義函數(shù)定義與函數(shù)原型

29、的主要區(qū)別是它還包括函數(shù)體,其格式為:屬性說明類型函數(shù)名(參數(shù)表)函數(shù)體屬性說明,返回類型,函數(shù)名與函數(shù)原型一致,參數(shù)表中不可省略參數(shù)名。函數(shù)體:由和括起來的復合語句即程序塊。program 5_1 的最后12 行就是一個函數(shù)定義。從函數(shù)說明語句的介紹,我們可以看到程序中各種語句的分類(說明語句,表達式語句,控制語句和復合語句)并不是一個簡單的劃分概念。函數(shù)定義本身是一種說明語句,但其函數(shù)體則是一個復合語句。而在函數(shù)體內(nèi)部又可能包含說明語句,表達式語句,控制語句和復合語句??傊?,這種分類和區(qū)分是明確的,但它們之間又有互相包含的關(guān)系。2、函數(shù)調(diào)用函數(shù)調(diào)用是已定義函數(shù)的一次實際運行,(與某類型的一

30、個變量和后文中某類的一個對象類似),函數(shù)調(diào)用是函數(shù)定義的一個“實例”。函數(shù)說明中的參數(shù)稱為形式參數(shù)(形參),函數(shù)調(diào)用中的參數(shù)稱為實際參數(shù)(實參),函數(shù)調(diào)用一般出現(xiàn)在表達式中或獨立形成一個函數(shù)調(diào)用語句,例如:xrcuberoot(q2a)cuberoot(q2a);swap (a, b);函數(shù)調(diào)用的兩要素是函數(shù)名和實參表:<函數(shù)名> (<實參表>)實參表中的參數(shù)的類型、個數(shù)、順序必須與函數(shù)說明的參數(shù)表(形參表)相一致。賦值型的實參可以是一個表達式。在上節(jié)program5_1 的main()中兩次出現(xiàn)函數(shù)cuberoot(x)調(diào)用,其具體的調(diào)用實施過程如下:(1) 根據(jù)調(diào)用

31、語句中的函數(shù)名(cuberoot)在整個程序中搜索同名函數(shù)定義;(2) 對實參數(shù)的參數(shù)個數(shù),類型,順序進行核對,判定是否與函數(shù)定義中的形參表對應(yīng)一致,在上例中只有一個浮點型參數(shù);(3) 根據(jù)參數(shù)的類型(值參數(shù)或引用參數(shù))進行值參數(shù)的值傳遞或引用參數(shù)的換名,在上例中即是要把實參表達式的值計算出來賦給形參x;(4) 運行函數(shù)體代碼;(5) 返回調(diào)用點,并返回所要求的函數(shù)值,即返回計算結(jié)果croot 的值。3、函數(shù)的返回函數(shù)的返回完成兩項任務(wù):(1) 把運行控制從函數(shù)體返回到函數(shù)調(diào)用點。在上例中就是在計算cuberoot(-q/2+a)之后再返回到語句xr = cuberoot () + cuber

32、oot () 的計算過程中。(2) 根據(jù)返回值要求,返回所需要的數(shù)據(jù)值。函數(shù)的返回值有下面幾種情形:1.返回void 類型如果函數(shù)無值返回,應(yīng)說明為void 類型。例如:void print( ) cout<<Hello World !;void show( ) cout<<Wonderful C+!;函數(shù)僅需完成打印和顯示工作,不需返回任何數(shù)據(jù),這類函數(shù)調(diào)用一般形成一個函數(shù)調(diào)用語句。未作類型說明的函數(shù),系統(tǒng)認為是int 類型函數(shù),應(yīng)返回一整型值。2返回數(shù)值類型最常見的函數(shù)是返回一個數(shù)值的函數(shù)。例如:int add(int a,int b);float cuberoot

33、(float x);這類函數(shù)的調(diào)用表達式可以出現(xiàn)在表達式語句中。當函數(shù)要返回的數(shù)值不止一個時,情況比較復雜,一般它可以以結(jié)構(gòu)或類的形式,也可以以結(jié)構(gòu),數(shù)組或?qū)ο笾羔橆愋头绞綄崿F(xiàn),這樣的實例在后面的章節(jié)可以見到。3返回引用類型值返回方式是C 和Pascal 語言中唯一的返回方式,C+語言提供的引用返回概念是其特有的一種很強的功能,當函數(shù)定義中把該函數(shù)說明為某類型的引用類型時,該函數(shù)調(diào)用后返回的不單是值,而是包含返回值的變量(或?qū)ο螅?。由于返回引用與引用類型有關(guān),所以這樣的實例將在下節(jié)介紹。課題06:函數(shù)參數(shù)一、教學目標:1.進一步了解函數(shù)的應(yīng)用2.了解函數(shù)參數(shù)3.了解函數(shù)的值調(diào)用和引用調(diào)用二、教

34、學重點:1函數(shù)參數(shù)形式三、教學難點:1函數(shù)值調(diào)用和引用調(diào)用四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入函數(shù)的參數(shù)的設(shè)置和使用是函數(shù)設(shè)計中非常重要的部分。(二)、講授新課1、函數(shù)參數(shù) C+語言允許函數(shù)無參,有一個或多個參數(shù),而且還支持不定個數(shù)參數(shù)的函數(shù)。(1) 無參函數(shù):其函數(shù)說明為下列形式:void print(void); / 輸出指定的數(shù)據(jù)int getx(); / 輸出變量x 的值用void 或空表示無參。(2) 一個或多個參數(shù):多數(shù)函數(shù)有一個或多個確定的個數(shù)、確定的類型和順序的參數(shù),例如:void sort(int n,char* arr

35、ay) ;/對n 元整形數(shù)組array/進行排序float max(float a,float b,float c) ;/* 求三個實數(shù)a,b,c 中最大者。*/等等。定義中應(yīng)注意參數(shù)表的組成。因為在C+語言中,不同的函數(shù)是根據(jù)函數(shù)名和參數(shù)表二者來區(qū)分的,只有二者完全一致才是同一函數(shù)。(3) 不定個數(shù)參數(shù):有些應(yīng)用問題中參數(shù)個數(shù)是變化的。例如設(shè)計一個電話計費函數(shù),為了計算通話費,不同的通話類型(如市話,長途,數(shù)據(jù)與通訊,BP 機等)有不同數(shù)目的參數(shù)。處理參數(shù)個數(shù)不定的情形,可有不同的途徑。例如:void sort(int n,float * a);這個函數(shù)可對n 長的浮點數(shù)組進行排序,n 是變

36、化的;由于a 是數(shù)組的首元指針,因此這個函數(shù)實際上是可以進行對任意多個浮點數(shù)排序的處理。C+語言有的版本還提供一些庫函數(shù),支持處理形如:void abc(int i, );的不定參數(shù)函數(shù)。C+語言,允許參數(shù)表中包含無名參數(shù),主要是為了區(qū)分函數(shù),例如:int f(int a,int b)return ab*b;int f(int a,int b,int)return a*ab;兩個不同的函數(shù)同名,但由于第二個函數(shù)包含一無名參數(shù),使得在調(diào)用時能夠被區(qū)分,f(x,y)是第一個函數(shù)的調(diào)用,f(x,y,0)是第二個函數(shù)的調(diào)用。C+程序還允許為函數(shù)定義可缺省參數(shù),這種函數(shù)調(diào)用時具有靈活性,如:int sq

37、rsum(int a,int b,int c0)return a*ab*bc*c;其中參數(shù)c 為可缺省參數(shù),下面的調(diào)用方式都是合法的(x,y,z 為int 型變量):sqrsum(x,y,z)sqrsum(xy,xy)sqrsum(x,y)參數(shù)表中可有任意多個參數(shù)指定為可缺省參數(shù),但所有可缺省參數(shù)必須列后。在調(diào)用該函數(shù)時,一般不允許部分缺省,即要么省去全部缺省參數(shù),要么一個也不省。2、函數(shù)值調(diào)用和引用調(diào)用C+語言在進行函數(shù)調(diào)用時,對參數(shù)的處理有兩種方式,賦值型和引用型,即值調(diào)用方式和引用調(diào)用方式。前者是普通的形式,在C 語言中只有這種方式;C+語言中增加了引用調(diào)用形式,這種形式與pascal

38、語言中的變量參數(shù)調(diào)用方式相似。1 賦值調(diào)用方式在執(zhí)行函數(shù)調(diào)用時,在檢查函數(shù)名及參數(shù)表之后,首先為值參數(shù)分配內(nèi)存,然后計算各對應(yīng)的實參表達式,并把計算的值賦給剛剛創(chuàng)建的參數(shù)變量,進而開始函數(shù)體的運行。賦值形參:在函數(shù)定義的參數(shù)中,除了被說明為引用(&)的參數(shù)之外,其余所有類型的形參都屬于賦值形參。凡是賦值形參,在函數(shù)的每次調(diào)用時,都必須為每一個賦值形參創(chuàng)建一個新的參數(shù)變量。實參表達式:另一方面,函數(shù)調(diào)用語句中,與賦值形參相對應(yīng)的實參可以是指定類型的常量、變量或表達式。在執(zhí)行函數(shù)調(diào)用時應(yīng)把該表達式的值計算出來,作為初值賦給剛剛為賦值形參創(chuàng)建的參數(shù)變量。這是賦值調(diào)用方式名稱的由來。2引用調(diào)用

39、方式引用形參:函數(shù)定義的參數(shù)表中,名字前加上符號的參數(shù)為引用形參。例如:void swap(int a,int b)int tempa;ab;btemp;形參a,b 為引用形參,這時其函數(shù)原型可寫為:void swap(int,int);引用形參在調(diào)用過程中的參數(shù)傳遞機制不同于賦值形參。其要點是:(1)函數(shù)的調(diào)用語句中對應(yīng)于引用形參的實參必須是同一類型的變量,非變量的表達式則不允許。(2)參數(shù)傳遞的內(nèi)容不是實參的值,而是地址,其實際的效果是令對應(yīng)的引用形參在調(diào)用過程中,作為一個變量名指向作為實參的這個變量,與賦值形參的不同在這里體現(xiàn)出來,在引用調(diào)用過程中并不創(chuàng)建新的參數(shù)變量?。?)在函數(shù)體程序

40、塊的運行中,引用形參的每次出現(xiàn),由于它現(xiàn)在已經(jīng)是指向?qū)崊⒆兞?,因此相當于全用實參變量所代替。即起到了所謂的“換名”的作用。(4)在函數(shù)體程序運行結(jié)束,控制轉(zhuǎn)回調(diào)用點時,該引用形參與實參變量的對應(yīng)關(guān)系也就終止了。但是在調(diào)用過程中對于這個實參變量的所有處理和操作的結(jié)果,卻保留下來。這一點也是區(qū)別于賦值調(diào)用的。課題07:內(nèi)聯(lián)函數(shù)與遞歸函數(shù) 一、教學目標:1.進一步掌握函數(shù)的應(yīng)用2.了解內(nèi)聯(lián)函數(shù)3.掌握遞歸函數(shù)的使用二、教學重點:1函數(shù)嵌套2內(nèi)聯(lián)函數(shù)三、教學難點:1函數(shù)的遞歸調(diào)用四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入(二)、講授新課1、內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)

41、(inline)函數(shù)的設(shè)置是C+不同于C 的特征之一。(1)在C+程序中符合下列條件的函數(shù):函數(shù)說明前冠以“inline”關(guān)鍵字的函數(shù);類內(nèi)定義的函數(shù)成員,將在第七章介紹。(2)在編譯過程中,凡內(nèi)聯(lián)函數(shù),系統(tǒng)把它的執(zhí)行代碼插入到該函數(shù)的每個調(diào)用點,從而使程序執(zhí)行過程中,每次該函數(shù)調(diào)用時不需控制轉(zhuǎn)移,但該函數(shù)代碼可能有多個拷貝出現(xiàn)在目標程序中。也就是說,把多次調(diào)用的函數(shù)說明為內(nèi)聯(lián)函數(shù),會使目標程序占用的空間加大,而運行時間得到節(jié)省。(3)為了優(yōu)化程序、提高程序的運行效率,一般把函數(shù)體短小而又頻繁調(diào)用的函數(shù)說明為內(nèi)聯(lián)函數(shù)較好。(4)利用編譯預處理的宏定義方式,也可以實現(xiàn)類似于內(nèi)聯(lián)函數(shù)的功能。不過,

42、內(nèi)聯(lián)函數(shù)的方式更為方便和可靠。例如,下面幾個內(nèi)聯(lián)函數(shù)定義可以用帶參數(shù)的宏定義方式實現(xiàn):inline int MAX (int a, int b) if (a>b) return a; return b;inline float ABS (float a) return ( a>=0)? a: 0-a; inline float PERCENT (float a, float b) return 100.0 * a / b;inline void SWAP (int a, int b) int t; t=a; a=b; b=t; return;inline bool ISODD (i

43、nt x) return (x %2 = = 1)?1: 0; 對應(yīng)的宏定義為:# define MAX (a,b) (a>b)? a: b) / 求較大者# define ABS (a) ( a >= 0 )? a: 0-a ) / 求絕對值# define PERCENT (a,b) (100.0 * a / b ) / 求百分比# define SWAP (t, a, b) int t=a; a=b; b=t; / 交換a,b 的值# define ISODD (x) (x %2 = = 1) 1: 0 ) / 判斷x 是否為奇數(shù)雖然這些帶參數(shù)的宏定義的功能與對應(yīng)的內(nèi)聯(lián)函數(shù)基

44、本一致,但仍然是有差別的,宏定義中的參數(shù)和計算結(jié)果沒有類型說明,編譯時不可能進行類型檢查,是不安全的,更無法區(qū)分賦值參數(shù)和引用參數(shù),很容易出錯。因此,C+語言的編程中,當某段計算短小而又經(jīng)常被重復時,建議采用內(nèi)聯(lián)函數(shù),少用宏定義實現(xiàn)。2、函數(shù)嵌套一個函數(shù)的函數(shù)體中包含一個或多個函數(shù)調(diào)用語句,即稱為函數(shù)嵌套。嵌套的含義是,如果函數(shù)A 要調(diào)用函數(shù)B,也就是說,函數(shù)A 的定義要依賴于函數(shù)B 的定義。因此函數(shù)B 的定義或函數(shù)B 的原型必須出現(xiàn)在函數(shù)A 的定義語句之前。為了保證返回后繼續(xù)正常運行,函數(shù)調(diào)用過程開始時需要做更多的事情:1) 建立被調(diào)用函數(shù)的棧空間;2) 保存調(diào)用函數(shù)的運行狀態(tài)和返回地址;3

45、) 傳遞參數(shù);4) 把程序控制轉(zhuǎn)交給被調(diào)用函數(shù)。3、函數(shù)的遞歸遞歸函數(shù)的設(shè)計在程序設(shè)計中占有重要的地位。函數(shù)A 在其函數(shù)體中直接包含它自己的調(diào)用語句,這種調(diào)用稱為直接遞歸調(diào)用,函數(shù)A 稱為(直接)遞歸函數(shù)。函數(shù)A 在其函數(shù)體中間接地包含對它自己的調(diào)用,例如A 調(diào)用函數(shù)B,但函數(shù)B 又調(diào)用函數(shù)A,則函數(shù)A 稱為(間接)遞歸函數(shù)。下面是一個(直接)遞歸函數(shù)的例子:float fac(int n)if (n2return 1;return fac(n1)*n;遞歸函數(shù)的實際計算過程與遞歸次序相反,例如,設(shè)n=4,計算fac(4)的遞歸次序是:fac(4)>fac(3)>fac(2)>

46、;fac(1),而實際計算過程則正好相反:fac(1)=1, fac(2)=fac(1)*2=2,fac(3)=fac(2)*3=6,fac(4)=fac(3)*4=24.在一般情況下,應(yīng)注意:(1) 無論是直接遞歸還是間接遞歸都必須保證在有限次調(diào)用之后能夠結(jié)束。例如函數(shù)fac 中的參數(shù)n 在遞歸調(diào)用中每次減1,總可達到<2 的狀態(tài)而結(jié)束。(2) 函數(shù)調(diào)用時系統(tǒng)要付出時間和空間代價,在環(huán)境條件相同的情形下,總是非遞歸程序效率較高。課題08:函數(shù)重載一、教學目標:1.了解函數(shù)重載的意義2.掌握函數(shù)重載的條件3.學會使用函數(shù)重載二、教學重點:1函數(shù)重載的條件三、教學難點:1函數(shù)重載的使用四、

47、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入(二)、講授新課函數(shù)重載實際上是函數(shù)名重載,即支持多個不同的函數(shù)采用同一名字。例如:int abs(int n)return(n0?-n:n;float abs(float f)if(f0)f-f; return f;double abs(double d)if(d0)return-d;return d;)三個函數(shù)都是求絕對值,采用同一個函數(shù)名,更符合人們的習慣(這一點在C 語言和其它語言中是不允許的。它們規(guī)定,在同一個程序塊中一個名字只允許有一種含義)。在程序中經(jīng)常出現(xiàn)這樣的情況:對若干種不同的數(shù)據(jù)類型求

48、和,雖然數(shù)據(jù)本身差別很大(例如整數(shù)求和,向量求和,矩陣求和),具體的求和操作差別也很大,但完成不同求和操作的函數(shù)卻可以取相同的名字(例如sum,add 等)。許多差別很大的打印函數(shù)可以都用名print,顯示函數(shù)可以都用display,從鍵盤或文件獲取信息都稱作get,發(fā)送稱為send,接收稱為receive 等等。函數(shù)名的重載并不是為了節(jié)省標識符(標識符的數(shù)量是足夠的),而是為了方便程序員的使用,這一點很重要。實現(xiàn)函數(shù)的重載必須滿足下列條件之一:(1)參數(shù)表中對應(yīng)的參數(shù)類型不同;(2)參數(shù)表中參數(shù)個數(shù)不同;(3)參數(shù)表中不同類型參數(shù)的次序不同。例如:void print(int); /整型vo

49、id print(point); /類point 的對象int sum(int ,int);int sum(int ,int ,int);int get(int n,float a );int get(int n,float a ,int n);在定義同名函數(shù)時應(yīng)注意:(1)返回類型不能區(qū)分函數(shù),例如:float add(int float);int add(int float); /錯誤在調(diào)用時系統(tǒng)無法區(qū)分選擇對應(yīng)函數(shù)。(2)采用引用參數(shù)不能區(qū)分函數(shù),例如:void print(double);void print(double); /錯誤void print(const double);

50、/錯誤(3)有些派生基本類型的參數(shù)雖然可以區(qū)分同名函數(shù),但在使用中必須注意,例如:int abs(int);unsigned int abs(unsigned int);對這種函數(shù)的調(diào)用必須注意:int a=3,b;unsigned int c=5,d;調(diào)用語句babs(a);dabs(c);babs(-3);babs(3);dabs(3*a);其中abs(3)因?qū)崊? 既可以是int 型,也可以unsigned int 型,故這里可能出現(xiàn)二義性。(4)包含可缺省參數(shù)時,可能造成二義性,例如:int sum(int a,int b,int c0);int sum(int a,int b);程序

51、設(shè)計中應(yīng)避免這種情形出現(xiàn)。上面的二義性的情形是指系統(tǒng)面對某一函數(shù)調(diào)用語句,有兩個或兩個以上同名函數(shù)與之匹配;而另一種情況下,由于數(shù)據(jù)類型之間的復雜轉(zhuǎn)換關(guān)系也可能造成找不到與之匹配的函數(shù)定義。遇到無準確匹配的函數(shù)定義時,C+系統(tǒng)并不馬上按出錯處理,它按下面的方式處理:(1)通過數(shù)組名與指針變量,函數(shù)名與函數(shù)指針,某類型變量與const 常量之間的轉(zhuǎn)換,再查是否可實現(xiàn)匹配;(2)把實參類型從低到高(按字長由短到長)進行基本類型及其派生類型的轉(zhuǎn)換,再檢查是否可匹配;(3)查有無已定義的可變個數(shù)參數(shù)的函數(shù),如有把它歸為該函數(shù)。在進行上述嘗試性的處理之后可能出現(xiàn)仍無匹配或匹配不唯一的情況,這時可能輸出出

52、錯信息或錯誤地運行。課題09: 指針一、教學目標:1.了解指針類型基本概念2.掌握指針類型變量的定義3.掌握指針類型的基本運算二、教學重點:1選擇排序算法2指針變量的定義三、教學難點:1指針變量的基本運算四、課時安排:2節(jié)課五、教具準備:多媒體教室六、教學方法:講授七、教學過程:(一)、復習導入在前面的學習中,我們曾引入數(shù)組類型,它與本章介紹的指針和引用類型是C+語言提供的三種導出類型,正確靈活地使用數(shù)組,指針和引用類型,是設(shè)計高質(zhì)量的C+程序所必經(jīng)掌握的技術(shù)。結(jié)構(gòu)在只有數(shù)據(jù)成員時,也是一種導出數(shù)據(jù)類型,不過,C+語言允許用戶為結(jié)構(gòu)設(shè)計函數(shù)成員,實際上是用戶為該結(jié)構(gòu)類型設(shè)計的運算,因此,結(jié)構(gòu)也

53、是用戶定義的類或類型。C+程序中所處理的數(shù)據(jù)主要以變量(和對象)的形式出現(xiàn)。每個變量有兩個最主要的屬性,那就是變量的內(nèi)容和地址。下面我們將舉例說明指針的概念及應(yīng)用。(二)、講授新課1、選擇排序算法首先我們來看看一個選擇排序算法。排序的任務(wù)是把已經(jīng)存在一個數(shù)組里的n 個數(shù)按從大到小的順序排列,可以采用多種不同的方法實現(xiàn),選擇排序算法的思路簡單,容易理解,每次總是從無序的序列中選出最大者,交換到序列的左端,于是,無序的序列越來越短,經(jīng)過n-1 步,達到排序的目的。演示工程SelectSort。主函數(shù)做了三件事:1)為長度為n 的數(shù)組listn輸入n 個隨機數(shù),作為排序算法處理的對象,程序中取n=20,是為了顯示輸出結(jié)果方便,也可取n=1000 或更大,實際輸入的值是整數(shù)也是為了顯示清楚。利用庫函數(shù)rand()產(chǎn)生偽隨機數(shù)形成無序數(shù)組,由用戶輸入一個隨機數(shù)(例如6523)作為“seed”可使無序數(shù)組的20 個數(shù)的隨機性較好。2)調(diào)用函

溫馨提示

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

評論

0/150

提交評論