




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第七章函數(shù)第1頁(yè)2前言怎樣調(diào)試程序最方便?尤其對(duì)于語(yǔ)句較多程序。第2頁(yè)37.1、概述 7.8、局部變量和全局變量7.2、函數(shù)定義普通形式 7.3、函數(shù)參數(shù)和函數(shù)值
7.4、函數(shù)調(diào)用7.5、函數(shù)嵌套調(diào)用7.6、函數(shù)遞歸調(diào)用7.7、數(shù)組作為函數(shù)參數(shù)主要內(nèi)容第3頁(yè)47.1、概述 一、C程序結(jié)構(gòu)見(jiàn)教材170頁(yè)圖7-1一個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)函數(shù)組成。每個(gè)程序有且只能有一個(gè)主函數(shù)(main),其它函數(shù)都是“子函數(shù)”。子函數(shù)能夠相互調(diào)用,但主函數(shù)不能被調(diào)用。第4頁(yè)5C程序執(zhí)行從main函數(shù)開(kāi)始,調(diào)用其它函數(shù)后,仍回到main函數(shù),程序在main函數(shù)結(jié)束時(shí)結(jié)束;全部子函數(shù)都說(shuō)平行,任何子函數(shù)都不屬于其它函數(shù);說(shuō)明分類(lèi)從用戶(hù)使用角度看:標(biāo)準(zhǔn)函數(shù)和用戶(hù)自定義函數(shù)從函數(shù)形式看:無(wú)參函數(shù)和有參函數(shù)例7.1函數(shù)調(diào)用簡(jiǎn)單例子教材170頁(yè)例7.1第5頁(yè)67.2函數(shù)定義普通形式無(wú)參函數(shù)定義普通形式有參函數(shù)定義普通形式空函數(shù)能夠總結(jié)為類(lèi)型說(shuō)明函數(shù)名(【形式參數(shù)說(shuō)明】)
{函數(shù)體}第6頁(yè)7普通情況下,函數(shù)體由兩部分組成:{【局部變量說(shuō)明】語(yǔ)句}第7頁(yè)8輸入兩個(gè)數(shù),輸出最大值。(判斷兩個(gè)數(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ù)調(diào)用函數(shù)定義第8頁(yè)97.3函數(shù)參數(shù)和函數(shù)值一個(gè)C程序由若干個(gè)函數(shù)組成,各函數(shù)調(diào)用時(shí)經(jīng)常需要傳遞一些數(shù)據(jù)。即調(diào)用函數(shù)把數(shù)據(jù)傳遞給被調(diào)用函數(shù),經(jīng)被調(diào)用函數(shù)處理后,得到一個(gè)確定結(jié)果,在返回調(diào)用函數(shù)時(shí),把結(jié)果帶回調(diào)用函數(shù)。例7.2調(diào)用函數(shù)時(shí)數(shù)據(jù)傳遞(教材176頁(yè))各函數(shù)間信息往來(lái)是由函數(shù)傳遞和返回語(yǔ)句實(shí)現(xiàn)。第9頁(yè)10一、形式參數(shù)和實(shí)際參數(shù)函數(shù)參數(shù):用于函數(shù)間數(shù)據(jù)傳遞形式參數(shù):定義函數(shù)時(shí)使用參數(shù)實(shí)際參數(shù):引用函數(shù)時(shí)使用參數(shù)說(shuō)明:定義函數(shù)時(shí)必須說(shuō)明形參類(lèi)型,形參只能是變量或數(shù)組;函數(shù)被調(diào)用前,形參不占用內(nèi)存,函數(shù)調(diào)用結(jié)束后,形參所占用內(nèi)存將被回收;實(shí)參能夠是常量、變量或表示式;實(shí)參加形參類(lèi)型必須一致;C語(yǔ)言中實(shí)參對(duì)形參數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。它僅由參數(shù)對(duì)應(yīng)位置確定,與名字無(wú)關(guān)。第10頁(yè)11例7.3讀程序,寫(xiě)出運(yùn)行結(jié)果#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頁(yè)12二、函數(shù)返回值1、返回函數(shù)值方法假如一個(gè)函數(shù)有返回值,就必須使用return語(yǔ)句一個(gè)函數(shù)中能夠有一個(gè)以上return語(yǔ)句,但不論執(zhí)行到哪個(gè)return語(yǔ)句都將結(jié)束函數(shù)調(diào)用返回主調(diào)函數(shù)return語(yǔ)句中括號(hào)能夠省略,return后面值能夠是一個(gè)表示式2、函數(shù)值類(lèi)型函數(shù)類(lèi)型即函數(shù)值類(lèi)型省略類(lèi)型說(shuō)明函數(shù)是int型return語(yǔ)句中表示式值普通應(yīng)與函數(shù)類(lèi)型一致假如不一致,則需要進(jìn)行類(lèi)型轉(zhuǎn)換。只有數(shù)值型數(shù)據(jù)能夠自動(dòng)轉(zhuǎn)換第12頁(yè)13二、函數(shù)返回值3、不需要返回值函數(shù)假如函數(shù)中沒(méi)有使用return語(yǔ)句,函數(shù)返回是一個(gè)不確定數(shù)值假如一個(gè)函數(shù)不需要返回值(表示一個(gè)過(guò)程),能夠用void做類(lèi)型說(shuō)明假如一個(gè)函數(shù)被申明為void類(lèi)型,就不允許再引用它返回值(即只能用函數(shù)語(yǔ)句形式調(diào)用)第13頁(yè)14例無(wú)返回值函數(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()沒(méi)有說(shuō)明類(lèi)型表示整型,在main()中,語(yǔ)句a=printstar();執(zhí)行函數(shù)調(diào)用,因?yàn)樵诤瘮?shù)定義時(shí)沒(méi)有定義返回值,所以返回一個(gè)隨機(jī)整數(shù)。運(yùn)行結(jié)果:**********1010就是返回隨機(jī)整數(shù)。錯(cuò)誤!在編譯時(shí)將提示以下信息:cannotconvertfrom'void'to'int‘即不能將‘void’轉(zhuǎn)換為‘int’舉例第14頁(yè)157.4函數(shù)調(diào)用一、函數(shù)調(diào)用普通形式函數(shù)名(實(shí)參列表)說(shuō)明假如調(diào)用無(wú)參函數(shù),實(shí)參能夠忽略,但括號(hào)不能省實(shí)參個(gè)數(shù)和形參普通相等實(shí)參加形參類(lèi)型應(yīng)一一對(duì)應(yīng),必要時(shí)使用類(lèi)型轉(zhuǎn)換注意不一樣系統(tǒng)中,實(shí)參計(jì)算次序不一樣。微機(jī)上普通是從右到左。為防止由此引發(fā)混亂,普通應(yīng)在調(diào)用函數(shù)前計(jì)算出實(shí)參值例7.4教材180頁(yè)第15頁(yè)16二、函數(shù)調(diào)用方式1、函數(shù)語(yǔ)句函數(shù)名(實(shí)參表列);如:printmessage()printf(“%d”,p)2、函數(shù)表示式函數(shù)返回值參加運(yùn)算如:m=max(a,b) m=3*max(a,b)3、函數(shù)參數(shù)如:printf(“Maxis%d”,max(a,b));第16頁(yè)17三、函數(shù)調(diào)用執(zhí)行過(guò)程按從右向左次序,計(jì)算實(shí)參中各表示式值按照位置,將實(shí)參值一一對(duì)應(yīng)傳給形參執(zhí)行被調(diào)用函數(shù)當(dāng)碰到return(表示式)語(yǔ)句時(shí),計(jì)算表示式值,并返回主調(diào)函數(shù)第17頁(yè)例7.5讀程序,寫(xiě)出結(jié)果#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頁(yè)19四、函數(shù)原型說(shuō)明在程序中調(diào)用函數(shù)需滿(mǎn)足一下條件:被調(diào)用函數(shù)必須存在,且遵照“先定義后使用”標(biāo)準(zhǔn)假如被調(diào)用函數(shù)定義在主調(diào)函數(shù)之后(位置),能夠先給出原型說(shuō)明說(shuō)明庫(kù)函數(shù)原型說(shuō)明存放在頭文件中,經(jīng)過(guò)使用include預(yù)處理命令將這些原型說(shuō)明插入程序中第19頁(yè)20例7.6編寫(xiě)求程序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頁(yè) floatfac(intx) { inti; floatt=1; for(i=1;i<=x;i++) t=t*i;
return(t); }21第21頁(yè)227.5函數(shù)嵌套調(diào)用嵌套調(diào)用C要求:函數(shù)定義不可嵌套,但能夠嵌套調(diào)用函數(shù)。main()調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b
第22頁(yè)23例7.7求三個(gè)數(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()調(diào)用函數(shù)dif輸出結(jié)束dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)第23頁(yè)247.6函數(shù)遞歸調(diào)用
在調(diào)用一個(gè)函數(shù)過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,成為函數(shù)遞歸調(diào)用。舉例:用遞歸方法求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頁(yè)257.7數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實(shí)參值傳遞數(shù)組名作函數(shù)參數(shù)地址傳遞在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類(lèi)型應(yīng)一致形參數(shù)組大小(二維數(shù)組第一維)可不指定形參數(shù)組名是地址變量第25頁(yè)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調(diào)用前a[0]a[1]12a調(diào)用a[0]a[1]12xy21xy交換12a返回第26頁(yè)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調(diào)用前12ax調(diào)用21ax交換21a返回第27頁(yè)28例(數(shù)組名作函數(shù)參數(shù))求學(xué)生平均成績(jī)#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頁(yè)297.8局部變量和全局變量局部變量定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效說(shuō)明:main中定義變量只在main中有效不一樣函數(shù)中同名變量,占不一樣內(nèi)存單元形參屬于局部變量局部變量可用存放類(lèi)型:autoregisterstatic(默認(rèn)為auto)第29頁(yè)30全局變量---外部變量定義:在函數(shù)外定義變量有效范圍:從定義變量位置開(kāi)始到根源文件結(jié)束應(yīng)盡可能少使用全局變量第30頁(yè)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頁(yè)32例不一樣函數(shù)中同名變量(局部變量)main(){inta,b;a=3;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度按揭車(chē)抵押借款合同資產(chǎn)評(píng)估與定價(jià)
- 2025年度玻璃幕墻設(shè)計(jì)與施工一體化服務(wù)合同
- 2025年度地暖系統(tǒng)研發(fā)與生產(chǎn)質(zhì)量標(biāo)準(zhǔn)合同
- 2025年保鮮庫(kù)自動(dòng)化控制系統(tǒng)集成合同
- 2025年度環(huán)保污水處理承包加工合同
- 2025年度老舊小區(qū)改造租賃合同范本
- 班級(jí)學(xué)習(xí)方法的互相借鑒計(jì)劃
- 供應(yīng)鏈優(yōu)化的職業(yè)發(fā)展計(jì)劃
- 美術(shù)教育研究的熱點(diǎn)與發(fā)展趨勢(shì)計(jì)劃
- 幼兒園小班的突發(fā)事件應(yīng)急預(yù)案工作計(jì)劃
- 鋼筋工專(zhuān)項(xiàng)安全教育
- 國(guó)民經(jīng)濟(jì)行業(yè)代碼(2022年版)
- 小學(xué)科學(xué)試卷分析及改進(jìn)措施(通用6篇)
- 脫硫塔內(nèi)部(玻璃鱗片防腐涂層)維修工程施工、組織、設(shè)計(jì)方案(附:質(zhì)量、安全、環(huán)境保護(hù)措施與技術(shù)交底)
- 視頻號(hào)運(yùn)營(yíng)方案
- 《深化新時(shí)代教育評(píng)價(jià)改革總體方案》學(xué)習(xí)解讀
- 中醫(yī)學(xué)課件:第三章 藏象學(xué)說(shuō)
- 山西省煤炭運(yùn)銷(xiāo)集團(tuán)有限公司王家?guī)X煤礦井筒工程施工組織設(shè)計(jì)
- 新概念英語(yǔ)第三冊(cè)課后習(xí)題答案詳解
- 有機(jī)化學(xué)共振論
- 家訪(fǎng)手記(5篇)
評(píng)論
0/150
提交評(píng)論