版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第七章 函數(shù)第1頁第1頁第7章 函數(shù)7.1 函數(shù)定義 7.2 函數(shù)調(diào)用7.3 函數(shù)闡明7.4 return語句7.5 函數(shù)形參與實(shí)參7.6 遞歸7.7 函數(shù)變量 7.8 內(nèi)部函數(shù)與外部函數(shù) 7.9 作用域規(guī)則第2頁第2頁一、引入 某學(xué)生成績管理系統(tǒng): 輸入若干個學(xué)生姓名、某課程期中和期末成績,并計(jì)算每個學(xué)生總評成績; 計(jì)算總評成績分?jǐn)?shù)段情況; 輸出所有學(xué)生姓名、期中、期末和總評成績; 查詢某個學(xué)生總評成績。7.1 函數(shù)定義第3頁第3頁 模塊化設(shè)計(jì)思想:將一個程序按照功效分解成一個一個模塊。 在C語言中,一個函數(shù)就是一個模塊。第4頁第4頁C程序有一個主函數(shù)和若干個其它函數(shù)主函數(shù)調(diào)用其它函數(shù),其
2、它函數(shù)可互相調(diào)用函數(shù)需要定義后才干使用函數(shù)分為庫函數(shù)和自定義函數(shù)注:第5頁第5頁例: #include stdio.h void print(); /*函數(shù)闡明*/ void main() int i; for (i=0;iy?x:y; return(z); 例 無返回值函數(shù) void swap(int x,int y ) int temp; temp=x; x=y; y=temp; 第9頁第9頁 注意: 函數(shù)定義中不能包括另一個函數(shù)定義。也就是說,函數(shù)定義不能嵌套。在C語言中,函數(shù)定義是并列關(guān)系,不能一個包括另一個。 例:下面定義是錯誤,該程序試圖在print函數(shù)定義中定義另一個函數(shù)prnl
3、ine。 void print() putchar(*); void prnline() /* 錯誤 */ putchar(n); 第10頁第10頁7.2 函數(shù)調(diào)用1、函數(shù)調(diào)用形式 調(diào)用有參函數(shù): 被調(diào)用函數(shù)名(參數(shù)列表) 調(diào)用無參函數(shù): 被調(diào)用函數(shù)名() 注: 其中參數(shù)表示式個數(shù)與函數(shù)定義個數(shù)、數(shù)據(jù)類型都應(yīng)當(dāng)匹配,若不匹配也許會出現(xiàn)預(yù)料不到結(jié)果。此時參數(shù)叫實(shí)際參數(shù),簡稱實(shí)參。第11頁第11頁2、函數(shù)調(diào)用方式 函數(shù)調(diào)用形式出現(xiàn)在表示式中。 這種方式要求函數(shù)是帶返回值。 比如,x=sum(n1,n2); 函數(shù)調(diào)用形式作為獨(dú)立語句出現(xiàn)。 這種情況下,函數(shù)普通不帶返回值。 比如:print(); 函
4、數(shù)調(diào)用形式作為另一個函數(shù)實(shí)參出現(xiàn)。 這時,函數(shù)必須是有返回值。 printf(sum=%d, sum(n1,n2);第12頁第12頁不使用自定義函數(shù)求最大值main() int a,b,c,d,m;scanf(%d%d%d%d,&a,&b,&c,&d); a=ab?a:b; c=cd?c:d; m=ac?a:c; printf(max is %d,m); 使用自定義函數(shù)求最大值int max(int x,int y) int z; z=xy?x:y; return(z); main()int a,b,c,d,m;scanf(%d%d%d%d,&a,&b,&c,&d);a=max(a,b);c=
5、max(c,d);m=max(a,c);printf(max is %d,m); 第13頁第13頁3、函數(shù)嵌套調(diào)用 在C語言中,函數(shù)是并列、獨(dú)立一個一個模塊,通過調(diào)用與被調(diào)用相關(guān)聯(lián)。在一個函數(shù)定義中不能夠定義另一個函數(shù),但是允許在一個函數(shù)中調(diào)用另一個函數(shù),這就是所謂函數(shù)定義不能夠嵌套,函數(shù)調(diào)用則允許嵌套。第14頁第14頁#include stdio.hvoid print(); /*函數(shù)闡明*/void prnline(); /*函數(shù)闡明*/void main() int i; for (i=0;i10;i+) print(); /*函數(shù)調(diào)用*/ putchar( ); void print(
6、) /*函數(shù)定義*/ putchar(*); prnline(); /*函數(shù)調(diào)用*/ return; void prnline() /*函數(shù)定義*/ putchar(-); 例:第15頁第15頁調(diào)用關(guān)系圖void main() int i; for (i=0;i10;i+) print(); putchar( ); void print() putchar(*); prnline(); return; void prnline() putchar(-); 調(diào)用返回返回調(diào)用第16頁第16頁7.3 函數(shù)闡明函數(shù)闡明其普通形式為: 函數(shù)返回值數(shù)據(jù)類型闡明符 被調(diào)用函數(shù)名(形參表); 括號內(nèi)形參表能夠
7、給出形參數(shù)據(jù)類型名和形參名,也能夠只給出形參類型名。第17頁第17頁 在語言中,并不需要在任何情況下都必須對函數(shù)進(jìn)行函數(shù)闡明,能夠省略對被調(diào)用函數(shù)函數(shù)闡明用三種情況。 (1) 被調(diào)用函數(shù)函數(shù)定義出現(xiàn)在調(diào)用它函數(shù)之前。 (2) 對C編譯提供庫函數(shù)調(diào)用不需要再作函數(shù)闡明,但必須把該函數(shù)頭文獻(xiàn)用#include 命令包括在源程序最前面。第18頁第18頁#include stdio.hvoid print() /*函數(shù)定義*/ putchar(*);void main() int i; for (i=0;i10;i+) print(); /*函數(shù)調(diào)用*/ putchar(n);例:第19頁第19頁隨堂
8、練習(xí)1、定義函數(shù)返回兩個數(shù)中較大數(shù),在主函數(shù)中通過調(diào)用該函數(shù)求三個數(shù)之中較大數(shù)并輸出。編寫主函數(shù)調(diào)用該函數(shù)。第20頁第20頁2、編寫power函數(shù)實(shí)現(xiàn)求xn使程序完整。#include double power(double x,int n) main() int i; double p; scanf(“%d”,&); p=power(3.0,i); printf(“%f”,p);隨堂練習(xí)第21頁第21頁7.4 return 語句函數(shù)被調(diào)用時,可使用return語句返回,當(dāng)執(zhí)行Return語句時,程序控制馬上返回到調(diào)用環(huán)境。語法: return; 或return 表示式; 第22頁第22頁注意
9、:(1) return(表示式); 和return 表示式;都是正確。(2) 帶返回值函數(shù)只能返回一個值。(3) 若定義函數(shù)不帶返回值,可用void定義函數(shù)類型(4) return語句中表示式與函數(shù)返回值類型不匹配時,以函數(shù)定義時返回類型為準(zhǔn)。第23頁第23頁7.5 函數(shù)形參與實(shí)參 函數(shù)調(diào)用時需要傳遞數(shù)據(jù)。調(diào)用函數(shù)要將實(shí)參值傳送給被調(diào)用函數(shù)形參。若函數(shù)定義首部是 double power(double x,int n) /* 函數(shù)定義 */調(diào)用形式是能夠是power(y,m), 也能夠是power(3.0,5)。其中,x和n是形式參數(shù),y和m是實(shí)際參數(shù),3.0和5也是實(shí)際參數(shù)。第24頁第24頁
10、函數(shù)參數(shù)調(diào)用方式: 傳值 普通變量 傳(地)址 指針或數(shù)組第25頁第25頁 實(shí)際參數(shù)與形式參數(shù)參數(shù)個數(shù)、數(shù)據(jù)類型和次序都應(yīng)該一致,假如數(shù)據(jù)類型不一致,系統(tǒng)將按照自動轉(zhuǎn)換規(guī)則進(jìn)行轉(zhuǎn)換。 調(diào)用函數(shù)實(shí)參能夠是0、1或多個。實(shí)參能夠是常量、變量或表示式,形參只能是變量。 數(shù)據(jù)傳遞是單向,只能是從實(shí)參向形參傳遞。函數(shù)運(yùn)行時,形參改變不影響實(shí)參,實(shí)參和形參占用不同內(nèi)存單元。 當(dāng)一個函數(shù)調(diào)用另一個函數(shù)時,被調(diào)用函數(shù)必須存在。 形參變量只有在被調(diào)用時,才分派內(nèi)存單元,形參只在該函數(shù)內(nèi)有效。 傳值調(diào)用特點(diǎn)第26頁第26頁 形參是標(biāo)識了一個存儲空間變量名,這個存儲空間是在函數(shù)被調(diào)用時由系統(tǒng)分派,被調(diào)用函數(shù)執(zhí)行完畢
11、,則形參空間將被系統(tǒng)釋放掉。假如是多次調(diào)用,每次調(diào)用系統(tǒng)都會重新為形參分派空間。因此,形參所占空間是沒有“記憶”。被調(diào)用函數(shù)內(nèi)形參值無論如何改變,都不會影響實(shí)參改變 。第27頁第27頁void swap(int x,int y) int temp; printf(before change x=%d,y=%dn,x,y); temp=x; x=y; y=temp; printf(changed x=%d,y=%dn,x,y);Void main() int a,b; printf(input two number:n); scanf(%d,%d,&a,&b); printf(input num
12、ber is:a=%d,b=%dn,a,b); swap(a,b); printf(input number is:a=%d,b=%dn,a,b);例:第28頁第28頁例:求3到100之間所有素?cái)?shù)。用函數(shù)判斷一個數(shù)是否是素?cái)?shù),函數(shù)返回值是1表示該數(shù)是素?cái)?shù),函數(shù)返回值是0,則表示該數(shù)不是素?cái)?shù)。 #include stdio.h #include math.h int prime(int); /*函數(shù)闡明 */ void main() int i; for (i=3;i=100;i+) if (prime(i)=1) /*函數(shù)調(diào)用 */ printf(%4d,i); printf(n,i); 第2
13、9頁第29頁int prime(int i) /* 函數(shù)定義 */ int j,k,flag=1; k=i; i=sqrt(i); for (j=2;j=i;j+) if (k%j=0) flag=0; break; return flag; 第30頁第30頁作 業(yè)1、定義一個函數(shù)MYABS,求x+y絕對值,用主函數(shù)調(diào)用該函數(shù)。2、定義一個函數(shù)IS_DIGIT(ch),當(dāng)ch是0-9數(shù)字,返回1,不然返回0。用主函數(shù)調(diào)用該函數(shù)。第31頁第31頁#include stdio.h#include stdlib.hlong factorial(int); /*函數(shù)闡明 */void main() i
14、nt i,j; long sum; sum=0; for (i=0;i=1;i-) product= product*i; return product;第33頁第33頁7.6 遞 歸 調(diào) 用 一個函數(shù)定義中使用調(diào)用形式間接或直接調(diào)用自己就稱為遞歸調(diào)用。 含有直接或間接調(diào)用自己函數(shù)稱為遞歸函數(shù)。語言允許函數(shù)遞歸調(diào)用。執(zhí)行遞歸函數(shù)將重復(fù)調(diào)用其本身,每調(diào)用一次就進(jìn)入新一層。 遞歸調(diào)用需要設(shè)置條件來終止自調(diào)用過程。第34頁第34頁 void f() printf(*); f(); 直接調(diào)用自己第35頁第35頁 int f1(int x) int y; f2(y); 直接調(diào)用自己 int f2(int
15、 x) int y; f1(y) 第36頁第36頁 void f() printf(*); f(); 假如在主函數(shù)中直接調(diào)用該函數(shù),程序?qū)⒉粩嗟卮蛴 ?”號,無休止地調(diào)用其本身。 第37頁第37頁int sum(int n) if(n1) f=power(n-1)*n; else f=1; return f;main() int n; long x; printf(“input an integer number:n”); scanf(“%d”,&n); x=power(n); printf(“%d!=%ldn”,n,x); getch();第39頁第39頁編寫遞歸程序關(guān)鍵是: (1) 結(jié)構(gòu)遞
16、歸表示式。將n階問題轉(zhuǎn)化為比n階小問題(當(dāng)然也能夠?qū)階問題轉(zhuǎn)化為比n階大問題),轉(zhuǎn)化以后問題與本來問題解法是相同。 (2) 尋找一個明確遞歸結(jié)束條件,稱為遞歸出口。第40頁第40頁7.7 內(nèi)部變量與外部變量 在C語言中,每個變量都有自己作用域,變量作用域是指變量作用范圍。按作用域可分:內(nèi)部變量和外部變量。 內(nèi)部變量局部變量 定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效 注意: * main中定義變量只在main中有效。 * 不同函數(shù)中同名變量,占不同內(nèi)存單元。 * 形參屬于局部變量。第41頁第41頁float f1(int a) int b,c; .char f2(int x,int y) int
17、i,j; main() int m,n; .a,b,c有效x,y,i,j有效m,n有效例題: 不同函數(shù)中同名變量main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b);第42頁第42頁 外部變量全局變量 定義:在函數(shù)外定義,為本文獻(xiàn)所有函數(shù)共用 有效范圍:從定義變量位置開始到本源文獻(xiàn)結(jié)束,及有extern闡明其它源文獻(xiàn) 闡明: extern 數(shù)據(jù)類型 變量表; 注意:
18、在一個源程序所有文獻(xiàn)中只能定義一次 若外部變量與局部變量同名,則外部變量被屏蔽 第43頁第43頁例: 外部變量闡明與定義int max(int x, int y) int z; z=xy?x:y; return(z);main() extern int a,b; printf(max=%d, max(a,b);int a=13,b=-8;extern int a,b;int max() int z; z=ab?a:b; return(z);main() printf(max=%d,max();int a=13,b=-8;運(yùn)營結(jié)果:max=13闡明定義第44頁第44頁外部變量定義與外部變量說明不
19、同 定義 闡明次數(shù): 只能1次 可闡明多次位置: 所有函數(shù)之外 函數(shù)內(nèi)或函數(shù)外分派內(nèi)存: 分派內(nèi)存,可初始化 不分派內(nèi)存,不可初始化第45頁第45頁int a=3,b=5;max(int a, int b) int c; c=ab?a:b; return(c);main() int a=8; printf(max=%d,max(a,b);例: 外部變量與局部變量運(yùn)營結(jié)果:max=8第46頁第46頁int f1(int xb) extern int xa; return(xa*xb);main() extern int xb; int xa=5; printf(“xa=%d,xb=%d,result=%d”, xa,xb,f1(xa);int xa=3,xb=4;例: 外部變量定義和使用運(yùn)營結(jié)果:xa=5,xb=4,result=15第47頁第47頁變量屬性: 數(shù)據(jù)類型 存儲類型存儲屬性: 生存期:變量在某一時刻存在-靜態(tài)變量與動態(tài)變量 作用域:變量在某區(qū)域內(nèi)有效-局部變量與全局
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 展覽展示策劃公司合伙協(xié)議
- 醫(yī)療設(shè)備采購合同管理
- 果園菜場租賃條款
- 醫(yī)療設(shè)備租賃公司招聘合同范例
- 醫(yī)療器械保養(yǎng)操作方案
- 企業(yè)購房合同模板二手房買賣
- 大型項(xiàng)目合同攪拌站租賃合同
- 建筑垃圾清理起重機(jī)服務(wù)協(xié)議
- 垃圾焚燒發(fā)電招投標(biāo)文件目錄
- 新能源項(xiàng)目在線招投標(biāo)模板
- 2024年深圳市福田區(qū)選用機(jī)關(guān)事業(yè)單位輔助人員和社區(qū)專職工作者365人高頻難、易錯點(diǎn)500題模擬試題附帶答案詳解
- T-CECS120-2021套接緊定式鋼導(dǎo)管施工及驗(yàn)收規(guī)程
- 人教版八年級上冊數(shù)學(xué)期中考試試題含答案詳解
- 美國實(shí)時總統(tǒng)大選報(bào)告
- 大學(xué)體育理論(山東聯(lián)盟)智慧樹知到課后章節(jié)答案2023年下泰山學(xué)院
- 研究生二級學(xué)科證明
- 六年級上冊英語教案 Module 9 Unit 2 I want to go to Shanghai. 外研版(三起)
- 從PK-PD看抗菌藥物的合理應(yīng)用
- 癃閉中醫(yī)護(hù)理方案解答
- MCGS與1500連接配置說明
- 高邊坡支護(hù)腳手架搭設(shè)方案
評論
0/150
提交評論