版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第七章 函 數(shù) 本課主要內(nèi)容: 函數(shù)定義 函數(shù)調(diào)用 利用函數(shù)編制程序第1頁第1頁在第一章簡介過C語言程序設(shè)計主要思想是結(jié)構(gòu)化程序設(shè)計。結(jié)構(gòu)化程序設(shè)計中心思想:自頂向下,逐步求精。將復(fù)雜問題分解為多個簡樸子問題。相應(yīng)一個子問題求精程序段,作為一個單獨程序模塊,稱為函數(shù)。也就是說,函數(shù)是獨立完畢某一功效小程序段。7.1 函數(shù)引入第2頁第2頁 A塊條件? B塊 C塊 D塊是否第3頁第3頁C是模塊化程序設(shè)計語言C程序結(jié)構(gòu)C是函數(shù)式語言必須有且只能有一個名為main主函數(shù)C程序執(zhí)行總是從main函數(shù)開始,在main中結(jié)束函數(shù)不能嵌套定義,能夠嵌套調(diào)用第4頁第4頁1無參函數(shù)定義 形式: 類型標(biāo)識符 函數(shù)名
2、() 闡明部分 語句 7.2 函數(shù)定義比如: main( ) int a=5,b=9 ; printf(“ %dn ” , a*b*b ); 闡明:若不帶回函數(shù)值,類型標(biāo)識符也能夠不寫,無參函數(shù)普通用于完畢指定一組操作。第5頁第5頁2有參函數(shù)定義形式: 類型標(biāo)識符 函數(shù)名(形式參數(shù)表列) 形式參數(shù)闡明 闡明部分 語句 如: int max( x, y ) int x , y; int z ; z=xy ? x : y ; return ( z ) ; 空函數(shù)定義形式: 類形標(biāo)識符 函數(shù)名() 備以后擴(kuò)充。第6頁第6頁 一、形式參數(shù) 和 實際參數(shù)形式參數(shù) : 定義函數(shù)時,括號中闡明變量名 ;實際
3、參數(shù) : 調(diào)用函數(shù)時,括號中給定表示式 。7.3 函數(shù)參數(shù)和函數(shù)值第7頁第7頁 int max( x ,y ) /* x , y 為形參 */ int x,y; int z; z=xy?x:y; return (z); main() int a,b,c; scanf (“%d,%d”,&a,&b); c=max( a ,b ); /* a , b 為實參 */ printf (“max is %dn”,c); 第8頁第8頁函數(shù)參數(shù)及其傳遞方式形參與實參形式參數(shù):定義函數(shù)時函數(shù)名后面括號中變量名實際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中表示式c=max(a,b);(main 函數(shù))(max 函數(shù))ma
4、x(int x, int y) int z; z=xy?x:y; return(z); 例 比較兩個數(shù)并輸出大者main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);max(int x, int y) int z; z=xy?x:y; return(z);形參實參第9頁第9頁 1 定義函數(shù)時,形參不占內(nèi)存單元 ; 調(diào)用函數(shù)時,形參才分派內(nèi)存單元 ; 調(diào)用結(jié)束后,形參所占內(nèi)存單元被釋放。 2 實參能夠是常量、變量或表示式, 但必須有確切值。 3 定義函數(shù),必須指明形參類型。 4 實參與形參類型一致。 5 實參變
5、量對形參變量數(shù)據(jù)傳遞是“ 值傳遞 ”,即 單向 傳遞。 6 可在“形參表列”中闡明形參類型。 int max( int x , int y ) 闡明 :第10頁第10頁闡明 : 1 通過 return 語句取得返回值 ; 能夠有一個以上 return 語句。 2 定義函數(shù)時指定函數(shù)值類型; 不加類型闡明,按整型處理。 3 函數(shù)值類型和 return 語句中表示 式值不一致時,以函數(shù)類型為準(zhǔn)。 4 被調(diào)用函數(shù)中沒有 return 語句時, 帶回一個不擬定值。 5 為了明確表示“不帶回值”,能夠用“ void ” 定義 “ 無類型 ”。 二、 函數(shù)返回值第11頁第11頁 一、 函數(shù)調(diào)用普通形式:函
6、數(shù)名(實參表列)7.4 函數(shù)調(diào)用闡明 : 1 無參函數(shù),括號不能省 ; 2 實參表列中,各實數(shù)與形參在 個數(shù)、順序、 類型上一一相應(yīng),參數(shù)間用逗號分隔。第12頁第12頁 1 被調(diào)函數(shù)必須存在 ; 2 用 #include 命令包括相關(guān)庫函數(shù) ; 3 被調(diào)用函數(shù)普通應(yīng)在主調(diào)函數(shù)前定義 或闡明其類型 (整型 ,字符型除外); 4 假如在文獻(xiàn)開頭,已闡明了被調(diào)函數(shù)類 型,則主調(diào)函數(shù)中不必再作類型闡明。對被調(diào)用函數(shù)闡明第13頁第13頁例題3: 讀程序,寫出結(jié)果。 (program7-1)printstar( ) printf(“*”);printw( ) printf(“?”);printd( ) p
7、rintf(“$”);main( ) int i; for(i=0;i2;i+) printstar( ); for(i=4;i3;i-) printw( ); printstar( ); printd( ); printw( ); getch( );演示第14頁第14頁不能嵌套定義函數(shù),能夠嵌套調(diào)用函數(shù) 。main 函數(shù)a 函數(shù)b 函數(shù) 調(diào)用 a 函數(shù) 調(diào)用 b 函數(shù) 結(jié)束 7.5 函數(shù)嵌套調(diào)用在調(diào)用一個函數(shù)過程中又調(diào)用另一個函數(shù)稱為函數(shù)嵌套調(diào)用。第15頁第15頁 int gcd(a,b)int a,b; int r,t; if (ab) t=a; a=b; b=t; r=a%b; whil
8、e (r!=0) a=b; b=r; r=a%b; return (b); 例 寫兩個函數(shù),分別求兩個整數(shù)最大公約數(shù)和最小 公倍數(shù),用主函數(shù)調(diào)用這兩個函數(shù),并輸出結(jié)果 。int lcm(a,b) int a,b; int r; r=gcd(a,b); return(a*b/r);main() int x,y; scanf (%d%d,&x,&y); printf (%dn,gcd(x,y); printf (%dn,lcm(x,y);第16頁第16頁在調(diào)用一個函數(shù)過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)遞歸調(diào)用 。 如 f 函數(shù) f1 函數(shù) 調(diào)用 f 函數(shù) 調(diào)用 f2 函數(shù) 7.6 函
9、數(shù)遞歸調(diào)用第17頁第17頁 float fac(n) int n; float f; if (n0) printf (n0,data errorn); else if (n= =0|n= =1) f=1; else f=fac(n-1)*n; return (f); main() int n; float y; scanf (%d,&n); y=fac(n); printf (%d!=%15.0f,n,y); /*用遞歸法求 n! */演示7ex-fac.c第18頁第18頁 一、 數(shù)組元素做函數(shù)實參 與變量做實參同樣 。7.7 數(shù)組作為函數(shù)參數(shù)第19頁第19頁float average(arr
10、ay) float array10; int i; float aver,sum=array0; for (i=1;i10;i+) sum=sum+arrayi; aver=sum/10; return(aver); 二、 數(shù)組名作函數(shù)參數(shù),實參與形參都應(yīng)用數(shù)組名。 例 : 數(shù)組 score 存儲 10 個學(xué)生成績,求平均成績 。main() float score10,aver; int i; for (i=0;i10;i+) scanf (“%f”,&scorei); aver=average(score); printf (“average score if %5.2f”,aver);
11、闡明 : 1 數(shù)組名作函數(shù)參數(shù),應(yīng)在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組 ; 2 實參數(shù)組與形參數(shù)組類型應(yīng)一致 ; 3 實參數(shù)組與形參數(shù)組大小能夠一致也能夠不一致 ,形參數(shù)組能夠不指定大小( 用 )。第20頁第20頁max_value(array) int array4; int i,j,k,max; max=array00; for i=0;i3;i+) for (j=0;jmax) max=arrayij; return(max); main() static int a34=1,3,5,7,2,4,6,8,15,17,34,12; printf (max=%dn,max_value(a);
12、例 2有一個34矩陣,求其中最大元素 。第21頁第21頁例 4 求 33 矩陣轉(zhuǎn)置 main() static int a33=1,3,5,2,4,6,15,17,34; int i,j; turn(a); for (i=0;i3;i+) for (j=0;j3;j+) printf (%5d,aij); printf (n); void turn(array) int array3; int i,j,k; for (i=0;i3;i+) for (j=0;ji;j+) k=arrayij; arrayij=arrayji; arrayji=k; 第22頁第22頁 一、 局部變量 只在函數(shù)內(nèi)有
13、效變量 。float f1(a)int a; int b,c; .a , b, c 有效7.8 局部變量和全局變量第23頁第23頁char f2(x,y) int x,y; int i,j; .main ( ) int m,n; .x ,y ,i ,j 有效 m ,n 有效第24頁第24頁 說明 : 1 每個函數(shù)中定義變量,只在定義它函數(shù)中有效 ; 2 不同函數(shù)能夠使用相同名字變量,但意義不同 ; 3 形式參數(shù)也是局部變量 ; 4 能夠在復(fù)合語句中定義變量,但它們只在本復(fù)合語句中有效 。第25頁第25頁 main ( ) int a,b; . int c; c=a+b; . . c 有效范圍
14、a , b 有效范圍第26頁第26頁 1 外部變量 : 在函數(shù)之外定義變量; 2 外部變量是全局變量 ; 3 作用范圍: 從定義變量位置開始到本源文獻(xiàn)結(jié)束 二、 全局變量第27頁第27頁 int p=1,q=5; /* 外部變量 */ float f1(a) int a; int b,c;. char c1,c2; /* 外部變量 */ char f2(x,y) int x,y; int i,j;. main ( ) /*主函數(shù)*/ int m,n; . 全局變量c1,c2作用范圍全局變量p,q作用范圍第28頁第28頁 1 作用 :提供一個函數(shù)間數(shù)據(jù)聯(lián)絡(luò)與共享方法 ; 2 盡也許不用全局變量
15、; 1) 占內(nèi)存 2) 藕合性強(qiáng) 3)維護(hù)性差 3 用 extern 實現(xiàn)先引用 ,后定義 。 4 外部變量與局部變量同名時,局部變量屏蔽外部 變量 。 全局變量闡明 :第29頁第29頁 main() float ave,score10;int I; for (i=0;i10;i+) scanf (“%f”,&scorei); ave=average(score,10); printf (“%6.2f,%6.2f,%6.2fn”,max,min,ave); 例 : 在一維數(shù)組中存儲10個學(xué)生成績,寫 一個函數(shù),求出平均分,最高分和最低分。第30頁第30頁float max=0,min=0;fl
16、oat average(array,n)float array ;int n; int i; float aver,sum=array0; max=min=array0; for (i=1;imax) max=arrayi; else if (arrayiy?x:y; return(z);main() extern a,b; /*外部變量闡明*/ printf (“%dn”,max(a,b);int a=13,b=-8; /*外部變量定義*/ 例 :第32頁第32頁 int a=3,b=5; /* a,b為外部變量 */ max(a,b) int a,b; /* a,b為局部變量 */ int
17、 c; c=ab? a : b; return(c); main() int a=8; /* a為局部變量 */ printf (“%d”,max(a,b); 形參a,b作用范圍局部變量 a作用范圍全局變量 b作用范圍第33頁第33頁 一、 變量存儲類別 1 靜態(tài)存儲變量 :程序運營期間分派固定 存儲空間,存儲全局變量。 2 動態(tài)存儲變量 :依據(jù)需要動態(tài)分派存儲空間 , 存儲 : 1) 函數(shù)形參變量 ; 2) 局部變量(未加 static 闡明); 3) 函數(shù)調(diào)用時現(xiàn)場保護(hù)和返回地址等 。7.9 動態(tài)存儲變量與靜態(tài)存儲變量第34頁第34頁 1 局部動態(tài)變量 : ( auto ) 1) 函數(shù)調(diào)用
18、后,值不予保留,即釋放存儲空間 。 2) 再次調(diào)用時,原值不能引用 。 2 局部靜態(tài)變量 : ( static ) 1) 函數(shù)調(diào)用后保留原值,即不釋放所占存儲空間 ; 2) 再次調(diào)用時,原值在本函數(shù)內(nèi)仍可使用 。二、 局部變量存儲方式第35頁第35頁f(a) int a; auto int b=0; static int c=3; b=b+1;c=c+1 return(a+b+c);main() int a=2,i; for (i=0;i3;i+) printf(“%d ”,f(a); 例 :演示7varsave.c區(qū)別:局部靜態(tài)變量和局部動態(tài)變量(參上頁) 結(jié)果為7 8 9 ,若將stati
19、c改為 int(動態(tài)),結(jié)果為7 7 7 第36頁第36頁 1 局部靜態(tài)變量在靜態(tài)存儲區(qū)內(nèi)分派存儲單元, 程序整個運營期間不釋放 ; 2 編譯時賦初值一次,以后每次調(diào)用不再重新賦初值, 而是保留上次函數(shù)調(diào)用結(jié)束時值 ; 3 定義時不賦初值,編譯時自動賦初值 0 ; 4 定義全局變量和局部靜態(tài)變量時,才干對數(shù)組初始化 ; 5 不能被其它函數(shù)引用 。 闡明 :第37頁第37頁 3 存儲器變量 :( register ) 闡明 : 1) 提升執(zhí)行效率 ; 2) 只有局部自動變量和形式參數(shù)能夠作為 存儲器變量 。第38頁第38頁 三、 全局變量1 函數(shù)外部定義 ; 2 編譯時分派靜態(tài)存儲區(qū) ; 3 引
20、用另一個文獻(xiàn)中全局變量 : 在引用它文獻(xiàn)中用 extern 闡明 。 4 只被本文獻(xiàn)中函數(shù)引用 : 在定義外部變量時,前面加 static 闡明。第39頁第39頁 1 按作用域分為局部變量和全局變量 存儲類別: 自動變量,即動態(tài)局部變量(離開參數(shù),值就消失) 局部變量靜態(tài)局部變量(離開參數(shù),值仍保留) 存儲器變量(離開參數(shù),值就消失)(形式參數(shù)能夠定義為自動變量或存儲器變量) 全局變量靜態(tài)外部變量(只限本文獻(xiàn)引用) 外部變量(即非靜態(tài)外部變量,允許其它文獻(xiàn)引用) 四、 存儲類別小結(jié)第40頁第40頁 2 按存在時間分為動態(tài)存儲和靜態(tài)存儲兩種類型靜態(tài)存儲是程序整個運營期間都存在 ; 動態(tài)存儲則是在調(diào)用函數(shù)時暫時分派單元 。 自動變量(auto)(本函數(shù)內(nèi)有效)動態(tài)存儲存儲器變量(register)(本函數(shù)內(nèi)有效)形式參數(shù)靜態(tài)局部變量(static)(函數(shù)內(nèi)有效)靜態(tài)存儲靜態(tài)外部變量(static)(全局有效)外部變量(extern)(其它文獻(xiàn)可引 用,碰到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026湖南長沙市新城學(xué)校春季教師招聘4人考試備考題庫及答案解析
- 江蘇國信揚州發(fā)電有限責(zé)任公司冬季社會招聘5人考試參考試題及答案解析
- 2026甘肅省西北民族大學(xué)專任教師招聘50人考試參考題庫及答案解析
- 2026西藏林芝市察隅縣農(nóng)村公益電影放映人員招聘1人考試備考題庫及答案解析
- 2026內(nèi)蒙古錫林郭勒盟深能北方能源控股有限公司招聘考試參考題庫及答案解析
- 2026年甘肅慶陽西峰數(shù)字服務(wù)就業(yè)中心招募考試備考試題及答案解析
- 2026黑龍江哈爾濱啟航勞務(wù)派遣有限公司派遣到哈爾濱工業(yè)大學(xué)全媒體中心招聘1人考試參考試題及答案解析
- 2026甘肅蘭州市皋蘭縣蘭泉污水處理有限責(zé)任公司招聘2人考試備考試題及答案解析
- 2026廣西廣電網(wǎng)絡(luò)科技發(fā)展有限公司都安分公司招聘3人考試備考題庫及答案解析
- 2026四川成都新材料招聘秘書處工作人員考試備考題庫及答案解析
- -AAFCO貓糧營養(yǎng)指標(biāo)標(biāo)準(zhǔn)解讀
- 《弟子規(guī)》國學(xué)經(jīng)典-第33課-同是人類不齊
- YB/T 036.10-1992冶金設(shè)備制造通用技術(shù)條件鍛鋼件超聲波探傷方法
- GB/T 29890-2013糧油儲藏技術(shù)規(guī)范
- GB/T 14344-2022化學(xué)纖維長絲拉伸性能試驗方法
- GB/T 14285-2006繼電保護(hù)和安全自動裝置技術(shù)規(guī)程
- 臨床醫(yī)學(xué)概論之緒論
- 建筑工程環(huán)境管理與綠色施工管理
- DDI能力素質(zhì)模型構(gòu)建與案例分享
- 特殊藥品督查記錄表格模板
- 鋼棧橋拆除施工方法
評論
0/150
提交評論