




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第7,引例,求階乘n,int i,n; float fac=1; printf(n=); scanf(%d,引例,求任意3個(gè)正整數(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個(gè)正整數(shù)的階乘的和 a!+b!+c,include stdio.h int main() float factorial(int n); int a,b,c; fl
2、oat sum; printf(a=); scanf(%d,float factorial(int n) int i; float fac; fac=1; for(i=1;i=n;i+) fac=fac*i; return fac;,引例,求任意3個(gè)正整數(shù)的階乘的和 a!+b!+c,使用函數(shù)可減少程序的重復(fù)段落 使用函數(shù)可使程序功能相對獨(dú)立,便于維護(hù)模塊化的程序設(shè)計(jì),應(yīng)用程序,源程序文件1,函數(shù)1,函數(shù)2,函數(shù)3,源程序文件2,函數(shù)1,函數(shù)2,c應(yīng)用程序的構(gòu)成,函數(shù)的概念,include int main ( ) int max(int x,int y); int a, b, c; scanf
3、 (%d,%d,int max(int x,int y) int z; if (xy) z=x; else z=y; return z;,程序必備的 main函數(shù),有返回值的函數(shù),函數(shù)的概念,上述問題也可只用一個(gè)main函數(shù)實(shí)現(xiàn) int main ( ) int a, b, c; scanf (%d,%d,函數(shù)的概念,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+) pri
4、ntf(*); printf(n);,無返回值的函數(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 stars(int n) int i; for (i=1;i=n;i+) printf(*); printf(n); 有參數(shù),無返回值,函數(shù)的概念,int main( ) void stars(int, char); int n=20; stars(10,%); printf(hello!n);
5、 stars(5,-); printf(bye!n); stars(n,$); return 0;,void stars(int n,char c) int i; for (i=1;i=n;i+) printf(%c,c); printf(n); 兩個(gè)參數(shù),無返回值,函數(shù)的概念,function n.官能, 功能, 作用, 職責(zé), 典禮, 儀式, 數(shù)函數(shù) vi.(器官等)活動(dòng), 運(yùn)行, 行使職責(zé) 模塊化程序設(shè)計(jì)的基本方法:分解程序的功能,使每個(gè)模塊的功能相對簡單而獨(dú)立,通過調(diào)用函數(shù)、模塊來實(shí)現(xiàn)整個(gè)功能,使程序的編寫、調(diào)試思路清晰,實(shí)現(xiàn)工業(yè)化的生產(chǎn)方式,函數(shù)的分類,有返回值(有類型,函數(shù)的定義,
6、指定函數(shù)名 指定函數(shù)的類型 指定參數(shù)名稱和類型 函數(shù)的功能,int max(int x,int y) int z; if (xy) z=x; else z=y; return z;,函數(shù)的返回值,類型與首部定義一致,函數(shù)首部,不是語句,行尾無分號,函數(shù)的定義,關(guān)于函數(shù)類型的說明,無返回值的函數(shù)類型為void; 有返回值的函數(shù),其類型根據(jù)返回值類型決定;省略類型時(shí)默認(rèn)為int(建議不要省略,函數(shù)的調(diào)用,調(diào)用函數(shù)的準(zhǔn)備工作包含或聲明,調(diào)用庫函數(shù)應(yīng)在c文件開頭部分使用 #include 要調(diào)用其他自定義函數(shù),應(yīng)在本函數(shù)體開始的聲明部分加上被調(diào)用函數(shù)的聲明(與函數(shù)首部內(nèi)容相同的一個(gè)語句),供編譯時(shí)使用
7、如果被調(diào)用函數(shù)出現(xiàn)在本函數(shù)之前可省略此部分 詳見7.4節(jié),函數(shù)的調(diào)用,函數(shù)(實(shí)參列表,調(diào)用無返回值的函數(shù)可以把上述函數(shù)直接作為語句使用,以完成其功能。 例如: stars(10,函數(shù)的調(diào)用,函數(shù)(實(shí)參列表,調(diào)用有返回值的函數(shù),應(yīng)注意返回值的處理,如賦值或輸出等。 例如: c=max(a,b); 或 printf(%d,max(a,b,函數(shù)的參數(shù),形式參數(shù)(形參,formal parameter): 定義函數(shù)時(shí)首部括號中定義的變量 實(shí)際參數(shù)(實(shí)參,actual parameter): 調(diào)用函數(shù)時(shí),在函數(shù)名后括號中使用的表達(dá)式 調(diào)用函數(shù)時(shí),實(shí)參將值傳遞給形參,函數(shù)的參數(shù),形式參數(shù)和實(shí)際參數(shù),voi
8、d main ( ) int max(int x,int y); int a, b, c; scanf (%d,%d,int max(int x,int y) int z; if (xy) z=x; else z=y; return z;,函數(shù)的參數(shù),形式參數(shù)和實(shí)際參數(shù),形參在函數(shù)調(diào)用時(shí)分配內(nèi)存單元,調(diào)用結(jié)束后釋放; 實(shí)參可以是常量、變量、表達(dá)式 實(shí)參與形參的數(shù)目、類型應(yīng)一致 c語言中,實(shí)參向形參傳遞其值“值傳遞”,不傳遞地址,形參值變化不影響實(shí)參,函數(shù)的返回值,通過函數(shù)體return語句中的表達(dá)式值獲得,例如: int max(int x,int y) return xy?x:y; 無返回值
9、的函數(shù)可省略return語句 函數(shù)執(zhí)行到return語句結(jié)束,關(guān)于例題和習(xí)題,通過本章例題、習(xí)題,不僅要掌握函數(shù)定義和調(diào)用的語法,也要掌握更多算法和編程技巧。 正如學(xué)習(xí)語文、英語要大量閱讀一樣,學(xué)習(xí)計(jì)算機(jī)語言也要閱讀例題,掌握一些基本的編程思路、技巧和表達(dá),才可能對新的問題較快地找到解決方法;同時(shí)要多了解語法規(guī)則相當(dāng)于認(rèn)字。另外,還應(yīng)對計(jì)算機(jī)的工作原理和方式多一些了解,例:最大公約數(shù)函數(shù)和最小公倍數(shù)函數(shù),求最大公約數(shù)的算法: 從1開始,逐個(gè)找公約數(shù),直至兩數(shù)中較小的一個(gè); 輾轉(zhuǎn)求余(循環(huán)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)有流程圖); . 求最小公倍數(shù)的算法: 從兩數(shù)中較大的一個(gè)開始,由小到大找公倍數(shù),直至找到; 兩
10、數(shù)的乘積 / 兩數(shù)的最大公約數(shù),函數(shù)的嵌套調(diào)用,調(diào)用最小公倍數(shù)函數(shù)(兩數(shù)乘積/兩數(shù)的最大公約數(shù)),當(dāng)中需要調(diào)用最大公倍數(shù)函數(shù) 函數(shù)的嵌套調(diào)用:在一個(gè)被調(diào)用的函數(shù)中調(diào)用另一個(gè)函數(shù) 例:p183 例7.5,函數(shù)的遞歸調(diào)用,概念:在一個(gè)被調(diào)用的函數(shù)中直接或間接地調(diào)用函數(shù)本身,函數(shù)的遞歸調(diào)用,遞歸的另一個(gè)典型實(shí)例 漢諾塔(p.189例7.8,算法講解http:/ 動(dòng)畫演示 自己玩一下,數(shù)組作為函數(shù)的參數(shù),兩個(gè)完全不同的概念 以數(shù)組元素作為函數(shù)的參數(shù) 實(shí)參是數(shù)組元素,對應(yīng)的形參是變量 以數(shù)組名作為函數(shù)的參數(shù) 實(shí)參和形參都是數(shù)組名,數(shù)組元素作為函數(shù)的參數(shù),數(shù)組元素作為實(shí)參形參是普通變量,值傳遞,int m
11、ain( ) 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;,等價(jià)于普通變量,數(shù)組作為函數(shù)的參數(shù),以數(shù)組名作為函數(shù)的參數(shù)實(shí)參向形參傳遞首元素地址,int main( ) int max(int a ,int n); int x6,i; for(i=0;i=5;i+) scanf(%d,int max(int a ,int n)
12、 int m,i; m=a0; for (i=1;im) m=ai; return m;,實(shí)參為數(shù)組名,形參為數(shù)組,不指定大小,數(shù)組作為函數(shù)的參數(shù),以數(shù)組名作為函數(shù)的參數(shù)注意事項(xiàng),形參和實(shí)參都是數(shù)組名,類型要一致; 形參中不指定數(shù)組大小,指定無實(shí)際作用; 形參數(shù)組名獲得實(shí)參首元素的地址,即形參第一個(gè)元素與實(shí)參第一個(gè)元素占用相同的地址這就是“地址傳遞”方式,形參值改變會(huì)引起實(shí)參值的變化 為了使形參獲得實(shí)參數(shù)組的大小(元素個(gè)數(shù)),通常在形參和實(shí)參對應(yīng)地增加一個(gè)數(shù)值型的參數(shù),數(shù)組作為函數(shù)的參數(shù),以數(shù)組名作為函數(shù)的參數(shù),考慮:如何寫一個(gè)排序函數(shù),多個(gè)函數(shù)組成的程序中變量引用的一些規(guī)則,c應(yīng)用程序的構(gòu)成
13、,應(yīng)用程序,源程序文件1,函數(shù)1,函數(shù)2,函數(shù)3,源程序文件2,函數(shù)1,函數(shù)2,變量作用域局部變量和全局變量,局部變量只在一個(gè)函數(shù)內(nèi)或只在一個(gè)復(fù)合語句內(nèi)有效的變量(“花括號內(nèi)有效”) 全局變量(外部變量)在一個(gè)模塊內(nèi)多個(gè)函數(shù)中均有效 擴(kuò)展的外部變量在多個(gè)程序文件的函數(shù)中有效(extern,變量作用域局部變量和全局變量,局部變量函數(shù)內(nèi)定義,只在該函數(shù)有效,include int main() int a,b,c; . float fac(int n) float t=0; . return t,主函數(shù)中不存在變量n和t,fac函數(shù)中不存在變量a和b,變量作用域局部變量和全局變量,局部變量復(fù)合語句
14、內(nèi)定義,只在語句內(nèi)有效,編譯錯(cuò)誤:變量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);,變量作用域局部變量和全局變量,局部變量 在函數(shù)內(nèi)定義,只在該函數(shù)內(nèi)有效 在復(fù)合語句內(nèi)定義,只在該語句內(nèi)有效 形式參數(shù)也是局部變量,只在函數(shù)內(nèi)有效,變量作用域局部變量和全局變量,全局變量在函數(shù)外定義,在其后的多個(gè)函數(shù)中均有效,include int a,b,c; int main() int x,y; float f1(int n) int f2( ),變量作用
15、域局部變量和全局變量,全局變量 例,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);,變量作用域局部變量和全局變量,擴(kuò)展的外部變量在多個(gè)程序文件的函數(shù)中有效(見7.9.3節(jié),在程序中可以調(diào)用其他文件中的函數(shù)(外部函數(shù)) 可通過全局變量在函數(shù)間傳遞多個(gè)數(shù)據(jù),變量作用域局部變量和全局變量
16、,判斷下面程序的運(yùn)行結(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);,變量作用域局部變量和全局變量,關(guān)于全局變量應(yīng)用的說明,全局變量命名時(shí)通常首字母大寫 通過使用全局變量,使函數(shù)能夠傳遞實(shí)參-形參和返回值之外的其他數(shù)據(jù) 濫用全局變量會(huì)造成系統(tǒng)資源占用,降低函數(shù)可移植性和程序的清晰度(p.202-
17、203) 在函數(shù)中定義了與外部變量(全局變量)同名的局部變量時(shí),外部變量被屏蔽,變量的存儲方式和生存期,動(dòng)態(tài)存儲(自動(dòng)變量,形式參數(shù)) 臨時(shí)、動(dòng)態(tài)地分配存儲單元 靜態(tài)存儲(全局變量,靜態(tài)局部變量) 程序運(yùn)行整個(gè)過程中都存在,局部變量的存儲方式和生存期,自動(dòng)局部變量(auto):函數(shù)中定義的變量和形參。函數(shù)被調(diào)用時(shí)動(dòng)態(tài)分配存儲空間,調(diào)用結(jié)束時(shí)釋放。默認(rèn)方式。 靜態(tài)局部變量(static):函數(shù)中加static定義的變量,編譯時(shí)賦初值,調(diào)用結(jié)束時(shí)保留存儲空間和當(dāng)前值。p.206-207說明。 寄存器變量(register):保存在cpu中,現(xiàn)已少用,全局變量的存儲方式和生存期,均為靜態(tài)存儲 在同一
18、文件定義點(diǎn)之前引用全局變量 引用前使用 extern 聲明 引用另一文件中的全局變量 引用前使用 extern 聲明 限制全局變量的作用域在本文件中 定義時(shí)增加 static 聲明,定義”與“聲明”的區(qū)分,函數(shù)的“定義”和“聲明,include int main( ) int f1(int); int f2(); . a=f1(5)+f2();,int f1(int n) . int f2() .,函數(shù)聲明(函數(shù)原型) 確定要調(diào)用函數(shù)的名稱、參數(shù)類型,函數(shù)調(diào)用,運(yùn)行函數(shù)代碼,變量的“定義”與“聲明,include int main( ) int a,b,c; /*定義性聲明建立存儲空間*/ extern x; /*非定義性聲明不建立存儲空間*/ . int x; /*定義性聲明建立存儲空間*/ int f1(),函數(shù)的作用域問題,內(nèi)部函數(shù)和外部函數(shù),內(nèi)部函數(shù)只能在本文件中被調(diào)用,加static定義 外部函數(shù)可供其他文件中的函數(shù)調(diào)用,加extern定義(或默認(rèn))。在調(diào)用前加extern聲明(亦可省略extern) #inclu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國有企業(yè)員工績效評估及激勵(lì)合同
- 2025年度環(huán)保項(xiàng)目評估外聘專家合作協(xié)議
- 二零二五年度日租房短租與藝術(shù)展覽合作協(xié)議
- 二零二五年度家長參與校園安全責(zé)任協(xié)議書反饋流程
- 環(huán)保能源行業(yè)項(xiàng)目投資風(fēng)險(xiǎn)免責(zé)
- 農(nóng)業(yè)行業(yè)精準(zhǔn)農(nóng)業(yè)技術(shù)支持平臺搭建方案
- 幼兒園繪本故事集征文
- 電商平臺商戶退換貨規(guī)則協(xié)議
- 高考語文大一輪總復(fù)習(xí) 文言文閱讀 文言實(shí)詞題題組訓(xùn)練試題
- 高考語文備考文言文閱讀專項(xiàng)練習(xí)之文言文斷句
- 森林防火安全生產(chǎn)工作
- 《服裝市場營銷》課件
- 網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評估報(bào)告模板
- 什么是法律談判課件
- 成考教材-數(shù)學(xué)教程(文史財(cái)經(jīng)類)
- 保安服務(wù)管理制度范文
- 汽車行業(yè)維修記錄管理制度
- 老年護(hù)理團(tuán)隊(duì)建設(shè)方案
- 《跨學(xué)科實(shí)踐活動(dòng)3 水質(zhì)檢測及自制凈水器》教學(xué)設(shè)計(jì)
- 起重吊裝作業(yè)安全培訓(xùn)考核試卷
- 開塞露的使用
評論
0/150
提交評論