08-函數(shù)省公開課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第1頁(yè)
08-函數(shù)省公開課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第2頁(yè)
08-函數(shù)省公開課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第3頁(yè)
08-函數(shù)省公開課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第4頁(yè)
08-函數(shù)省公開課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

8函數(shù)1第1頁(yè)一、C程序模塊一個(gè)C程序可由一個(gè)main()函數(shù)和多個(gè)其它函數(shù)組成。8.1C程序模塊2第2頁(yè)

其它函數(shù)指是:

系統(tǒng)函數(shù)由系統(tǒng)提供,放在頭文件中自編函數(shù)由程序設(shè)計(jì)人員編寫3第3頁(yè)二、函數(shù)調(diào)用如:mainfunafunbfuncfundfunxfunyP1374第4頁(yè)

全部函數(shù)都含有兩種特征:

返回值參數(shù)(返回值和參數(shù)都是可缺省)5第5頁(yè)8.2庫(kù)函數(shù)一、庫(kù)函數(shù)介紹系統(tǒng)自帶標(biāo)標(biāo)準(zhǔn)庫(kù)函數(shù)依據(jù)不一樣功效作用放在不一樣頭文件中。6第6頁(yè)如:stdio.h

用于標(biāo)準(zhǔn)輸入/輸出math.h

用于數(shù)學(xué)計(jì)算ctype.h

用于字符處理string.h

用于字串處理time.h

用于時(shí)間/日期處理dir.h

用于控制目錄和路徑graphics.h

用于圖形操作dos.hbios.h

用于接口處理

7第7頁(yè)二、庫(kù)函數(shù)作用

使程序更含有“獨(dú)立性”和“可移植”性。

使用時(shí)只需在程序開頭加上一條語(yǔ)句:#include<.h>依據(jù)使用函數(shù)來確定

使程序含有“模塊化”。8第8頁(yè)例1:求兩個(gè)浮點(diǎn)型數(shù)值x/y余數(shù)。(注意:不能寫成3.6%1.7)#include<stdio.h>#include<math.h>main(){floatx,y,z;scanf("%f%f",&x,&y);z=fmod(x,y);printf("z=%f",z);}9第9頁(yè)8.3自定義函數(shù)一、自定義函數(shù)作用

使程序含有“積木”功效。(模塊化)

使程序含有“重構(gòu)”功效。10第10頁(yè)二、函數(shù)定義及調(diào)用定義[存放類型符][返回值類型符]函數(shù)名([形參表列])形參說明{說明部分語(yǔ)句}11第11頁(yè)調(diào)用

變量名=函數(shù)名([實(shí)參表列]);(變量名類型必須與函數(shù)返回值類型相同)

函數(shù)名([實(shí)參表列]);12第12頁(yè)三、函數(shù)申明普通情況下,函數(shù)被調(diào)用之前必須要有函數(shù)申明。(函數(shù)申明意義在于提供函數(shù)原型)函數(shù)申明格式:[返回值類型符]函數(shù)名(形參類型);13第13頁(yè)例1:求二個(gè)數(shù)中最大值

intmax(x,y)intx,y;{intz;

z=x>y?x:y;return(z);}用return語(yǔ)句,返回函數(shù)值?;颍篿ntmax(intx,inty)

{intz;

z=x>y?x:y;return(z);}四、舉例14第14頁(yè)經(jīng)過函數(shù)調(diào)用求二個(gè)數(shù)中最大值:#include<stdio.h>intmax(int,int);/*函數(shù)原型*/main(){inta,b,t;scanf("%d%d",&a,&b);t=max(a,b);/*函數(shù)調(diào)用*/printf("valueofmaximizeis:t=%d",t);}intmax(intx,inty)/*函數(shù)定義*/{intz;z=x>y?x:y;return(z);}15第15頁(yè)#include<stdio.h>

floatadd();

/*函數(shù)說明*/

main()

{floata,b,c;

scanf("%f,%f",&a,&b);

c=add(a,b);

/*函數(shù)調(diào)用*/

printf("sum=%f";c);}floatadd(floatx,floaty);/*函數(shù)定義*/{floatz;z=x+y;returnz;}例2:求二實(shí)數(shù)之和若函數(shù)定義放在main()函數(shù)之前可省略函數(shù)說明。16第16頁(yè)#include<stdio.h>

floatadd(floatx,floaty);/*函數(shù)定義*/

{floatz;

z=x+y;

returnz;

}

main()

{ floata,b,c;

scanf(“%f,%f”,&a,&b);

c=add(a,b);/*函數(shù)調(diào)用*/

printf("sum=%f";c);}例3:求二實(shí)數(shù)之和(將例2程序改寫以下:)17第17頁(yè)1.形參加實(shí)參調(diào)用時(shí):實(shí)參值單向傳遞形參。函數(shù)被調(diào)用時(shí),暫時(shí)分配單元給形參,調(diào)用完成,這些單元被釋放。實(shí)參:

出現(xiàn)在調(diào)用函數(shù)中,形參:出現(xiàn)被調(diào)用函數(shù)中。五、自定義函數(shù)中幾個(gè)主要特征18第18頁(yè)

實(shí)參可為表示式,只傳遞表示式值。

實(shí)參、形參類型一致。

可在形參表列中對(duì)形參說明。注:19第19頁(yè)2.函數(shù)返回或return變量值;經(jīng)過return語(yǔ)句將流程返回主調(diào)函數(shù)。

return;函數(shù)無返回值

return表示式值;20第20頁(yè)3.函數(shù)名要選擇一個(gè)簡(jiǎn)練有意義名字作為函數(shù)名。從函數(shù)名能夠反應(yīng)出函數(shù)功效。P139例5.7,例5.821第21頁(yè)8.4數(shù)組作為函數(shù)參數(shù)一、數(shù)組元素作為函數(shù)參數(shù)使用方法:把數(shù)組元素作為函數(shù)實(shí)參。因?yàn)閿?shù)組元素性質(zhì)與相同類型簡(jiǎn)單變量性質(zhì)完全相同,所以,把數(shù)組元素作為函數(shù)參數(shù)也和簡(jiǎn)單變量一樣。作用:傳值。22第22頁(yè)#include<stdio.h>#include<conio.h>main(){ floatb[3]; floatave; b[0]=21.3; b[1]=b[0]/3; b[2]=8.2; printf("b[0]=%4.1f\tb[1]=%4.1f\t

b[2]=%4.1f\n",b[0],b[1],b[2]); floatExpfun1(floata,floatb,floatc);/*函數(shù)說明*/ ave=Expfun1(b[0],b[1],b[2]);/*函數(shù)調(diào)用*/ printf("ave=%4.1f\n",ave); printf("b[0]=%4.1f\tb[1]=%4.1f\t

b[2]=%4.1f\n",b[0],b[1],b[2]);例2:將數(shù)組元素作為函數(shù)實(shí)參數(shù)23第23頁(yè) getch();}floatExpfun1(floata,floatb,floatc)/*函數(shù)定義*/{ floatsum,aver; sum=a+b+c; a=a+5.5; b=b+5.5; c=c+5.5; aver=sum/3.0; printf("a=%4.1f\tb=%4.1f\tc=%4.1f\n",a,b,c); return(aver);}24第24頁(yè)b[0]=21.3b[1]=7.1b[2]=8.2/*調(diào)用前*/a=26.8b=12.6c=13.7ave=12.2b[0]=21.3b[1]=7.1b[2]=8.2/*調(diào)用后值未變*/程序運(yùn)行結(jié)果:25第25頁(yè)

1.數(shù)組名作用數(shù)組名代表是數(shù)組起始地址;也就是第1個(gè)元素地址。26第26頁(yè)使用數(shù)組名作為函數(shù)參數(shù)時(shí),形參和實(shí)參必須是同一類型數(shù)組名,系統(tǒng)采取地址傳送方式進(jìn)行數(shù)據(jù)傳遞,即實(shí)參首地址傳遞給形參首地址,實(shí)參加形參共享相同數(shù)據(jù)單元。使用方法:函數(shù)實(shí)參和形參都必須是數(shù)組名。作用:傳址。2.把數(shù)組名作為函數(shù)參數(shù)規(guī)則(能夠在函數(shù)中修改數(shù)組元素值。)27第27頁(yè)#include<stdio.h>#include<conio.h>main(){ floatExpfun2(floata[4]);/*函數(shù)說明*/ floats[4]={88.5,90.5,70,71}; floatave; printf("s[0]=%4.1f\ts[1]=%4.1f\ts[2]=%4.1f\t

s[3]=%4.1f\n",s[0],s[1],s[2],s[3]); ave=Expfun2(s);/*函數(shù)調(diào)用*/ printf("ave=%4.1f\n",ave); printf("s[0]=%4.1f\ts[1]=%4.1f\ts[2]=%4.1f\t

s[3]=%4.1f\n",s[0],s[1],s[2],s[3]); getch();}例1:將數(shù)組名作為函數(shù)形參和實(shí)參28第28頁(yè)floatExpfun2(floata[4])/*函數(shù)定義*/{ floatsum,aver; sum=a[0]+a[1]+a[2]+a[3]; aver=sum/3.0; a[0]=a[0]/10; a[1]=a[1]/10; a[2]=a[2]/10; a[3]=a[3]/10; printf("a[0]=%4.1f\ta[1]=%4.1f\ta[2]=%4.1f\t

a[3]=%4.1f\n",a[0],a[1],a[2],a[3]); return(aver);}29第29頁(yè)s[0]=88.5s[1]=90.5s[2]=70.0s[3]=71.0

/*調(diào)用前*/a[0]=8.9a[1]=9.1a[2]=7.0a[3]=7.1

/*調(diào)用中*/ave=106.7s[0]=8.9s[1]=9.1s[2]=7.0s[3]=7.1

/*調(diào)用后值改變*/程序運(yùn)行結(jié)果:30第30頁(yè)顯然,數(shù)組s元素值在調(diào)用前后生了改變,數(shù)組s和a共用一段內(nèi)存單元:88.590.570.071.0

s[0]s[1]s[2]s[3]a[0]a[1]a[2]a[3]運(yùn)行結(jié)果分析:P43例5.10,例5.11,例5.1231第31頁(yè)三、多維數(shù)組名作為函數(shù)參數(shù)P148例5.1432第32頁(yè)P(yáng)151例5.16,例5.17,例5.188.5嵌套調(diào)用33第33頁(yè)8.6遞歸調(diào)用一、遞歸特點(diǎn)一個(gè)問題能夠成為遞歸必須具備條件是:后一部分與原始問題類似后一部分是原始問題簡(jiǎn)化34第34頁(yè)1.直接遞歸調(diào)用:函數(shù)直接調(diào)用本身二、程序中遞歸方式2.間接遞歸調(diào)用:函數(shù)間接調(diào)用本身35第35頁(yè)直接調(diào)用:intf(x)intx;{inty,z;

z=f(z);

}間接調(diào)用:intf1(x)intx;{inty,z;

z=f2(y);

}intf2(t)intt;{inta,b;

a=f1(b);

}以下表示了遞歸概念.36第36頁(yè)顯然:上述例子會(huì)無限遞歸(無限執(zhí)行)。所以,在遞歸調(diào)用時(shí)都必須有條件限制。n!=1(n=0,1)n

(n–1)!(n>1)當(dāng)條件成立,調(diào)用遞歸,不然結(jié)束。例1:求n!1.從數(shù)學(xué)上定義37第37頁(yè)#include<stdio.h>

longfac(intn)/*函數(shù)定義,計(jì)算n!*/

{longf;

if(n<0)

printf("inputerror!\n");

else

if(n==0||n==1)

f=1;

elsef=n

fac(n–1);

return(f);

}2.程序:38第38頁(yè)main(){intn;longy;printf("inputainteger!")scanf("%d",&n);y=fac(n);/*函數(shù)調(diào)用,計(jì)算n!*/

printf("%d!=%15ld",n,y);}39第39頁(yè)3.執(zhí)行過程:設(shè):

輸入5(n=5)第1次調(diào)用:y=fac(5)——返回:y=5fac(4)第2次調(diào)用:y=5*4fac(3)第3次調(diào)用:y=5*4*3fac(2)第4次調(diào)用:y=5*4*3*2fac(1)第5次調(diào)用:y=5*4*3*2*1*fac(0)P17340第40頁(yè)8.7標(biāo)識(shí)符作用域

標(biāo)識(shí)符能夠含有四種作用域。函數(shù)作用域文件作用域塊作用域函數(shù)原型作用域(作用域:有效范圍)

可依據(jù)標(biāo)識(shí)符作用域區(qū)分局部變量和全局變量。41第41頁(yè)一、局部變量凡在函數(shù)(含main函數(shù))內(nèi)部定義變量稱為局部變量。局部性:局部變量?jī)H在函數(shù)內(nèi)部有效。42第42頁(yè)2.形參為局部變量。3.在復(fù)合語(yǔ)句中可定義僅在復(fù)合語(yǔ)句中有效暫時(shí)變量。1.不一樣函數(shù)可有同名同類型變量,它們占不一樣內(nèi)存單元,互不影響。P159例5.21,例5.2243第43頁(yè)二、全局變量一個(gè)源文件中,在全部函數(shù)之外定義變量為全局變量。有效性:自定義位置開始至文件結(jié)尾全部有效。44第44頁(yè)例:intp=1,q=5;floatf1(a)inta;{intb,c;

}

charc1,c2;p,q作用范圍c1,c2作用范圍charf2(x,y)intx,y;{inti,j;

}

main(){

}45第45頁(yè)1.全局變量所作用到函數(shù),相當(dāng)于這些函數(shù)公共變量。當(dāng)一個(gè)函數(shù)對(duì)其值進(jìn)行改變后,另一個(gè)函數(shù)使用該變量值亦對(duì)應(yīng)改變。好處:函數(shù)之間值傳遞。2.不要隨意使用全局變量。一是一直占據(jù)內(nèi)存單元;二是因?yàn)楹瘮?shù)依賴于外部定義變量,降低了通用性。注意46第46頁(yè)3.不在作用域內(nèi)函數(shù)。若使用全局(外部)變量,需在函數(shù)體內(nèi)加上extern保留字。4.全局和局部變量同名時(shí),局部變量有效。47第47頁(yè)floatf1(x)intx;{externinta,b;

}inta=0;b=–1main(){

}a,b作用域例:P162例5.24例8.1548第48頁(yè)8.8變量存放類型一、標(biāo)識(shí)符屬性一個(gè)標(biāo)識(shí)符屬性除了前面已講過基本屬性外,還含有一些其它屬性:

存放類別

存放期49第49頁(yè)二、存放類別1.存放類型和存放期自動(dòng)型(auto)存放器型(register)外部型(extern)靜態(tài)型(static)自動(dòng)存放期靜態(tài)存放期50第50頁(yè)2.存放期性質(zhì)自動(dòng)存放:只有變量才含有自動(dòng)存放期如函數(shù)中變量說明:[auto]floatx,y;[auto]intm,n;作用:進(jìn)入到函數(shù)塊中,該變量存在,退出函數(shù)塊后該變量消失。程序中大部分變量都含有自動(dòng)存放期。51第51頁(yè)靜態(tài)存放:可用于變量和函數(shù)如:staticint;作用:從程序開始執(zhí)行起就一直存在,一直占據(jù)內(nèi)存單元,直到程序結(jié)束運(yùn)行。52第52頁(yè)

對(duì)靜態(tài)存放變量,若定義時(shí)賦初值,則程序運(yùn)行中僅在第一次調(diào)用時(shí)賦初值,下一次調(diào)用不再賦初值,而是使用上一次調(diào)用值。尤其提醒:

對(duì)靜態(tài)存放變量,若定義時(shí)不賦初值,則系統(tǒng)置初值0,而動(dòng)態(tài)變量不賦初值則值不確定。53第53頁(yè)#include<stdio.h>

int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論