版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第七章函數(shù)第1頁2前言怎樣調試程序最方便?尤其對于語句較多程序。第2頁37.1、概述 7.8、局部變量和全局變量7.2、函數(shù)定義普通形式 7.3、函數(shù)參數(shù)和函數(shù)值
7.4、函數(shù)調用7.5、函數(shù)嵌套調用7.6、函數(shù)遞歸調用7.7、數(shù)組作為函數(shù)參數(shù)主要內容第3頁47.1、概述 一、C程序結構見教材170頁圖7-1一個C程序可由一個主函數(shù)和若干個函數(shù)組成。每個程序有且只能有一個主函數(shù)(main),其它函數(shù)都是“子函數(shù)”。子函數(shù)能夠相互調用,但主函數(shù)不能被調用。第4頁5C程序執(zhí)行從main函數(shù)開始,調用其它函數(shù)后,仍回到main函數(shù),程序在main函數(shù)結束時結束;全部子函數(shù)都說平行,任何子函數(shù)都不屬于其它函數(shù);說明分類從用戶使用角度看:標準函數(shù)和用戶自定義函數(shù)從函數(shù)形式看:無參函數(shù)和有參函數(shù)例7.1函數(shù)調用簡單例子教材170頁例7.1第5頁67.2函數(shù)定義普通形式無參函數(shù)定義普通形式有參函數(shù)定義普通形式空函數(shù)能夠總結為類型說明函數(shù)名(【形式參數(shù)說明】)
{函數(shù)體}第6頁7普通情況下,函數(shù)體由兩部分組成:{【局部變量說明】語句}第7頁8輸入兩個數(shù),輸出最大值。(判斷兩個數(shù)最大值用函數(shù))voidmain(){inta,b,c;c=max(a,b);printf(“Themaxis%d”,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;
return(z);}第八章函數(shù)函數(shù)調用函數(shù)定義第8頁97.3函數(shù)參數(shù)和函數(shù)值一個C程序由若干個函數(shù)組成,各函數(shù)調用時經常需要傳遞一些數(shù)據(jù)。即調用函數(shù)把數(shù)據(jù)傳遞給被調用函數(shù),經被調用函數(shù)處理后,得到一個確定結果,在返回調用函數(shù)時,把結果帶回調用函數(shù)。例7.2調用函數(shù)時數(shù)據(jù)傳遞(教材176頁)各函數(shù)間信息往來是由函數(shù)傳遞和返回語句實現(xiàn)。第9頁10一、形式參數(shù)和實際參數(shù)函數(shù)參數(shù):用于函數(shù)間數(shù)據(jù)傳遞形式參數(shù):定義函數(shù)時使用參數(shù)實際參數(shù):引用函數(shù)時使用參數(shù)說明:定義函數(shù)時必須說明形參類型,形參只能是變量或數(shù)組;函數(shù)被調用前,形參不占用內存,函數(shù)調用結束后,形參所占用內存將被回收;實參能夠是常量、變量或表示式;實參加形參類型必須一致;C語言中實參對形參數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。它僅由參數(shù)對應位置確定,與名字無關。第10頁11例7.3讀程序,寫出運行結果#include<stdio.h> intsum(inta,intb) { a=a+b; return(a); } voidmain() { inta=1,b=3,c; c=sum(a,b); printf(“%d+%d=%d\n",a,b,c); }值傳遞,單向傳遞第11頁12二、函數(shù)返回值1、返回函數(shù)值方法假如一個函數(shù)有返回值,就必須使用return語句一個函數(shù)中能夠有一個以上return語句,但不論執(zhí)行到哪個return語句都將結束函數(shù)調用返回主調函數(shù)return語句中括號能夠省略,return后面值能夠是一個表示式2、函數(shù)值類型函數(shù)類型即函數(shù)值類型省略類型說明函數(shù)是int型return語句中表示式值普通應與函數(shù)類型一致假如不一致,則需要進行類型轉換。只有數(shù)值型數(shù)據(jù)能夠自動轉換第12頁13二、函數(shù)返回值3、不需要返回值函數(shù)假如函數(shù)中沒有使用return語句,函數(shù)返回是一個不確定數(shù)值假如一個函數(shù)不需要返回值(表示一個過程),能夠用void做類型說明假如一個函數(shù)被申明為void類型,就不允許再引用它返回值(即只能用函數(shù)語句形式調用)第13頁14例無返回值函數(shù)
voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}printstar(){printf("**********");}main(){inta;a=printstar();printf("%d",a);}voidprintstar(){printf("**********");}main(){inta;a=printstar();printf("%d",a);}正確。函數(shù)printstar()沒有說明類型表示整型,在main()中,語句a=printstar();執(zhí)行函數(shù)調用,因為在函數(shù)定義時沒有定義返回值,所以返回一個隨機整數(shù)。運行結果:**********1010就是返回隨機整數(shù)。錯誤!在編譯時將提示以下信息:cannotconvertfrom'void'to'int‘即不能將‘void’轉換為‘int’舉例第14頁157.4函數(shù)調用一、函數(shù)調用普通形式函數(shù)名(實參列表)說明假如調用無參函數(shù),實參能夠忽略,但括號不能省實參個數(shù)和形參普通相等實參加形參類型應一一對應,必要時使用類型轉換注意不一樣系統(tǒng)中,實參計算次序不一樣。微機上普通是從右到左。為防止由此引發(fā)混亂,普通應在調用函數(shù)前計算出實參值例7.4教材180頁第15頁16二、函數(shù)調用方式1、函數(shù)語句函數(shù)名(實參表列);如:printmessage()printf(“%d”,p)2、函數(shù)表示式函數(shù)返回值參加運算如:m=max(a,b) m=3*max(a,b)3、函數(shù)參數(shù)如:printf(“Maxis%d”,max(a,b));第16頁17三、函數(shù)調用執(zhí)行過程按從右向左次序,計算實參中各表示式值按照位置,將實參值一一對應傳給形參執(zhí)行被調用函數(shù)當碰到return(表示式)語句時,計算表示式值,并返回主調函數(shù)第17頁例7.5讀程序,寫出結果#include<stdio.h>intiabs(floatx){return(x>0?x:-x);}voidmain(){floatx=-1.2,y;y=iabs(2*x);printf("x=%f,iabs(x)=%f\n",x,y);}18第18頁19四、函數(shù)原型說明在程序中調用函數(shù)需滿足一下條件:被調用函數(shù)必須存在,且遵照“先定義后使用”標準假如被調用函數(shù)定義在主調函數(shù)之后(位置),能夠先給出原型說明說明庫函數(shù)原型說明存放在頭文件中,經過使用include預處理命令將這些原型說明插入程序中第19頁20例7.6編寫求程序voidmain(){floatc;intm,n;
floatfac(intx);printf(“inputm,n:”);scanf(“%d%d”,&m,&n);c=fac(n)/(fac(m)*fac(n-m));printf(“Theresultis%8.1f”,c);}第20頁 floatfac(intx) { inti; floatt=1; for(i=1;i<=x;i++) t=t*i;
return(t); }21第21頁227.5函數(shù)嵌套調用嵌套調用C要求:函數(shù)定義不可嵌套,但能夠嵌套調用函數(shù)。main()調用函數(shù)a結束a函數(shù)b函數(shù)調用函數(shù)b
第22頁23例7.7求三個數(shù)中最大數(shù)和最小數(shù)差值intdif(intx,inty,intz);
intmax(intx,inty,intz);
intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);d=dif(a,b,c);printf("Max-Min=%d\n",d);}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()調用函數(shù)dif輸出結束dif函數(shù)max函數(shù)調用函數(shù)max調用函數(shù)minmin函數(shù)第23頁247.6函數(shù)遞歸調用
在調用一個函數(shù)過程中又出現(xiàn)直接或間接地調用該函數(shù)本身,成為函數(shù)遞歸調用。舉例:用遞歸方法求n!。floatfac(intn){floatf;if(n<0){printf("n<0,dataerror!");f=-1;}elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}voidmain(){intn;floaty;printf("inputainternumer:");scanf("%d",&n);y=fac(n);printf("%d!=%15.0f\n",n,y);}第24頁257.7數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實參值傳遞數(shù)組名作函數(shù)參數(shù)地址傳遞在主調函數(shù)與被調函數(shù)分別定義數(shù)組,且類型應一致形參數(shù)組大小(二維數(shù)組第一維)可不指定形參數(shù)組名是地址變量第25頁26例數(shù)組元素與數(shù)組名作函數(shù)參數(shù)比較(數(shù)組元素作為參數(shù))voidswap(intx,inty){intz;z=x;x=y;y=z;}main(){inta[2]={1,2};
swap(a[0],a[1]);printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);}值傳遞12a調用前a[0]a[1]12a調用a[0]a[1]12xy21xy交換12a返回第26頁27例數(shù)組元素與數(shù)組名作函數(shù)參數(shù)比較(數(shù)組名作為參數(shù))voidswap(intx[]){intz;z=x[0];x[0]=x[1];x[1]=z;}main(){inta[2]={1,2};
swap(a);printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);}地址傳遞12a調用前12ax調用21ax交換21a返回第27頁28例(數(shù)組名作函數(shù)參數(shù))求學生平均成績#include<stdio.h>
floataverage(intstu[10],intn);voidmain(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score,10);printf("Averageis:%.2f",av);}floataverage(int
stu[10],intn){inti;floatav,total=0;for(i=0;i<n;i++)total+=stu[i];av=total/n;returnav;}
intstu[]..2109score562312….….88stu第28頁297.8局部變量和全局變量局部變量定義:在函數(shù)內定義,只在本函數(shù)內有效說明:main中定義變量只在main中有效不一樣函數(shù)中同名變量,占不一樣內存單元形參屬于局部變量局部變量可用存放類型:autoregisterstatic(默認為auto)第29頁30全局變量---外部變量定義:在函數(shù)外定義變量有效范圍:從定義變量位置開始到根源文件結束應盡可能少使用全局變量第30頁31floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效intp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2作用范圍p,q作用范圍第31頁32例不一樣函數(shù)中同名變量(局部變量)main(){inta,b;a=3;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工總承包合同(31篇)
- 企業(yè)招聘計劃書(5篇)
- 關于倉庫年終工作總結(30篇)
- 銷售年終工作總結(15篇)
- 學習活動實施方案(3篇)
- 墻布施工合同
- 開學第一周:養(yǎng)正教育周活動方案
- 打機井工程施工組織設計方案
- 2024年復產復工應急處置方案
- 知識產權工作方案
- 浙江省嘉興市桐鄉(xiāng)六中教育集團實驗中學2024-2025學年七年級上學期期中科學試題(無答案)
- 【四年級】上冊道德與法治-4上3單元第9課《正確認識廣告》
- 四川省成都市新津中學2024-2025學年八年級上學期10月月考英語試卷
- 廣東省東莞市多校2024-2025學年三年級上學期第二次月考數(shù)學試卷
- 東方財富在線測評題答案
- 第11課 多彩風車園(教案)三年級上冊信息技術粵教版B版
- 分布式光伏合同小E施工版(個人學習參考模版)
- 2024秋初中化學九年級上冊教學設計(教案)跨學科實踐活動5
- 陜煤集團筆試題庫及答案
- 學生對學校滿意度評價表
- 關于違規(guī)收受禮品禮金警示教育心得體會范文
評論
0/150
提交評論