函數(shù)與宏替換市公開課獲獎(jiǎng)?wù)n件_第1頁(yè)
函數(shù)與宏替換市公開課獲獎(jiǎng)?wù)n件_第2頁(yè)
函數(shù)與宏替換市公開課獲獎(jiǎng)?wù)n件_第3頁(yè)
函數(shù)與宏替換市公開課獲獎(jiǎng)?wù)n件_第4頁(yè)
函數(shù)與宏替換市公開課獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第6章函數(shù)與宏替換 第1頁(yè)第1頁(yè)本章內(nèi)容6.1 模塊化設(shè)計(jì)6.2 函數(shù)定義與調(diào)用6.3 函數(shù)遞歸調(diào)用6.4 變量存儲(chǔ)類型、作用域6.5 宏替換6.6 綜合應(yīng)用第2頁(yè)第2頁(yè)6.1模塊化設(shè)計(jì) 模塊化設(shè)計(jì)思想 把一個(gè)大問題分解成若干個(gè)比較容易求解小問題,然后分別求解 模塊設(shè)計(jì)原則 模塊獨(dú)立功效單一。模塊間聯(lián)系力爭(zhēng)簡(jiǎn)樸。數(shù)據(jù)局部化。模塊規(guī)模要適當(dāng)分解模塊要注意層次第3頁(yè)第3頁(yè)6.2函數(shù)定義與調(diào)用 6.2.1原則庫(kù)函數(shù) math.h頭文獻(xiàn)中函數(shù):abs()、sin()、cos()、exp()、fabs()、floor()、rand()等 stdio.h頭文獻(xiàn)中函數(shù):fgets()、fopen()、fpr

2、intf()、fputc()、gets()、puts()、fread()、getchar() 、putchar()、open()、close()、printf()、scanf()等 ctype.h頭文獻(xiàn)中函數(shù): isalnum()、isalpha()、ispunch()、isspace()、isupper()、isxdigit()等string.h頭文獻(xiàn)中函數(shù):strcat()、strchr()、strcmp()、strcpy()、strlen()、strlwr()、strncat()、strncpy()、strstr()、strupr()等 第4頁(yè)第4頁(yè)6.2.2函數(shù)定義 類型闡明符 函數(shù)名

3、稱 (形式參數(shù)類型及闡明列表) /*下列為函數(shù)體*/ 局部變量申明部分 語(yǔ)句序列int max(int n1,int n2)int t;if(n1n2)t=n1;elset=n2;return t;第5頁(yè)第5頁(yè)函數(shù)申明部分 類型闡明符定義了函數(shù)中return語(yǔ)句返回值類型 省略類型闡明符,函數(shù)返回一個(gè)整型值 函數(shù)沒有返回值,能夠定義為void 函數(shù)名稱遵循C語(yǔ)言標(biāo)識(shí)符命名規(guī)則 形式參數(shù)類型及闡明列表用逗號(hào)分隔形式參數(shù)列表 每個(gè)列表項(xiàng)均由“類型闡明符”和“形式參數(shù)名稱”兩部分構(gòu)成 沒有參數(shù),括號(hào)仍然是必須要有 第6頁(yè)第6頁(yè)函數(shù)體 和main函數(shù)同樣,必須將變量申明語(yǔ)句和其它語(yǔ)句序列用括起來 假如

4、有返回值,需要通過return語(yǔ)句返回 return語(yǔ)句普通形式為: return(表示式);或者return 表示式;return語(yǔ)句有兩個(gè)主要作用返回一個(gè)值;退出當(dāng)前函數(shù)。 第7頁(yè)第7頁(yè)6.2.3函數(shù)調(diào)用 調(diào)用函數(shù)定義在主調(diào)函數(shù)之前,主調(diào)函數(shù)能夠直接調(diào)用 被調(diào)用函數(shù)定義在主調(diào)函數(shù)之后,則需要在主調(diào)函數(shù)中申明被調(diào)用函數(shù)。函數(shù)申明格式類型名 函數(shù)名稱(形式參數(shù)類型列表);注意:函數(shù)申明語(yǔ)句后面需加分號(hào)。在申明函數(shù)時(shí),函數(shù)參數(shù)名稱能夠省略,但參數(shù)類型不能省略,且參數(shù)類型個(gè)數(shù)、類型、順序必須保持一致。 main()int max(int,int);/*申明max函數(shù),也可改為int max(int

5、 n1,int n2);*/c=max(a,b);int max(int n1,int n2)第8頁(yè)第8頁(yè)函數(shù)調(diào)用 無(wú)參函數(shù)調(diào)用普通形式為:函數(shù)名();有參函數(shù)調(diào)用普通形式為:函數(shù)名(實(shí)參表示式1,實(shí)參表示式2,)c=max(a,b);printf(“%d”,c);第9頁(yè)第9頁(yè)函數(shù)嵌套調(diào)用 在C語(yǔ)言中,允許在定義一個(gè)函數(shù)時(shí)調(diào)用另外一個(gè)函數(shù),則在該函數(shù)被調(diào)用過程中將發(fā)生另一次函數(shù)調(diào)用 圖6.2 函數(shù)嵌套調(diào)用【例6.1】驗(yàn)證哥德巴赫猜想。猜想內(nèi)容:任何一個(gè)不小于4偶數(shù),都能夠表示為兩個(gè)素?cái)?shù)和。第10頁(yè)第10頁(yè)6.2.4參數(shù)傳遞 形參和實(shí)參概念 函數(shù)定義時(shí)使用參數(shù)稱之為形式參數(shù),簡(jiǎn)稱形參 函數(shù)調(diào)用時(shí)

6、使用參數(shù),稱之為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參 在函數(shù)調(diào)用時(shí),實(shí)參個(gè)數(shù)要和形參相等,并且類型必須一致,另外實(shí)參與形參出現(xiàn)順序也要一一相應(yīng)。 第11頁(yè)第11頁(yè)程序舉例【例6.2】輸入兩個(gè)數(shù),輸出兩個(gè)數(shù)中最大值 #include stdio.hmain()int a,b,m;int max(int,int);/*申明max函數(shù)*/printf(nPlease input two numbers(a,b):);scanf(%d,%d,&a,&b);m=max(a,b);/*調(diào)用max函數(shù)*/printf(max=%dn,m); int max(int x,int y)int t;t=xy?x:y;return

7、t;第12頁(yè)第12頁(yè)形參和實(shí)參特點(diǎn) 形參變量只有在被調(diào)用時(shí)才分派內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分派內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。實(shí)參能夠是常量、變量、表示式、函數(shù)等,在進(jìn)行函數(shù)調(diào)用時(shí),它們必須含有擬定值,以便把這些值傳送給形參。因此,應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參取得擬定值。實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,不然會(huì)產(chǎn)生類型不匹配錯(cuò)誤。同時(shí),實(shí)參和形參含有一一相應(yīng)關(guān)系。函數(shù)調(diào)用中發(fā)生數(shù)據(jù)傳送是單向。即只能把實(shí)參值傳送給形參,而不能把形參值反向地傳送給實(shí)參。因此在函數(shù)調(diào)用過程中,形參值無(wú)論怎么改變,實(shí)參中值都不會(huì)改變。第1

8、3頁(yè)第13頁(yè)6.3函數(shù)遞歸調(diào)用函數(shù)在執(zhí)行過程中對(duì)自己調(diào)用稱為函數(shù)遞歸調(diào)用 在使用遞歸辦法處理問題時(shí),需要分成兩個(gè)環(huán)節(jié)(1)遞歸邊界條件。也就是描述問題最簡(jiǎn)樸情況,它本身不需要遞歸定義,只需給出符合什么樣條件程序中斷遞歸及中斷遞歸時(shí)返回值。(2)尋找問題規(guī)律。將問題轉(zhuǎn)換為更簡(jiǎn)樸相同問題,然后向著遞歸邊界條件方向遞歸。第14頁(yè)第14頁(yè)程序舉例【例6.3】利用遞歸辦法計(jì)算n!?!纠?.4】有5個(gè)人坐在一起,問第5個(gè)人多少歲,他說比第4個(gè)人大2歲;問第4個(gè)人多少歲,他說比第3個(gè)人大2歲;問第3個(gè)人多少歲,他說比第2個(gè)人大2歲;問第2個(gè)人多少歲,他說比第1個(gè)人大2歲;最后問第一個(gè)人多少歲,他說是30歲,

9、請(qǐng)問第5個(gè)人多少歲?。【例6.5】利用遞歸辦法計(jì)算猴子吃桃問題。有一天小猴子摘若干個(gè)桃子,當(dāng)即吃了二分之一還覺得但是癮,又多吃了一個(gè)。第二天接著吃剩余桃子中二分之一,仍覺得但是癮又多吃了一個(gè),以后小猴子都是吃尚存桃子二分之一多一個(gè)。到第10天早上小猴子再去吃桃子時(shí)候,看到只剩余一個(gè)桃子。問小猴子第一天共摘下了多少個(gè)桃子?第15頁(yè)第15頁(yè)6.4變量存儲(chǔ)類型、作用域6.4.1變量作用域 局部變量 函數(shù)內(nèi)作定義說明,其作用域僅限于函數(shù)內(nèi)部 注意問題:主函數(shù)中定義變量也只能在主函數(shù)中使用,不能在其它函數(shù)中使用形參變量是屬于被調(diào)函數(shù)局部變量,實(shí)參變量是屬于主調(diào)函數(shù)局部變量允許在不同函數(shù)中使用相同變量名,

10、它們代表不同對(duì)象,分派不同單元,互不干擾,也不會(huì)發(fā)生混同第16頁(yè)第16頁(yè)全局變量 在函數(shù)外部定義變量,也就是在程序開頭申明 全局變量定義形式為:extern 類型闡明符 變量名,變量名 extern能夠省去不寫 比如: int a,b;等效于:extern int a,b;注意問題:全局變量在定義時(shí)就已分派了內(nèi)存單元,全局變量定義可作初始賦值,全局變量闡明不能再賦初始值,只是表明在函數(shù)內(nèi)要使用某全局變量全局變量可加強(qiáng)函數(shù)模塊之間數(shù)據(jù)聯(lián)系,但同時(shí)也減少了函數(shù)獨(dú)立性。在同一源文獻(xiàn)中,允許全局變量和局部變量同名。在局部變量作用域內(nèi),全局變量不起作用。第17頁(yè)第17頁(yè)程序舉例#include stdi

11、o.hint a=8,b=4;/*定義全局變量a,b*/void fun()int a,b;/*定義局部變量a,b*/a=10;b=5;printf(fun:a+b=%dn,a+b);main()fun();printf(“main:a+b=%dn”,a+b);上例輸出結(jié)果為:fun:a+b=15main:a+b=12;第18頁(yè)第18頁(yè)6.4.2變量存儲(chǔ)類型靜態(tài)存儲(chǔ)在變量定義時(shí)就分派存儲(chǔ)單元并始終保持不變,直至整個(gè)程序結(jié)束 分類靜態(tài)(static)外部(extern) 動(dòng)態(tài)存儲(chǔ) 在程序執(zhí)行過程中,使用它時(shí)才分派存儲(chǔ)單元,使用完畢馬上釋放 第19頁(yè)第19頁(yè)自動(dòng)變量 定義普通形式為:auto 類型

12、標(biāo)識(shí)符 變量列表其中,auto能夠省略 自動(dòng)變量特點(diǎn)作用域僅限于定義該變量結(jié)構(gòu)內(nèi) 自動(dòng)變量屬于動(dòng)態(tài)存放方式,只有在使用它,即定義該變量函數(shù)被調(diào)用時(shí)才給它分派存放單元,開始它生存期 不同結(jié)構(gòu)中允許使用同名變量而不會(huì)混同 第20頁(yè)第20頁(yè)靜態(tài)變量 定義普通形式為:static 類型標(biāo)識(shí)符 變量列表比如:static int a;特點(diǎn):程序結(jié)束前不釋放內(nèi)存。第21頁(yè)第21頁(yè)程序舉例#include int add()static int a=10;/*定義靜態(tài)局部變量,并賦初值*/a+=10;return a;main()int i;for(i=1;i=5;i+)printf(%d.add=%dn,

13、i,add();運(yùn)營(yíng)上面程序,輸出結(jié)果為:1.add=202.add=303.add=404.add=505.add=60第22頁(yè)第22頁(yè)外部變量 申明外部變量普通形式為:extern 類型標(biāo)識(shí)符 變量列表比如:/*f1.c*/#include main()extern int num;/*申明外部變量num,表明在函數(shù)中將用到外部變量num*/init();printf(num=%dn,num);/*f2.c*/int num;/*定義全局變量num*/void init()num=100;第23頁(yè)第23頁(yè)6.5 宏替換 6.5.1 宏替換6.5.2 文獻(xiàn)包括第24頁(yè)第24頁(yè)6.5.1 宏替

14、換宏定義功效是用一個(gè)標(biāo)識(shí)符來表示一個(gè)字符串,標(biāo)識(shí)符稱為宏名 無(wú)參宏 無(wú)參宏定義普通形式為:#define 比如: # define EX (x*y+z) 注意事項(xiàng):在宏代換時(shí),只是簡(jiǎn)樸將宏名代換為相應(yīng)表示式 ,注意括號(hào)使用宏定義是用宏名來表示一個(gè)字符串,在宏代換時(shí)又以該字符串簡(jiǎn)樸替換宏名,字符串中能夠包括任何字符,能夠是常數(shù),也能夠是表示式,預(yù)處理程序?qū)λ蛔魅魏螜z查 宏定義不是闡明或語(yǔ)句,在行尾不能加分號(hào)宏定義必須寫在函數(shù)之外,其作用域?yàn)楹甓x命令起到源程序結(jié)束 源程序中雙引號(hào)引起來字符串常量中,若出現(xiàn)宏名,則預(yù)處理程序不對(duì)其作宏代換 宏定義允許嵌套習(xí)慣上宏名用大寫字母表示,以便于與變量區(qū)別

15、 第25頁(yè)第25頁(yè)有參宏 有參宏定義普通形式為: #define 宏名(形參表) 字符串有參宏調(diào)用普通形式為:宏名(實(shí)參表);注意事項(xiàng):有參宏定義中,宏名和形參表之間不能有空格出現(xiàn) 在有參宏定義中,形參不分派內(nèi)存單元,因此不必作類型定義 在宏定義中形參是標(biāo)識(shí)符,而宏調(diào)用中實(shí)參能夠是表示式 在宏定義中,字符串內(nèi)形參通常要用括號(hào)括起來以避免犯錯(cuò) 第26頁(yè)第26頁(yè)程序舉例#define PI 3.1415926#define S(a) PI*a*amain()float r,s;printf(nPlease input r: );scanf(%f,&r);s=S(r+1);printf(s=%fn,

16、s); #define PI 3.1415926#define S(a) PI*(a)*(a)main()float r,s;printf(nPlease input r: );scanf(%f,&r);s=1/S(r+1);printf(s=%fn,s); #define PI 3.1415926#define S(a) (PI*(a)*(a)main()float r,s;printf(nPlease input r: );scanf(%f,&r);s=1/S(r+1);printf(s=%fn,s); 第27頁(yè)第27頁(yè)6.5.2 文獻(xiàn)包括文獻(xiàn)包括命令行普通形式為:#include 文獻(xiàn)名或#include 比如: #include stdio.h#include math.h#include 注意事項(xiàng):包括命令中文獻(xiàn)名能夠用雙引號(hào)括起來,也能夠用尖括號(hào)括起來 一個(gè)include命令只能指定一個(gè)被包括文獻(xiàn),若有多個(gè)文獻(xiàn)要包括,則需用多個(gè)include命令 文獻(xiàn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論