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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《C++程序設計》教案

海南軟件職業(yè)技術學院

HainanSoftwareProfessionInstitute

(2006-2007學年度第一學期)

教師姓名:季文天____________

系部:軟件工程系

授課專業(yè):軟件技術

授課班級:05軟件技術3班

海南收件取業(yè)技術學院《C++程序設計》教案

目錄

課題01:VisualC++6.0開發(fā)環(huán)境..................................................2

課題02:C++數(shù)據(jù)類型、表達式、語句.............................................5

課題03:數(shù)組...................................................................7

課題04:結構類型..............................................................11

課題05:函數(shù)...................................................................13

課題06:函數(shù)參數(shù)...............................................................16

課題07:內聯(lián)函數(shù)與遞歸函數(shù).....................................................19

課題08:函數(shù)重載..............................................................21

課題09:指針..................................................................23

課題10:指針與數(shù)組、字符串指針...............................................26

課題11:指針與函數(shù)............................................................28

課題12:指針與動態(tài)分配內存...................................................31

課題13:引用..................................................................33

課題14:類與對象..............................................................36

課題15:類的靜態(tài)成員及常量成員...............................................39

課題16:友元..................................................................43

課題17:運算符重載...........................................................46

課題18:繼承與派生...........................................................49

課題19:派生關系中的二義性處理...............................................53

課題20:虛基類................................................................56

課題21:多態(tài)性與虛函數(shù)........................................................59

課題22:模板..................................................................62

課題23:文件、流及C++的流類庫...............................................66

課題24:插入與提取運算符的重載...............................................69

課題25:磁盤文件I/O...........................................................70

海南收件職業(yè)技術學院《C++程序設計》教案

課題01:VisualC++6.0開發(fā)環(huán)境

一、教學目標:

1.掌握VisualC++6。開發(fā)工具的選單、工具欄、項目、工作區(qū)等概念

2.掌握使用VC編寫控制臺應用程序

3.掌握使用VC進行程序調試

二、教學重點:

1、掌握VisualC++6.0開發(fā)工具的選單、工具欄、項目、工作區(qū)等概念

三、教學難點:

1、使用VC編寫控制臺應用程序。

2、使用VC進行程序調試

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

七、教學過程:

(一)、復習導入

VisualC++是Microsoft公司推出的目前使用極為廣泛的基于Windows平臺的

可視化開發(fā)環(huán)境。VisualC++6.0是在以往版本不斷更新的基礎上形成的,由于

其功能強大、靈活性好、完全可擴展以及具有強有力的Internet支持,在各種C++

語言開發(fā)工具中脫穎而出,成為目前最為流行的C++語言集成開發(fā)環(huán)境。

(二)、講授新課

1、開發(fā)環(huán)境概述

遜:板書或幻燈片演示下圖

2

海南收件職業(yè)技術學院《C++程序設計》教案

顧:VisualC++6。開發(fā)環(huán)境包括:

★標題欄

★工具欄

★選單

★項目工作區(qū)窗口

★輸出窗口

★狀態(tài)欄

★文檔窗

依次介紹各項功能,詳細介紹選單、工具欄、項目工作區(qū)。

2、簡單的控制臺應用程序

使用Appwinzard創(chuàng)建一個控制臺應用程序,使學生理解“工程”概念,熟

悉項目的程序框架,以及如何添加程序代碼、編譯、運行。

以下面程序為例,講述如何建立控制臺應用程序:

【例Ex_Hello]

#include<stdafx.h>

intmain(intargc,char*argv|])

(

cout?vHelloworld”;

return0;

【運行結果工

3

海南收件職業(yè)技術學院《C++程序設計》教案

京*D:\Teaching\VC\Ix_Hello\Debug\Ix_Hello.exe*,1□1x|

HelloworldPressanykeytocontinue.

【例Ex_Hello]利用投影演示P18例Ex_HellOo

3、程序調成

在軟件開發(fā)過程中,大部分的工作往往體現(xiàn)在程序的調試上。調試一般按這

樣的步驟進行:

“修正語法錯誤一設置斷點一啟用調試器一控制程序運行一查看和修改變

量的值”

★修正語法錯誤

調試最初的任務主要是修正一些語法錯誤,比如:

■未定義或不合法的標識符

■數(shù)據(jù)類型或參數(shù)類型及個數(shù)不匹配。

★設置斷點

用C++調試的斷點可以有以下類型:

■為之斷點

■數(shù)據(jù)斷點

■條件斷點

★啟用調試器

VisualC++6.0創(chuàng)建的項目,系統(tǒng)會自動為項目創(chuàng)建Win32Debug版本的

默認配置,選擇"build”選單一“startdebug”一“Go"、"stepinto"、“Runto

cursor”命令,就可以啟動調試器了。

★控制程序運行

可以通過"stepinto,stepover,stepout,runtocursor”控制程序運行。

★查看和修改變量的值

在程序調試的時候VC會自動顯示"Watch"和“Variables”兩個調試窗口,

通過這兩個窗口可以查看或修改當前運行程序的變量的值。

4

海南收件職業(yè)技術學院《C++程序設計》教案

課題02:C++數(shù)據(jù)類型、表達式、語句

一、教學目標:

1.掌握C++程序結構、基本組成

2.掌握C++的基本數(shù)據(jù)類型、基本輸入/輸出

3.掌握C++運算符、表達式

4.掌握C++基本語句

二、教學重點:

LC++程序結構、基本組成

2.C++基本數(shù)據(jù)類型、輸入輸出

三、教學難點:

LC++運算符、表達式

2.C++基本語句

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

七、教學過程:

(一')、復習導入

C++是在20世紀80年代初期由貝爾實驗室設計的…種在C語言的基礎上增

加了面向對象支持的語言,她是目前應用最為廣泛的編程語言。今天我們來學習

他的基本結構、數(shù)據(jù)類型、運算符和表達式、基本語句。

(二)、講授新課

1、C++程序結構

一個C++程序往往由預處理命令、語句、函數(shù)、變量和對象、輸入與輸出以

及注釋幾個部分組成。

★預處理命令

包括:宏定義命令、文件包含命令和條件編譯命令

★語句

語句是組成程序的基本單元

5

海南收件職業(yè)技術學院《C++程序設計》教案

★函數(shù)

一個C++程序是由若干個函數(shù)組成。一個程序中有且僅有一個主函數(shù)

main.

★變量和對象

C++是面向對象的語言,所以在C++中相比C語言多了對象,她是“類”

的實例

★輸入輸出

程序中總是少不了輸入和輸出語句。

★注釋

注釋可以提高程序的可讀性、幫助程序員理解,在程序運行中不執(zhí)行。

在編寫C++程序時,還要注意程序的書寫風格,要注意縮進和注釋。在編寫

程序時,標識符應該遵循以下原則:

★性

★性

★性

2、基本數(shù)據(jù)類型

C++數(shù)據(jù)類型分為基本數(shù)據(jù)類型、派生類型以及復合類型3類?;緮?shù)據(jù)類

型包括:

★char

★int

★float

★double

以及上述類型的變種,包括

★short

★long

★signed

★unsigned

★void

P29表2.1列出了C++的基本數(shù)據(jù)類型

根據(jù)數(shù)據(jù)在程序中的可變性,我們將數(shù)據(jù)分為:

★常量

■整型常量

■浮點型常量

■字符常量

■字符串常量

■符號常量

★變量

■變量定義

■變量的初始化

要注意一個未初始化的變量不是沒有數(shù)值,而是取決于變量在系統(tǒng)中的存儲

形式,她可能是系統(tǒng)的默認值或無效值。

3、基本輸入、輸出

C++中是通過標準的輸入流cin和標準輸出流cout來實現(xiàn)數(shù)據(jù)的輸入輸出。

6

海南收件取業(yè)技術學院《C++程序設計》教案

【舉例:Ex_CoutEnd]

[舉例:Ex_Algorism]

4、運算符而表達式

C++用來記述運算的符號稱為運算符,按照操作數(shù)的個數(shù)可以分為:

■單目運算符

■雙目運算符

■三目運算符

根據(jù)其功能可以分為:

■算術運算符

■賦值運算符

■關系運算符

■邏輯運算符

■位運算符

變量、常量通過一個或多個運算符組合起來就構成了表達式,比如有關系運

算符構成的表達式成為關系表達式。

5、基本語句

C++提供了如表達式語句、復合語句、選擇語句和循環(huán)語句等,滿足了結構

化程序設計所需要的3中基本結構。

■選擇語句

■條件語句ifelse

■開關語句switch

■循環(huán)語句

■while

■do...while

■for

以上基本語句和C語言保持一致。

課題03:數(shù)組

一、教學目標:

L了解構造類型的意義

2.了解數(shù)組的概念

3.掌握一維數(shù)組、多維數(shù)組的定義

二、教學重點:

1.一維數(shù)組的定義

2.數(shù)組的基本操作

三、教學難點:

1.多維數(shù)組將維處理過程及多維數(shù)組的存儲

2.字符串數(shù)組的使用

海南收件取業(yè)技術學院《C++程序設計》教案

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

七、教學過程:

(7、復習導入

在計算機所處理的數(shù)據(jù)中,最常見的,也是最需要由計算機高速處理的數(shù)據(jù)

是成批出現(xiàn)的同一類型的數(shù)據(jù),C++語言中把這類數(shù)據(jù)稱為數(shù)組。例如:

?監(jiān)測系統(tǒng)在一段時間內獲得的檢測、采樣值,可能是int型或float型數(shù)

據(jù)的數(shù)組;

?一個管理系統(tǒng)的數(shù)據(jù)庫,可能是一系列結構類型(記錄)數(shù)據(jù)的序列;

?一幅電視圖像,可能是其每個像素的顏色及灰度值(整型數(shù))的二維陣列。

任何一種類型的一批數(shù)據(jù),都可以組成數(shù)組,例如int型,float型,char型數(shù)

據(jù)可以組成數(shù)組;這些基本類型的派生類型(如long型,double型,unsignedchar

型)的數(shù)據(jù),枚舉、結構、聯(lián)合類型的數(shù)據(jù),以至由用戶或系統(tǒng)定義的類(類型)

的對象,都可以組成數(shù)組。

(二)、講授新課

1、一維數(shù)組

由n個同一類型數(shù)據(jù)組成的一維序列,構成一維數(shù)組,一維數(shù)組的下標為0,

n-1o

1.一維數(shù)組的說明

任何一種已知類型數(shù)據(jù)都可說明為數(shù)組,數(shù)組說明的格式為:

<類型名><數(shù)組名>[〈元素數(shù)>]={<初值表>};

類型名:可以是基本類型名,基本類型的派生類型名,類名,枚舉類型名,

結構,聯(lián)合類型名(也可以是枚舉、結構聯(lián)合的類型說明)。關于指針數(shù)組將在下節(jié)說

明。還有數(shù)組類型的數(shù)組就是多維數(shù)組了,也將在下面介紹。

數(shù)組名:標識符,數(shù)組名有兩個附加作用:

(1)是表示數(shù)組元素的下標變量。如array[2]表示數(shù)組的第三個元素。

(2)它還是一個指向數(shù)組的首元指針。

元素數(shù):一個正整數(shù),指出數(shù)組的元素個數(shù),或數(shù)組的大?。╯ize)o元素數(shù)要用方括

號“口”括起來。方括號口不可缺省,元素數(shù)則有時可缺省,這時必須賦初值,系

統(tǒng)按所賦的初值個數(shù)確定數(shù)組的大小。

初值表:可缺省。是由花括號{,}括起來且用逗號','分開的初始化常

8

海南收件取業(yè)技術學院《C++程序設計》教案

量值。例如:

intlist[100LA[10][10],B[]={4,3,2};

charch[26];

complexcom[4]={(3.2,4.7),(0.0,0.0));

其中,數(shù)組list[100]未賦初值。

數(shù)組A[10][10]為一個二維數(shù)組,未賦初值。

數(shù)組B□已賦初值,元素數(shù)為3。

數(shù)組com[4]是用戶定義的complex類型的數(shù)組,數(shù)組有4個元素,其中前

兩個元素已賦初值,初值分別為(3.2,4.7),(0.0,0.0)o

2.數(shù)組的操作——下標變量

C++語言未提供對于數(shù)組整體進行操作的運算符和運算。對于數(shù)組的操作是

通過對于其元素,即下標變量進行的。下標變量的格式為:

(數(shù)組名>[<下標>]

下標:整數(shù),或整型表達式,其取值范圍為0?11-1,昨數(shù)組元素總數(shù),例

如:

intA[4];

共有四個下標變量:A[0],A[l],A[2],A[3]?

對于下標變量可進行下列操作。

(1)賦值??梢匀N方式進行:

①初始化:

intA[4]={1,2,3};

相當于一次為A[0],AE1],A[2]賦值為1,2,3。

②賦值語句:

A[3]=4*A[l];

相當于把4*2=8賦值A[3]。

③輸入語句:

cin>>A[0];

for(inti=0;i<4;i++)cin>>A[i];

后者可通過鍵盤操作,為數(shù)組的四個元素依次賦值。

(2)?般運算。

下標變量可與同一類型的一般變量一樣參加它所允許的運算。如:

A[0]+=A[2]++;

cout?A[0]<<,z,Z<<AL1]*A[2];

維箋

p--vj"o

下標也可以是一個表達式,如:

intA[4]={1,2,3,4};

A[3]=A[A[2]-A[1]]*4;

下標表達式應注意其值應保持在0?nT范圍之內。

2、多維數(shù)組

若干同一類型的數(shù)據(jù)m歹如行的矩陣,則可稱為二維數(shù)組,二維數(shù)組亦可視為一維

數(shù)組的數(shù)組。

9

海南收件取業(yè)技術學院《C++程序設計》教案

intA[m][n];

說明了一個二維數(shù)組,它有mXn個元素,它也可以視為由n個一維數(shù)組intA[m]

組成的(一維)數(shù)組。類似地,還可以說明三維,四維數(shù)組,二維以上的數(shù)組統(tǒng)

稱為多維數(shù)組。

L說明和初始化

多維數(shù)組的說明(以二維為例):

(類型名X數(shù)組名〉K行數(shù)>][<列數(shù)>]

類型名:同前節(jié)說明。

數(shù)組名:同前節(jié)說明。

行數(shù):正整數(shù)。

列數(shù):正整數(shù)。

例如:

charch[2][3];

該二維數(shù)組共有2行3歹U,元素個數(shù)為2*3=6。

在二維數(shù)組中,為數(shù)組賦初值的方式有:

inta[2][3]={{1,2,3},{4,5,6}};

亦可寫為:

inta[2][3]={1,2,3,4,5,6};

二者效果是一樣的。系統(tǒng)將按逐行的次序順序為各元素賦值。其次序為:

a[0][0],a[0]Ll],a[0][2],

⑴,a[l]⑵

對于三維以上的高維數(shù)組,其賦值方法是一樣的。

2.二維數(shù)組的操作

對于二維數(shù)組的操作,同樣是通過對其元素即下標變量的操作來進行的。

操作中應注意:

(1)注意下標表達式的取值范圍:

charA[m][n];

則下標變量中i的值應在0?m-1之間,j的值應在0?n-1之間。

(2)當只有一個下標時:

A[i]<0<=i<=n-1)

表示的是一個一維數(shù)組,其元素個數(shù)為n,這些元素可用下標變量:

A[i][0],A[i]m,-.ALi][n-1]

來表示。

(3)更高維的數(shù)組,其定義和操作類似。

3、數(shù)組與字符串

從表面上看,一個字符串就是一個字符數(shù)組,但在C++語言中,二者并不完全相同,

讀者在涉及到字符串處理時,必須注意。字符串是一個以串尾符‘\0'結尾的字符類型

數(shù)組。從下面的例子可看出其區(qū)別:

charstringl[7]="China”;

charstring2[]="China”;

charstring3[7]={'c','h','i','n','a');

charstring4[7]={'c','h','i','n','a,'\0'};

這說明了四個字符型數(shù)組,它們是互不相同的。

10

海南收件取業(yè)技術學院《C++程序設計》教案

課題04:結構類型

一、教學目標:

L了解結構類型的意義

2.掌握結構類型的定義及應用方法

3.掌握結構數(shù)組的使用方法

二、教學重點:

1.結構類型的定義

2.結構類型使用方法

三、教學難點:

1.結構數(shù)組的使用方法

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

七、教學過程:

(一)、復習導入

實際應用中往往需要把若干種不同類型的數(shù)據(jù)組合為一個導出類型,這就是

結構類型。數(shù)組是把若干相同類型的數(shù)據(jù)放在一起,結構則是把若干不同的數(shù)據(jù)

放在一起。例如,一個公司雇員的數(shù)據(jù)可能包括:

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

那么我們如何處理這樣的數(shù)據(jù)呢?下面就讓我們來學習一種新的構造數(shù)據(jù)類型

—結構體。

(二)、講授新課

對公司雇員數(shù)據(jù)進行處理或檢索時,把它們組成結構類型會更方便:

structEmployee{

11

海南收件取業(yè)技術學院《C++程序設計》教案

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

};

C++語言中的結構是作為類似于類的概念處理的,這一點將在以后學習中說明,在本章

結構(以及聯(lián)合)類型僅作為一種構造數(shù)據(jù)類型。

1、結構類型與結構變量說明

結構類型說明的格式為:

struct〈類型名》{〈成員表>};

類型名:標識符。

成員表:〈類型>〈成員1>;<類型>〈成員〈類型>〈成員n>;

結構類型的變量說明的格式為:

[struct](結構類型名〉〈變量名表》;

變量說明中的關鍵字struct可以省略(C語言中不可),變量名表與一般

變量說明一樣,其賦初始值的方法可從下面的例子中了解:

structEmployee{

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

);//結構類型Employee的定義

structEmployeegyl,gy2;//變量gyl,gy2的說明

Employeegy3,gy4={''JohnSmith,z,male,2107.5,02223501234};

//變量gy3,gy4(賦初值)的說明

結構類型及其變量的說明也可放在一起:

structEmployee{

charname[20];

enum{male,female}sex;

floatsalary;

charphone[11];

}gyl,gy2;

2、結構變量的引用和賦值

一個結構變量由若干分量組成,對結構分量的存取由圓點運算符實現(xiàn),例

如,在上例中,雇員gyl的姓名可表示為,其電話號碼可表示為

gyl.phoneo因此,為結構變量賦值,除了在變量說明中賦初值(如為gy4賦初

值)的方法外,還可以用賦值語句或輸入語句為結構分量賦值的方法:

=''TomGreen";

gy3.sex=male;

cin>>gy3.salary;

cin>>gy3.phone;

無論采用哪種方法為結構分量賦值,都必須保證類型一致。

C++語言還允許直接對結構變量賦值,下面的賦值語句也是允許的:

12

海南收件取業(yè)技術學院《C++程序設計》教案

gyl=gy4;

gy3=gy4;

一般,數(shù)組變量不能這樣直接賦值。

3、結構數(shù)組

結構類型的數(shù)據(jù)也可以組成數(shù)組,稱為結構數(shù)組。結構數(shù)組在許多實際應用問題

中的采用非常普遍,例如,通訊錄,學生成績單,商業(yè)銷售記錄,人事檔案,資

料登記表等等。下面的結構數(shù)組是一個公司的雇員檔案:

structEmployee{

charname[20];

enum(male,female}sex;

floatsalary;

charphone[11];

);

Employeeefile[100];

數(shù)組的每?個分量是一個雇員的檔案數(shù)據(jù)。

課題05:函數(shù)

一、教學目標:

1.了解函數(shù)的作用、意義

2.掌握函數(shù)的說明、調用、返回

3.掌握函數(shù)的使用方法

二、教學重點:

1.函數(shù)的說明

2.函數(shù)的調用

三、教學難點:

1.函數(shù)返回

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

七、教學過程:

13

海南收件取業(yè)技術學院《C++程序設計》教案

(一)、復習導入

函數(shù)概念是C++語言中最重要的概念之一,函數(shù)設計是程序設計的主要部分

或實質部分。函數(shù)在C++程序設計中的意義體現(xiàn)在四個方面。

(1)從歷史上說,函數(shù)的思想來源于子程序,(如BASIC語言中的子程序),

把程序中反復出現(xiàn)的相同或相近的程序改寫成子程序,可以大大縮短程序的長

度。函數(shù)實際上是參數(shù)化的子程序。

(2)從結構化程序設計(SP)的觀點來看,函數(shù)絕不僅僅是為了縮短程序長度,

更重要的是通過函數(shù)設計,可以把整個程序要完成的整體的復雜的計算任務,分

解為一個個較小的,相對簡單的子任務。這種模塊化的程序易設計,易閱讀,易

調試,易維護,較少出錯。

(3)從運算的角度說,函數(shù)就是C++語言提供的由用戶定義的運算。運算符是

系統(tǒng)提供的運算,而函數(shù)是由用戶自己定義的運算。

(4)作為面向對象程序設計(OOP)語言的C++,以類為核心,類由數(shù)據(jù)和方

法組成,方法就是對數(shù)據(jù)的運算和處理,亦即類的函數(shù)成員。故函數(shù)設計同樣是

OOP的重要組成部分。

(二)、講授新課

1、函數(shù)的說明

C++程序允許兩種函數(shù)說明語句的形式,我們把它們分別稱為函數(shù)原型(或

函數(shù)聲明)和函數(shù)定義。

[1].函數(shù)原型

函數(shù)原型(亦稱函數(shù)聲明)用來指出函數(shù)的名稱,類型和參數(shù),其格式為:

[〈屬性說明〉]〈類型〉〈函數(shù)名〉(〈參數(shù)表〉);

例如:

intadd(inta,intb);

inlinevoidswap(float&s,float&t);

voidprint(char*);

屬傕舔明:可缺省,一般可以是下面的關鍵字之一:inline,static,virtual,

friend等。

inline表示該函數(shù)為內聯(lián)函數(shù);

static表示該函數(shù)為靜態(tài)函數(shù);

virtual表示該函數(shù)為虛函數(shù);

friend表示該函數(shù)為某類(class)的友元函數(shù)。

其含義的細節(jié)在后面有關章節(jié)介紹。

旗型:指函數(shù)的返回類型。C++語言規(guī)定除了特別情形(main()函數(shù)和類的構造函數(shù),

析構函數(shù))之外,所有函數(shù)都必須在說明中指出返回類型。一個函數(shù)可能有多個結果,

不一定都用返回值的方式輸出(還可通過全局變量,引用參數(shù)和指針等方式傳出)計算

結果,但函數(shù)調用作為一個表達式,該表達式的值則只能是函數(shù)的返回值。

上做名:一個標識符。

14

海南收件取業(yè)技術學院《C++程序設計》教案

叁敢忐:它可能為空,void或〈類型〉〈參數(shù)名〉,〈類型〉〈參數(shù)名〉…的

形式。

例如:main()

print(void)

cuberoot(floatx)

add(inta,intb)

其中,函數(shù)原型中的參數(shù)表可忽略參數(shù)名,如:

iniadd(int,int)

voidswap(float&,float&)

它們與函數(shù)原型intadd(inta,intb);voidswap(float&s,float&t);是等價

的,事實上在編譯時,函數(shù)原型中的參數(shù)名是被忽略的,后者的參數(shù)表中的符

號'&'表示該參數(shù)為引用型參數(shù),用以區(qū)別于一般的賦值型參數(shù),其用法在下面

介紹。

[2].S做定義

函數(shù)定義與函數(shù)原型的主要區(qū)別是它還包括函數(shù)體,其格式為:

[〈屬性說明〉]〈類型〉〈函數(shù)名〉(〈參數(shù)表〉)〈函數(shù)體〉

屬性說明,返回類型,函數(shù)名與函數(shù)原型一致,參數(shù)表中不可省略參數(shù)名。

晶政體:由{和}括起來的復合語句即程序塊。

program5_1的最后12行就是一個函數(shù)定義。從函數(shù)說明語句的介紹,我們可以看到程

序中各種語句的分類(說明語句,表達式語句,控制語句和復合語句)并不是■■個簡單

的劃分概念。函數(shù)定義本身是一種說明語句,但其函數(shù)體則是一個復合語句。而在函數(shù)

體內部又可能包含說明語句,表達式語句,控制語句和復合語句。

總之,這種分類和區(qū)分是明確的,但它們之間又有互相包含的關系。

2、函數(shù)調用

函數(shù)調用是已定義函數(shù)的一次實際運行,(與某類型的一個變量和后文中某類

的一個對象類似),函數(shù)調用是函數(shù)定義的一個“實例”。

函數(shù)說明中的參數(shù)稱為移式參敬(形參),函數(shù)調用中的參數(shù)稱為實際參政(實參),

函數(shù)調用一般出現(xiàn)在表達式中或獨立形成一個函數(shù)調用語句,例如:

xr=cuberoot(-q/2+a)+cuberoot(-q/2-a);

swap(a,b);

函數(shù)調用的兩要素是函數(shù)名和實參表:

〈函數(shù)名>(<實參表))

實參表中的參數(shù)的類型、個數(shù)、順序必須與函數(shù)說明的參數(shù)表(形參表)相一致。

賦值型的實參可以是一個表達式。在上節(jié)program5_l的main。中兩次出現(xiàn)函數(shù)

cuberoot(x)調用,其具體的調用實施過程如下:

(1)根據(jù)調用語句中的函數(shù)名(cuberoot)在整個程序中搜索同名函數(shù)定義;

(2)對實參數(shù)的參數(shù)個數(shù),類型,順序進行核對;判定是否與函數(shù)定義中的形參表對應

一致,在上例中只有一個浮點型參數(shù);

(3)根據(jù)參數(shù)的類型(值參數(shù)或引用參數(shù))進行值參數(shù)的值傳遞或引用參數(shù)的換名,在

上例中即是要把實參表達式的值計算出來賦給形參x;

(4)運行函數(shù)體代碼;

(5)返回調用點,并返回所要求的函數(shù)值,即返回計算結果croot的值。

15

海南收件取業(yè)技術學院《C++程序設計》教案

3、函數(shù)的返回

函數(shù)的返回完成兩項任務:

(1)把運行控制從函數(shù)體返回到函數(shù)調用點。在上例中就是在計算cuberoot

(-q/2+a)之后再返回到語句xr=cuberoot()+cuberoot()的計算過程中。

(2)根據(jù)返回值要求,返回所需要的數(shù)據(jù)值。

函數(shù)的返回值有下面幾種情形:

1.饞?void],

如果函數(shù)無值返回,應說明為void類型。例如:

voidprint(){cout?"HelloWorld!"};

voidshow(){cout?,,WonderfulC++!"};

函數(shù)僅需完成打印和顯示工作,不需返回任何數(shù)據(jù),這類函數(shù)調用一般形成一

個函數(shù)調用語句。

未作類型說明的函數(shù),系統(tǒng)認為是int類型函數(shù),應返回一整型值。

2.但?故缶費/

最常見的函數(shù)是返回一個數(shù)值的函數(shù)。例如:

intadd(inta,intb);

floatcuberoot(floatx);

這類函數(shù)的調用表達式可以出現(xiàn)在表達式語句中。

當函數(shù)要返回的數(shù)值不止一個時,情況比較復雜,一般它可以以結構或類的形式,也可

以以結構,數(shù)組或對象指針類型方式實現(xiàn),這樣的實例在后面的章節(jié)可以見到。

3.但國幻用費"

值返回方式是C和Pascal語言中唯一的返回方式,C++語言提供的引用返回概

念是其特有的一種很強的功能,當函數(shù)定義中把該函數(shù)說明為某類型的引用類型

時,該函數(shù)調用后返回的不單是值,而是包含返回值的變量(或對象)。由于返

回引用與引用類型有關,所以這樣的實例將在下節(jié)介紹。

課題06:函數(shù)參數(shù)

一、教學目標:

1.進一步了解函數(shù)的應用

2.了解函數(shù)參數(shù)

3.了解函數(shù)的值調用和引用調用

二、教學重點:

1.函數(shù)參數(shù)形式

16

海南收件取業(yè)技術學院《C++程序設計》教案

三、教學難點:

1.函數(shù)值調用和引用調用

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

七、教學過程:

(一)、復習導入

函數(shù)的參數(shù)的設置和使用是函數(shù)設計中非常重要的部分。

(二)、講授新課

1、函數(shù)參數(shù)

C++語言允許函數(shù)無參,有一個或多個參數(shù),而且還支持不定個數(shù)參數(shù)的

函數(shù)。

(1)無參函數(shù):其函數(shù)說明為下列形式:

voidprint(void);//輸出指定的數(shù)據(jù)

intgetx();//輸出變量x的值

用void或空表示無參。

(2)一個或多個參數(shù):

多數(shù)函數(shù)有一個或多個確定的個數(shù)、確定的類型和順序的參數(shù),例如:

voidsort(intn,char*array){...};〃對n元整形數(shù)組array

〃進行排序

floatmax(floata,floatb,floatc){...};

/*求三個實數(shù)a,b,c中最大者。*/

等等。定義中應注意參數(shù)表的組成。因為在C++語言中,不同的函數(shù)是根據(jù)函

數(shù)名和參數(shù)表二者來區(qū)分的,只有二者完全一致才是同一函數(shù)。

(3)不定個數(shù)參數(shù):

有些應用問題中參數(shù)個數(shù)是變化的。例如設計一個電話計費函數(shù),為了計

算通話費,不同的通話類型(如市話,長途,數(shù)據(jù)與通訊,BP機等)有不同數(shù)

目的參數(shù)。

處理參數(shù)個數(shù)不定的情形,可有不同的途徑。例如:

voidsort(intn,float*a);

這個函數(shù)可對n長的浮點數(shù)組進行排序,n是變化的;由于2是數(shù)組的首

元指針,因此這個函數(shù)實際上是可以進行對任意多個浮點數(shù)排序的處理。

C++語言有的版本還提供一些庫函數(shù),支持處理形如:

voidabc(inti,...);

17

海南收件取業(yè)技術學院《C++程序設計》教案

的不定參數(shù)函數(shù)。

C++語言,允許參數(shù)表中包含無名參數(shù),主要是為了區(qū)分函數(shù),例如:

intf(inta,intb){returna+b*b;}

intf(inta,intb,int){returna*a+b;}

兩個不同的函數(shù)同名,但由于第二個函數(shù)包含一無名參數(shù),使得在調用時能夠

被區(qū)分,f(x,y)是第一個函數(shù)的調用,f(x,y,0)是第二個函數(shù)的調用。

C++程序還允許為函數(shù)定義可缺省參數(shù),這種函數(shù)調用時具有靈活性,

如:

intsqrsum(inta,intb,intc=0){

returna*a+b*b+c*c;

)

其中參數(shù)c為可缺省參數(shù),下面的調用方式都是合法的(x,y,z為int型變量):

sqrsum(x,y,z)

sqrsum(x+y,x—y)

sqrsum(x,y)

參數(shù)表中可有任意多個參數(shù)指定為可缺省參數(shù),但所有可缺省參數(shù)必須列

后。在調用該函數(shù)時一,一般不允許部分缺省,即要么省去全部缺省參數(shù),要么

一個也不省。

2、函數(shù)值調用和引用調用

C++語言在進行函數(shù)調用時,對參數(shù)的處理有兩種方式,賦值型和引用型,

即值調用方式和引用調用方式。前者是普通的形式,在C語言中只有這種方式;

C++語言中增加了引用調用形式,這種形式與pascal語言中的變量參數(shù)調用方

式相似。

1.破缶翎射方式

在執(zhí)行函數(shù)調用時,在檢查函數(shù)名及參數(shù)表之后,首先為值參數(shù)分配內存,

然后計算各對應的實參表達式,并把計算的值賦給剛剛創(chuàng)建的參數(shù)變量,進而

開始函數(shù)體的運行。

威缶超叁:在函數(shù)定義的參數(shù)中,除了被說明為引用(&)的參數(shù)之外,

其余所有類型的形參都屬于賦值形參。

凡是賦值形參,在函數(shù)的每次調用時,都必須為每一個賦值形參創(chuàng)建一個

新的參數(shù)變量。

窕參忐化式:另一方面,函數(shù)調用語句中,與賦值形參相對應的實參可以

是指定類型的常量、變量或表達式。在執(zhí)行函數(shù)調用時應把該表達式的值計算

出來,作為初值賦給剛剛為賦值形參創(chuàng)建的參數(shù)變量。這是賦值調用方式名稱

的由來。

2.引用側用方式

幻用移叁:函數(shù)定義的參數(shù)表中,名字前加上符號&的參數(shù)為引用形參。

例如:

voidswap(int&a,int&b){

18

海南軟件取業(yè)技術學院《C++程序段計》教案

inttemp=a;

a=b;

b=temp;

)

形參a,b為引用形參,這時其函數(shù)原型可寫為:

voidswap(int&,int&);

引用形參在調用過程中的參數(shù)傳遞機制不同于賦值形參。其要點是:

(1)函數(shù)的調用語句中對應于引用形參的實參必須是同一類型的變量,非

變量的表達式則不允許。

(2)參數(shù)傳遞的內容不是實參的值,而是地址,其實際的效果是令對應的

引用形參在調用過程中,作為?個變量名指向作為實參的這個變量,與賦值形

參的不同在這里體現(xiàn)出來,在引用調用過程中并不創(chuàng)建新的參數(shù)變量!

(3)在函數(shù)體程序塊的運行中,引用形參的每次出現(xiàn),由于它現(xiàn)在已經(jīng)是

指向實參變量,因此相當于全用實參變量所代替。即起到了所謂的“換名”的

作用。

(4)在函數(shù)體程序運行結束,控制轉回調用點時,該引用形參與實參變量

的對應關系也就終止了。但是在調用過程中對于這個實參變量的所有處理和操

作的結果,卻保留下來。這一點也是區(qū)別于賦值調用的。

課題07:內聯(lián)函數(shù)與遞歸函數(shù)

一、教學目標:

1.進一步掌握函數(shù)的應用

2.了解內聯(lián)函數(shù)

3.掌握遞歸函數(shù)的使用

二、教學重點:

1.函數(shù)嵌套

2.內聯(lián)函數(shù)

三、教學難點:

1.函數(shù)的遞歸調用

四、課時安排:

2節(jié)課

五、教具準備:

多媒體教室

六、教學方法:

講授

19

海南收件取業(yè)技術學院《C++程序設計》教案

七、教學過程:

(一)、復習導入

(二)、講授新課

1、內聯(lián)函數(shù)

內聯(lián)(inline)函數(shù)的設置是C++不同于C的特征之、

(1)在C++程序中符合下列條件的函數(shù):

①函數(shù)說明前冠以“inline”關鍵字的函數(shù);

②類內定義的函數(shù)成員,將在第七章介紹。

(2)在編譯過程中,凡內聯(lián)函數(shù),系統(tǒng)把它的執(zhí)行代碼插入到該函數(shù)的每個調用點,

從而使程序執(zhí)行過程中,每次該函數(shù)調用時不需控制轉移,但該函數(shù)代碼可能有多個拷

貝出現(xiàn)在目標程序中。也就是說,把多次調用的函數(shù)說明為內聯(lián)函數(shù),會使目標程序占

用的空間加大,而運行時間得到節(jié)省。

(3)為了優(yōu)化程序、提高程序的運行效率,一般把函數(shù)體短小而又頻繁調用的函數(shù)說

明為內聯(lián)函數(shù)較好。

(4)利用編譯預處理的宏定義方式,也可以實現(xiàn)類似于內聯(lián)函數(shù)的功能。

不過,內聯(lián)函數(shù)的方式更為方便和可靠。例如,下面兒個內聯(lián)函數(shù)定義可以用帶參數(shù)的

宏定義方式實現(xiàn):

inlineintMAX(inta,intb){if(a>b)returna;returnb;}

inlinefloatABS(floata){return(a>=0)?a:0-a;}

inlinefloatPERCENT(floata,floatb){return100.0*a/b;}

inlinevoidSWAP(inta,intb){intt;t=a;a=b;b=t;return;}

inlineboolISODD(intx){return(x%2==1)?1:0;}

對應的宏定義為:

#defineMAX(a,b)((a>b)?a:b)//求較大者

#defineABS(a)((a>=0)?a:0-a)//求絕對值

#definePERCENT(a,b)(100.0*a/b)〃求百分比

#defineSWAP(t,a,b){intt=a;a=b;b=t;}//交換a,b的值

#defineISODD(x)((x%2==1)1:0)//判斷x是否為奇數(shù)

雖然這些帶參數(shù)的宏定義的功能與對應的內聯(lián)函數(shù)基本一致,但仍然是有差別

的,宏定義中的參數(shù)和計算結果沒有類型說明,編譯時不可能進行類型檢查,是

不安全的,更無法區(qū)分賦值參數(shù)和引用參數(shù),很容易出錯。因此,C++語言的編

程中,當某段計算短小而又經(jīng)常被重復時;建議采用內聯(lián)函數(shù),少用宏定義實現(xiàn)。

2、函數(shù)嵌套

一個函數(shù)的函數(shù)體中包含一個或多個函數(shù)調用語句,即稱為函數(shù)嵌套。嵌套

的含義是,如果函數(shù)A要調用函數(shù)B,也就是說,函數(shù)A的定義要依賴于函數(shù)

B的定義。因此函數(shù)B的定義或函數(shù)B的原型必須出現(xiàn)在函數(shù)A的定義語句

之前。

為了保證返回后繼續(xù)正常運行,函數(shù)調用過程開始時需要做更多的事情:

1)建立被調用函數(shù)的棧空間;

20

海南收件取業(yè)技術學院《C++程序設計》教案

2)保存調用函數(shù)的運行狀態(tài)和返回地址;

3)傳遞參數(shù);

4)把程序控制轉交給被調用函數(shù)。

3、備做的遞加

遞歸函數(shù)的設計在程序設計中占有重要的地位。

函數(shù)A在其函數(shù)體中直接包含它自己的調用語句,這種調用稱為直接遞歸調用,

函數(shù)A稱為(直接)遞歸函數(shù)。函數(shù)A在其函數(shù)體中間接地包含對它自己的調

用,例如A調用函數(shù)B,但函數(shù)B又調用函數(shù)A,則函數(shù)A稱為(間接)遞歸

函數(shù)。下面是一個(直接)

遞歸函數(shù)的例子:

floatfac(intn){

if(n<2=return1;

returnfac(n-1)*n:

1

遞歸函數(shù)的實際計算過程與遞歸次序相反,例如,設n=4,1算fac(4)的遞歸次序是:fac(4)

一〉fac(3)->fac⑵一〉fac(l),而實際計算過程則正好相反:fac(1)=1,fac(2)=fac(1)*2=2,

fac(3)=fac(2)*3=6,fac(4)=fac(3)*4=24.

在一般情況下,應注意:

(1)無論是直接遞歸還是間接遞歸都必須保證在有限次調用之后能夠結束。例如函數(shù)fac

中的參數(shù)n在遞歸調用中每次減1,總可達到<2的狀態(tài)而結束。

(2)函數(shù)調用時系統(tǒng)要付出時間和空間代價,在環(huán)境條件相同的情形下,總是非遞歸程

序效率較高。

課題08:函數(shù)重載

一、教學目標:

1.了解函數(shù)重載的意義

2.掌握函數(shù)重載的條件

3.學會使用函數(shù)重載

二、教學重點:

1.函數(shù)重載的條件

三、教學難點:

1.函數(shù)重載的使用

四、課時安排:

2節(jié)課

五、教具準備:

21

海南收件取業(yè)技術學院《C++程序設計》教案

多媒體教室

六、教學方法:

講授

七、教學過程:

(一)、復習導入

(二)、講授新課

函數(shù)重載實際上是函數(shù)名重載,即支持多個不同的函數(shù)采用同一名字。例如:

inlabs(intn){return(n<0?-n:n;}

floatabs(floatf){if(f<0)f=-f;returnf;)

doubleabs(doubled){if(d<0)retum-d;returnd;)

三個函數(shù)都是求絕對值,采用同一個函數(shù)名,更符合人們的習慣(這一點在C語

言和其它語言中是不允許的。它們規(guī)定,在同一個程序塊中一個名字只允許有一

種含義)。在程序中經(jīng)常出現(xiàn)這樣的情況:對若干種不同的數(shù)據(jù)類型求和,雖然

數(shù)據(jù)本身差別很大(例如整數(shù)求和,向量求和,矩陣求和),具體的求和操作差

別也很大,但完成不同求和操作的函數(shù)卻可以取相同的名字(例如sum,add等)。

許多差別很大的打印函數(shù)可以都用名print,顯示函數(shù)可以都用display,從鍵盤

或文件獲取信息都稱作get,發(fā)送稱為send,接收稱為receive等等。函數(shù)名的

重載并不是為了節(jié)省標識符(標識符的數(shù)量是足夠的),而是為了方便程序員的

使用,這一點很重要。

實現(xiàn)函數(shù)的重載必須滿足下列條件之一:

(1)參數(shù)表中對應的參數(shù)類型不同;

(2)參數(shù)表中參數(shù)個數(shù)不同;

(3)參數(shù)表中不同類型參數(shù)的次序不同。

例如:

voidprint(int);//整型

voidprint(point);//類point的對象

intsum(int,int);

intsum(int,int,int);

intget(intn,floata[]);

intget(intn,floata[],intn);

在定義同名函數(shù)時應注意:

(1)返回類型不能區(qū)分函數(shù),例如:

floatadd(intfloat);

intadd(intfloat);〃錯誤

在調用時系統(tǒng)無法區(qū)分選擇對應函數(shù)。

(2)采用引用參數(shù)不能區(qū)分函數(shù),例如:

voidprint(double);

voidprint(double&);〃錯誤

22

海南軟件取業(yè)技術學院《C++程序段計》教案

voidprint(constdouble&);〃錯誤

(3)有些派生基本類型的參數(shù)雖然可以區(qū)分同名函數(shù),但在使用中必須注意,例如:

intabs(int);

unsignedintabs(unsignedint);

對這種函數(shù)的調用必須注意:

inta=3,b;

unsignedintc=5,d;

調用語句

b=abs(a);

d=abs(c);

b=abs(-3);

b=abs(3);

d=abs(3*a);

其中abs(3)因實參3既可以是int型,也可以unsignedint型,故這里可能出現(xiàn)二義性。

(4)包含可缺省參數(shù)時,可能造成二義性,例如:

intsum(inta,intb,intc=0);

intsum(inta,intb);

程序設計中應避免這種情形出現(xiàn)。上面的二義性的情形是指系統(tǒng)面對某一函數(shù)調

用語句,有兩個或兩個以上同名函數(shù)與之匹配;而另一種情況下,由于數(shù)據(jù)類型

之間的復雜轉換關系也可能造成

溫馨提示

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

評論

0/150

提交評論