版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第7 7章章 函數(shù)函數(shù)引例引例 求階乘求階乘n!int i,n;float fac=1;printf(n=);scanf(%d,&n);for(i=1;i=n;i+) fac=fac*i;printf (%d!=%.0fn,n,fac);引例引例求任意求任意3個正整數(shù)的階乘的和個正整數(shù)的階乘的和 a!+b!+c! fa=1;for(i=1;i=a;i+) fa=fa*i;fb=1;for(i=1;i=b;i+) fb=fb*i;fc=1;for(i=1;i=c;i+) fc=fc*i;printf(%d!+%d!+%d!=%.0f,a,b,c,fa+fb+fc);引例引例求任意求任意3個正整
2、數(shù)的階乘的和個正整數(shù)的階乘的和 a!+b!+c! #include stdio.hint main() float factorial(int n); int a,b,c; float sum; printf(a=); scanf(%d,&a); printf(b=); scanf(%d,&b); printf(c=); scanf(%d,&c); sum=factorial(a)+factorial(b)+factorial(c); printf(%d!+%d!+%d!=%.0f,a,b,c,sum); return 0;float factorial(int n) int i; float
3、 fac; fac=1; for(i=1;i=n;i+) fac=fac*i; return fac;引例引例 求任意求任意3個正整數(shù)的階乘的和個正整數(shù)的階乘的和 a!+b!+c! 使用函數(shù)可減少程序的重復段落使用函數(shù)可減少程序的重復段落使用函數(shù)可使程序功能相對獨立,使用函數(shù)可使程序功能相對獨立,便于維護便于維護模塊化的程序設(shè)計模塊化的程序設(shè)計應用程序應用程序源程序文件源程序文件1函數(shù)函數(shù)1函數(shù)函數(shù)2函數(shù)函數(shù)3源程序文件源程序文件2函數(shù)函數(shù)1函數(shù)函數(shù)2函數(shù)的概念函數(shù)的概念#include int main ( ) int max(int x,int y); int a, b, c; scanf
4、 (%d,%d,&a,&b); c=max (a,b); printf (max=%d,c); return 0;int max(int x,int y) int z; if (xy) z=x; else z=y; return z; 程序必備的程序必備的 main函數(shù)函數(shù)有返回值的函數(shù)有返回值的函數(shù)函數(shù)的概念函數(shù)的概念上述問題也可只用一個上述問題也可只用一個main函數(shù)實現(xiàn)函數(shù)實現(xiàn)int main ( ) int a, b, c; scanf (%d,%d,&a,&b); if (ab) c=a; else c=b; printf (max=%d,c); return 0;函數(shù)的概念函數(shù)的概
5、念int main( ) void stars( ); stars( ); printf(Hello!n); stars( ); printf(Bye!n); stars( ); return 0;void stars( ) int i; for (i=1;i=8;i+) printf(*); printf(n);無返回值的函數(shù)無返回值的函數(shù)函數(shù)的概念函數(shù)的概念int main( ) void stars(int n); int n=20; stars(10); printf(Hello!n); stars(5); printf(Bye!n); stars(n); return 0;void
6、stars(int n) int i; for (i=1;i=n;i+) printf(*); printf(n);有參數(shù),無返回值有參數(shù),無返回值函數(shù)的概念函數(shù)的概念int main( ) void stars(int, char); int n=20; stars(10,%); printf(Hello!n); stars(5,-); printf(Bye!n); stars(n,$); return 0;void stars(int n,char c) int i; for (i=1;iy) z=x; else z=y; return z; 函數(shù)首部函數(shù)首部函數(shù)體函數(shù)體函數(shù)的返回值,類函
7、數(shù)的返回值,類型與首部定義一致型與首部定義一致函數(shù)首部,不是語函數(shù)首部,不是語句,行尾無分號句,行尾無分號函數(shù)的定義函數(shù)的定義關(guān)于函數(shù)類型的說明關(guān)于函數(shù)類型的說明u無返回值的函數(shù)類型為無返回值的函數(shù)類型為void;u有返回值的函數(shù),其類型根據(jù)返回值有返回值的函數(shù),其類型根據(jù)返回值類型決定;省略類型時默認為類型決定;省略類型時默認為int(建議(建議不要省略)不要省略)函數(shù)的調(diào)用函數(shù)的調(diào)用調(diào)用函數(shù)的準備工作調(diào)用函數(shù)的準備工作包含或聲明包含或聲明u調(diào)用庫函數(shù)應在調(diào)用庫函數(shù)應在C文件開頭部分使用文件開頭部分使用 #includeu要調(diào)用要調(diào)用其他自定義函數(shù)其他自定義函數(shù),應在,應在本函數(shù)本函數(shù)體體開
8、始的聲明部分加上開始的聲明部分加上被調(diào)用函數(shù)的聲被調(diào)用函數(shù)的聲明明(與(與函數(shù)首部內(nèi)容函數(shù)首部內(nèi)容相同的一個語句),相同的一個語句),供編譯時使用供編譯時使用如果如果被調(diào)用函數(shù)被調(diào)用函數(shù)出現(xiàn)出現(xiàn)在在本函數(shù)本函數(shù)之前可省略此部分之前可省略此部分 詳見詳見7.4節(jié)節(jié)函數(shù)的調(diào)用函數(shù)的調(diào)用函數(shù)(實參列表)函數(shù)(實參列表) 調(diào)用無返回值的函數(shù)可以把上述函數(shù)調(diào)用無返回值的函數(shù)可以把上述函數(shù)直接作為語句使用,以完成其功能。直接作為語句使用,以完成其功能。 例如:例如: stars(10);函數(shù)的調(diào)用函數(shù)的調(diào)用函數(shù)(實參列表)函數(shù)(實參列表) 調(diào)用有返回值的函數(shù),應注意返回值調(diào)用有返回值的函數(shù),應注意返回值的
9、處理,如賦值或輸出等。的處理,如賦值或輸出等。 例如:例如: c=max(a,b); 或或 printf(%d,max(a,b);函數(shù)的參數(shù)函數(shù)的參數(shù)u形式參數(shù)(形參,形式參數(shù)(形參,F(xiàn)ormal parameter):): 定義函數(shù)時首部括號中定義的變量定義函數(shù)時首部括號中定義的變量u實際參數(shù)(實參,實際參數(shù)(實參,Actual parameter):): 調(diào)用函數(shù)時,在函數(shù)名后括號中使用調(diào)用函數(shù)時,在函數(shù)名后括號中使用的表達式的表達式調(diào)用函數(shù)時,實參將值傳遞給形參調(diào)用函數(shù)時,實參將值傳遞給形參函數(shù)的參數(shù)函數(shù)的參數(shù)形式參數(shù)和實際參數(shù)形式參數(shù)和實際參數(shù)void main ( )int max(
10、int x,int y); int a, b, c; scanf (%d,%d,&a,&b); c=max (a,b); printf (max=%d,c); return 0;int max(int x,int y) int z; if (xy) z=x; else z=y; return z; 函數(shù)的參數(shù)函數(shù)的參數(shù)形式參數(shù)和實際參數(shù)形式參數(shù)和實際參數(shù)u形參在函數(shù)調(diào)用時分配內(nèi)存單元,調(diào)用結(jié)束形參在函數(shù)調(diào)用時分配內(nèi)存單元,調(diào)用結(jié)束后釋放;后釋放;u實參可以是常量、變量、表達式實參可以是常量、變量、表達式u實參與形參的數(shù)目、類型應一致實參與形參的數(shù)目、類型應一致uC語言中,實參向形參傳遞其值語言
11、中,實參向形參傳遞其值“值傳值傳遞遞”,不傳遞地址,形參值變化不影響實參,不傳遞地址,形參值變化不影響實參函數(shù)的返回值函數(shù)的返回值u通過函數(shù)體通過函數(shù)體return語句中的表達式值獲語句中的表達式值獲得,例如:得,例如: int max(int x,int y) return xy?x:y; u無返回值的函數(shù)可省略無返回值的函數(shù)可省略return語句語句u函數(shù)執(zhí)行到函數(shù)執(zhí)行到return語句結(jié)束語句結(jié)束關(guān)于例題和習題關(guān)于例題和習題 通過本章例題、習題,不僅要掌握函數(shù)定義和通過本章例題、習題,不僅要掌握函數(shù)定義和調(diào)用的語法,也要掌握更多算法和編程技巧。調(diào)用的語法,也要掌握更多算法和編程技巧。 正
12、如學習語文、英語要大量閱讀一樣,學習計正如學習語文、英語要大量閱讀一樣,學習計算機語言也要閱讀例題,掌握一些基本的編程思算機語言也要閱讀例題,掌握一些基本的編程思路、技巧和表達,才可能對新的問題較快地找到路、技巧和表達,才可能對新的問題較快地找到解決方法;同時要多了解語法規(guī)則解決方法;同時要多了解語法規(guī)則相當于認相當于認字。另外,還應對計算機的工作原理和方式多一字。另外,還應對計算機的工作原理和方式多一些了解。些了解。例:最大公約數(shù)函數(shù)和最小公倍數(shù)函數(shù)例:最大公約數(shù)函數(shù)和最小公倍數(shù)函數(shù)求最大公約數(shù)的算法:求最大公約數(shù)的算法: 從從1開始,逐個找公約數(shù),直至兩數(shù)中較小開始,逐個找公約數(shù),直至兩數(shù)
13、中較小的一個;的一個; 輾轉(zhuǎn)求余輾轉(zhuǎn)求余(循環(huán)結(jié)構(gòu)實驗指導有流程圖循環(huán)結(jié)構(gòu)實驗指導有流程圖); .求最小公倍數(shù)的算法:求最小公倍數(shù)的算法: 從兩數(shù)中較大的一個開始,由小到大找公從兩數(shù)中較大的一個開始,由小到大找公倍數(shù),直至找到;倍數(shù),直至找到; 兩數(shù)的乘積兩數(shù)的乘積 / 兩數(shù)的最大公約數(shù)。兩數(shù)的最大公約數(shù)。函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用調(diào)用最小公倍數(shù)函數(shù)調(diào)用最小公倍數(shù)函數(shù)(兩數(shù)乘積兩數(shù)乘積/兩數(shù)的最大兩數(shù)的最大公約數(shù)公約數(shù)),當中需要調(diào)用最大公倍數(shù)函數(shù),當中需要調(diào)用最大公倍數(shù)函數(shù)函數(shù)的嵌套調(diào)用:在一個被調(diào)用的函數(shù)中調(diào)函數(shù)的嵌套調(diào)用:在一個被調(diào)用的函數(shù)中調(diào)用另一個函數(shù)用另一個函數(shù)例:例:P183
14、例例7.5函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用概念:在一個被調(diào)用的函數(shù)中直接概念:在一個被調(diào)用的函數(shù)中直接或間接地調(diào)用函數(shù)本身或間接地調(diào)用函數(shù)本身n! =1 , n=0,1n (n-1)! , n1函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用遞歸的另一個典型實例遞歸的另一個典型實例 漢諾塔(漢諾塔(P.189例例7.8)算法講解算法講解http:/ 實參是數(shù)組元素,對應的形參是變量實參是數(shù)組元素,對應的形參是變量以以數(shù)組名數(shù)組名作為函數(shù)的參數(shù)作為函數(shù)的參數(shù) 實參和形參都是數(shù)組名實參和形參都是數(shù)組名數(shù)組元素作為函數(shù)的參數(shù)數(shù)組元素作為函數(shù)的參數(shù)數(shù)組元素數(shù)組元素作為作為實參實參形參是普通變量,形參是普通變量,值傳遞值傳遞i
15、nt main( ) int a11,i; float fac(int n); for (i=1;i=10;i+) ai=i; printf(%d!=%.0fn,ai,fac(ai); return 0;float fac(int n) float t=1; int i; for(i=1;i=n;i+) t=t*i; return t;等價于普通變量等價于普通變量數(shù)組作為函數(shù)的參數(shù)數(shù)組作為函數(shù)的參數(shù)以以數(shù)組名作數(shù)組名作為函數(shù)的參數(shù)為函數(shù)的參數(shù)實參向形參實參向形參傳遞首元素地址傳遞首元素地址int main( ) int max(int a ,int n); int x6,i; for(i=0;
16、i=5;i+) scanf(%d,&xi); printf(max=%d,max(x,6); return 0;int max(int a ,int n) int m,i; m=a0; for (i=1;im) m=ai; return m; 實參為數(shù)組名實參為數(shù)組名形參為數(shù)組,形參為數(shù)組,不指定大小不指定大小數(shù)組作為函數(shù)的參數(shù)數(shù)組作為函數(shù)的參數(shù)以以數(shù)組名數(shù)組名作為函數(shù)的參數(shù)作為函數(shù)的參數(shù)注意事項注意事項形參和實參都是數(shù)組名,類型要一致;形參和實參都是數(shù)組名,類型要一致;形參中不指定數(shù)組大小,指定無實際作用形參中不指定數(shù)組大小,指定無實際作用;形參數(shù)組名形參數(shù)組名獲得獲得實參首元素實參首元素的
17、的地址地址,即形參第,即形參第一個元素與實參第一個元素占用相同的地址一個元素與實參第一個元素占用相同的地址這就是這就是“地址傳遞地址傳遞”方式方式,形參值改變會引起實形參值改變會引起實參值的變化參值的變化為了使形參獲得實參數(shù)組的大小為了使形參獲得實參數(shù)組的大小(元素個數(shù)元素個數(shù)),通常在形參和實參對應地增加一個數(shù)值型的參數(shù)通常在形參和實參對應地增加一個數(shù)值型的參數(shù)數(shù)組作為函數(shù)的參數(shù)數(shù)組作為函數(shù)的參數(shù)以以數(shù)組名作數(shù)組名作為函數(shù)的參數(shù)為函數(shù)的參數(shù)考慮:如何寫一個排序函數(shù)?考慮:如何寫一個排序函數(shù)?多個函數(shù)組成的程序中多個函數(shù)組成的程序中變量引用的一些規(guī)則變量引用的一些規(guī)則應用程序應用程序源程序文件
18、源程序文件1函數(shù)函數(shù)1函數(shù)函數(shù)2函數(shù)函數(shù)3源程序文件源程序文件2函數(shù)函數(shù)1函數(shù)函數(shù)2變量作用域變量作用域局部變量和全局變量局部變量和全局變量u局部變量局部變量只在一個函數(shù)內(nèi)或只在一個只在一個函數(shù)內(nèi)或只在一個復合語句內(nèi)有效的變量(復合語句內(nèi)有效的變量(“花括號內(nèi)有效花括號內(nèi)有效”)u全局變量(外部變量)全局變量(外部變量)在一個模塊內(nèi)在一個模塊內(nèi)多個函數(shù)中均有效多個函數(shù)中均有效u擴展的外部變量擴展的外部變量在多個程序文件的函在多個程序文件的函數(shù)中有效(數(shù)中有效(extern)變量作用域變量作用域局部變量和全局變量局部變量和全局變量局部變量局部變量函數(shù)內(nèi)定義,只在該函數(shù)有效函數(shù)內(nèi)定義,只在該函數(shù)有
19、效#include int main() int a,b,c; . float fac(int n) float t=0; . return t;主函數(shù)中不存在主函數(shù)中不存在變量變量n和和tfac函數(shù)中不存函數(shù)中不存在變量在變量a和和b變量作用域變量作用域局部變量和全局變量局部變量和全局變量局部變量局部變量復合語句內(nèi)定義,只在語句內(nèi)復合語句內(nèi)定義,只在語句內(nèi)有效有效編譯錯編譯錯誤:變誤:變量量k未未定義定義int main() int i; for (i=0;i=10;i+) int k; k=i*2; printf(%dn,k); printf(%dn,i); printf(%dn,k);變
20、量作用域變量作用域局部變量和全局變量局部變量和全局變量局部變量局部變量在函數(shù)內(nèi)定義,只在該函數(shù)內(nèi)有效在函數(shù)內(nèi)定義,只在該函數(shù)內(nèi)有效在復合語句內(nèi)定義,只在該語句內(nèi)有效在復合語句內(nèi)定義,只在該語句內(nèi)有效形式參數(shù)也是局部變量,只在函數(shù)內(nèi)有效形式參數(shù)也是局部變量,只在函數(shù)內(nèi)有效變量作用域變量作用域局部變量和全局變量局部變量和全局變量全局變量全局變量在函數(shù)外定義,在其后的多個在函數(shù)外定義,在其后的多個函數(shù)中均有效函數(shù)中均有效#include int A,B,C;int main() int X,Y;float f1(int n) int f2( ) 變量作用域變量作用域局部變量和全局變量局部變量和全局變
21、量全局變量全局變量 例:例:#include int A,B,C;int main( ) int f1(int n); void f2(); printf(%dn,f1(3); printf(main: %dn,A); A=88; f2();int f1(int n) int m; m=n*n; A=n*n*n; return m;void f2() printf(f2:%dn,A);變量作用域變量作用域局部變量和全局變量局部變量和全局變量擴展的外部變量擴展的外部變量在多個程序文件的函在多個程序文件的函數(shù)中有效(見數(shù)中有效(見7.9.3節(jié))節(jié))在程序中可以調(diào)用其他文件中的函數(shù)(外在程序中可以調(diào)
22、用其他文件中的函數(shù)(外部函數(shù))部函數(shù))可通過全局變量在函數(shù)間傳遞多個數(shù)據(jù)可通過全局變量在函數(shù)間傳遞多個數(shù)據(jù)變量作用域變量作用域局部變量和全局變量局部變量和全局變量判斷下面程序的運行結(jié)果:判斷下面程序的運行結(jié)果:#include int a,b,n;int main( ) void f1(int n); a=18;b=100;n=20; printf(main: a=%d,b=%d;n=%dn,a,b,n); f1(50);void f1(int n) float a=13.89; printf(f1: a=%f,b=%d;n=%dn,a,b,n);變量作用域變量作用域局部變量和全局變量局部變量
23、和全局變量關(guān)于全局變量應用的說明關(guān)于全局變量應用的說明u全局變量命名時通常首字母大寫全局變量命名時通常首字母大寫u通過使用全局變量,使函數(shù)能夠傳遞實參通過使用全局變量,使函數(shù)能夠傳遞實參-形參和返回值之外的其他數(shù)據(jù)形參和返回值之外的其他數(shù)據(jù)u濫用全局變量會造成系統(tǒng)資源占用,降低濫用全局變量會造成系統(tǒng)資源占用,降低函數(shù)可移植性和程序的清晰度函數(shù)可移植性和程序的清晰度(P.202-203)u在函數(shù)中定義了與外部變量(全局變量)在函數(shù)中定義了與外部變量(全局變量)同名的局部變量時,外部變量被屏蔽同名的局部變量時,外部變量被屏蔽變量的存儲方式和生存期變量的存儲方式和生存期u動態(tài)存儲(自動變量,形式參數(shù)
24、)動態(tài)存儲(自動變量,形式參數(shù)) 臨時、動態(tài)地分配存儲單元臨時、動態(tài)地分配存儲單元u靜態(tài)存儲(全局變量,靜態(tài)局部變量)靜態(tài)存儲(全局變量,靜態(tài)局部變量) 程序運行整個過程中都存在程序運行整個過程中都存在局部變量的存儲方式和生存期局部變量的存儲方式和生存期u自動局部變量自動局部變量(auto):函數(shù)中定義的變量函數(shù)中定義的變量和形參。函數(shù)被調(diào)用時動態(tài)分配存儲空間,和形參。函數(shù)被調(diào)用時動態(tài)分配存儲空間,調(diào)用結(jié)束時釋放。默認方式。調(diào)用結(jié)束時釋放。默認方式。u靜態(tài)局部變量靜態(tài)局部變量(static):函數(shù)中加函數(shù)中加static定定義的變量,編譯時賦初值,調(diào)用結(jié)束時保義的變量,編譯時賦初值,調(diào)用結(jié)束時
25、保留存儲空間和當前值。留存儲空間和當前值。P.206-207說明。說明。u寄存器變量寄存器變量(register):保存在保存在CPU中,中,現(xiàn)已少用?,F(xiàn)已少用。全局變量的存儲方式和生存期全局變量的存儲方式和生存期均為靜態(tài)存儲均為靜態(tài)存儲u在同一文件定義點之前引用全局變量在同一文件定義點之前引用全局變量引用前使用引用前使用 extern 聲明聲明u引用另一文件中的全局變量引用另一文件中的全局變量引用前使用引用前使用 extern 聲明聲明u限制全局變量的作用域在本文件中限制全局變量的作用域在本文件中定義時增加定義時增加 static 聲明聲明“定義定義”與與“聲明聲明”的區(qū)分的區(qū)分函數(shù)的函數(shù)的“定義定義”和和“聲明聲明”#include int main( ) int f1(int); int f2(); . a=f1(5)+f2(); int f1(int n) .int f2() .函數(shù)定義函數(shù)定義確定確定函數(shù)的名稱、類函數(shù)的名稱、類型、功能型、功能函數(shù)聲明函數(shù)聲明(函數(shù)原型函數(shù)原型) 確定要調(diào)用函數(shù)的名稱、確定要調(diào)用函數(shù)的名稱、參數(shù)類型參數(shù)類型函數(shù)調(diào)函數(shù)調(diào)用,運用,運行函數(shù)行函數(shù)
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度農(nóng)民工工資支付與就業(yè)培訓服務合同范本4篇
- 2025年度個人商鋪租賃合同范本二零二五商業(yè)地產(chǎn)租賃管理規(guī)范6篇
- 2025年度嬰幼兒奶粉行業(yè)培訓與合作合同范本4篇
- 二零二五年度美容師職業(yè)技能提升培訓合同4篇
- 二零二五年度代購服務與旅游推廣合同4篇
- 二零二五年度民政廳離婚協(xié)議書模板制作與財產(chǎn)分割咨詢合同4篇
- 2025年度文化場館門衛(wèi)安全管理合同3篇
- 二零二五年度生態(tài)園林景觀施工勞務合同范本4篇
- 二零二五年度農(nóng)產(chǎn)品電商平臺技術(shù)支持合同6篇
- 二零二五年度文化旅游項目土地承包合同范本4篇
- 廣東省佛山市2025屆高三高中教學質(zhì)量檢測 (一)化學試題(含答案)
- 人教版【初中數(shù)學】知識點總結(jié)-全面+九年級上冊數(shù)學全冊教案
- 2024-2025學年人教版七年級英語上冊各單元重點句子
- 2025新人教版英語七年級下單詞表
- 公司結(jié)算資金管理制度
- 2024年小學語文教師基本功測試卷(有答案)
- 未成年入職免責協(xié)議書
- 項目可行性研究報告評估咨詢管理服務方案1
- 5歲幼兒數(shù)學練習題
- 2024年全國體育單招英語考卷和答案
- 食品安全管理制度可打印【7】
評論
0/150
提交評論