版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版綠色建筑房地產(chǎn)轉(zhuǎn)讓合同補(bǔ)充協(xié)議3篇
- 二零二五年教育培訓(xùn)機(jī)構(gòu)教師聘用合同書3篇
- 二零二五年度特色農(nóng)產(chǎn)品黃牛養(yǎng)殖購(gòu)銷合同3篇
- 二零二五年融資租賃合同規(guī)范本2篇
- 二零二五版?zhèn)€人房產(chǎn)抵押借款擔(dān)保合同3篇
- 二零二五年度食堂廚房設(shè)計(jì)咨詢與服務(wù)合同2篇
- 二零二五版LOGO知識(shí)產(chǎn)權(quán)授權(quán)與品牌戰(zhàn)略規(guī)劃合同3篇
- 二零二五版糧食進(jìn)出口貿(mào)易代理合同示范文本3篇
- 二零二五版服務(wù)器租賃與數(shù)據(jù)同步服務(wù)合同3篇
- 二零二五年度高速鐵路建設(shè)用聚乙烯管材管件采購(gòu)合同3篇
- 2025年度土地經(jīng)營(yíng)權(quán)流轉(zhuǎn)合同補(bǔ)充條款范本
- 南通市2025屆高三第一次調(diào)研測(cè)試(一模)地理試卷(含答案 )
- Python試題庫(kù)(附參考答案)
- 聚酯合成副反應(yīng)介紹
- DB37-T 1342-2021平原水庫(kù)工程設(shè)計(jì)規(guī)范
- 電除顫教學(xué)課件
- 廣東省藥品電子交易平臺(tái)結(jié)算門戶系統(tǒng)會(huì)員操作手冊(cè)
- DB32T 3960-2020 抗水性自修復(fù)穩(wěn)定土基層施工技術(shù)規(guī)范
- 大斷面隧道設(shè)計(jì)技術(shù)基本原理
- 41某31層框架結(jié)構(gòu)住宅預(yù)算書工程概算表
- 成都市國(guó)土資源局關(guān)于加強(qiáng)國(guó)有建設(shè)用地土地用途變更和
評(píng)論
0/150
提交評(píng)論