![結(jié)構(gòu)化程序設(shè)計(jì)的思想是將一個(gè)問(wèn)題分解為若干個(gè)小問(wèn)題_第1頁(yè)](http://file4.renrendoc.com/view/7fa8b1c5641f62cd64f4851e5faaf0c7/7fa8b1c5641f62cd64f4851e5faaf0c71.gif)
![結(jié)構(gòu)化程序設(shè)計(jì)的思想是將一個(gè)問(wèn)題分解為若干個(gè)小問(wèn)題_第2頁(yè)](http://file4.renrendoc.com/view/7fa8b1c5641f62cd64f4851e5faaf0c7/7fa8b1c5641f62cd64f4851e5faaf0c72.gif)
![結(jié)構(gòu)化程序設(shè)計(jì)的思想是將一個(gè)問(wèn)題分解為若干個(gè)小問(wèn)題_第3頁(yè)](http://file4.renrendoc.com/view/7fa8b1c5641f62cd64f4851e5faaf0c7/7fa8b1c5641f62cd64f4851e5faaf0c73.gif)
![結(jié)構(gòu)化程序設(shè)計(jì)的思想是將一個(gè)問(wèn)題分解為若干個(gè)小問(wèn)題_第4頁(yè)](http://file4.renrendoc.com/view/7fa8b1c5641f62cd64f4851e5faaf0c7/7fa8b1c5641f62cd64f4851e5faaf0c74.gif)
![結(jié)構(gòu)化程序設(shè)計(jì)的思想是將一個(gè)問(wèn)題分解為若干個(gè)小問(wèn)題_第5頁(yè)](http://file4.renrendoc.com/view/7fa8b1c5641f62cd64f4851e5faaf0c7/7fa8b1c5641f62cd64f4851e5faaf0c75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八章函數(shù)8.1概述結(jié)構(gòu)化程序設(shè)計(jì)的思想是將一個(gè)問(wèn)題分解為若干個(gè)小問(wèn)題,小問(wèn)題由單獨(dú)的模塊來(lái)實(shí)現(xiàn)。C語(yǔ)言用函數(shù)來(lái)實(shí)現(xiàn)模塊,所以C語(yǔ)言是函數(shù)式的語(yǔ)言。一個(gè)C程序有一個(gè)由main開(kāi)頭的主函數(shù),由主函數(shù)調(diào)用其他函數(shù),同一個(gè)函數(shù)可以被多次調(diào)用。mam()/*主函數(shù)*7piintstarQ;pnntmessQ;printstarQ;pnntstarQ/*自定義函數(shù)*/printf(H*iin)pnntmess()嚴(yán)自定義函數(shù)*/printf(Tliisisanexample!);函數(shù)說(shuō)明:(1)一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)構(gòu)成,一個(gè)源程序文件是一個(gè)編譯單位。(2)一個(gè)C程序由一個(gè)或多個(gè)源程序文件組成,
2、可以分別編譯;一個(gè)程序可以多次被調(diào)用。(3)C程序從niainQ開(kāi)始執(zhí)行和結(jié)束執(zhí)行(4)所有函數(shù)是平行的,不可以嵌套定義,但可以嵌套調(diào)用(5)從用戶的角度看,函數(shù)分為標(biāo)準(zhǔn)函數(shù)(庫(kù)函數(shù))和用戶自定義函數(shù)(6)從函數(shù)形式看,分為有參函數(shù)和無(wú)參函數(shù)8.2函數(shù)定義的一般形式類(lèi)型標(biāo)識(shí)符函數(shù)名(形式參數(shù)列表)聲明部分;語(yǔ)句部分;說(shuō)明:(1)當(dāng)函數(shù)不需要返回值時(shí),可以沒(méi)有類(lèi)型說(shuō)明符(2)可以沒(méi)有形參(3)函數(shù)體可以為空,只有一個(gè)人括號(hào)8.3函數(shù)參數(shù)和函數(shù)值8.3.1函數(shù)的形式參數(shù)和實(shí)際參數(shù)調(diào)用函數(shù)時(shí),主調(diào)函數(shù)和被調(diào)函數(shù)Z間有數(shù)據(jù)傳遞關(guān)系。定義函數(shù)時(shí)括號(hào)內(nèi)的參數(shù)稱(chēng)為形式參數(shù),形參是變最;調(diào)用時(shí)給定的參數(shù)稱(chēng)為實(shí)
3、際參數(shù),實(shí)參可以是變最,也可以是表達(dá)式。mam()inta,b,c;scanf(“d,%d”,&a,&b);c=max(a,b);pnntf(fctmaxis:%dnn,c);max(intxjntv)mtz;if(x=y)z=x;elsez=y;letuinz;說(shuō)明:形參只有在函數(shù)調(diào)用時(shí)才分配單尤,調(diào)用結(jié)束后形參所占的單尤隨即釋放實(shí)參可以是常量、變量或表達(dá)式定義函數(shù)時(shí),必須指定形參的類(lèi)型實(shí)參與形參的類(lèi)型相同或賦值兼容,整型可對(duì)應(yīng)實(shí)型形參(低對(duì)高)C語(yǔ)言中,實(shí)參燉形參的數(shù)據(jù)傳遞是值傳遞,所以形參的值不會(huì)反過(guò)來(lái)影響實(shí)參swap(iiitx,inty)inttemp;temp=x;x=y;y=te
4、mp;mam()mta=10,b=20;swap(a.b);pnntff%a=%d.b=%difa,b);輸出:a=10,b=20實(shí)參與形參的結(jié)合過(guò)程:用FLASH實(shí)現(xiàn)ab1020(1)(2)(3)return語(yǔ)句向主調(diào)函數(shù)返回值當(dāng)return返回的值的類(lèi)型與函數(shù)定義的類(lèi)型不同時(shí),以函數(shù)類(lèi)型為準(zhǔn)定義函數(shù)時(shí)應(yīng)給出函數(shù)類(lèi)型,如果沒(méi)有給定,C語(yǔ)言按整型處理,如果不需要函數(shù)返回值,可用void明確標(biāo)識(shí)8.4函數(shù)的調(diào)用&4.1函數(shù)調(diào)用的一般形式函數(shù)名(實(shí)際參數(shù));&4.1函數(shù)調(diào)用的一般形式8.4.2函數(shù)調(diào)用的方式(1)函數(shù)語(yǔ)句,如pnntstai();(2)函數(shù)表達(dá)式:出現(xiàn)在表達(dá)式可以出現(xiàn)的地方,如賦值
5、號(hào)的右側(cè)或打印語(yǔ)句中c=max(a,b);(3)函數(shù)參數(shù):做為另一個(gè)函數(shù)的實(shí)際參數(shù)m=max(a,max(b,c);所以,函數(shù)不可以做套定義,但可以詼套調(diào)用8.4.3對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)的條件:(1)被調(diào)用函數(shù)己經(jīng)存在(2)使用庫(kù)函數(shù),用include命令將有關(guān)庫(kù)函數(shù)包含進(jìn)來(lái)(3)如果是用戶自定義的函數(shù),則被調(diào)函數(shù)應(yīng)與主調(diào)函數(shù)在同一文件,一般情況卜在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)進(jìn)行聲明;如果刈函數(shù)沒(méi)有聲明,編譯系統(tǒng)會(huì)把第一次遇到該函數(shù)(定義或調(diào)用)作為函數(shù)聲明,并將函數(shù)類(lèi)型默認(rèn)為int型,但最好做盧明,便于編譯程序進(jìn)行全面合法性檢查。所以可以有以卜幾種處理方法:先定義
6、被調(diào)函數(shù)后定義被調(diào)函數(shù),且被調(diào)函數(shù)為整型后定義非整型被調(diào)函數(shù),有主調(diào)函數(shù)中聲明在所有函數(shù)(包括mam函數(shù))定義Z前,在函數(shù)的外部已做了函數(shù)聲明,則在各個(gè)主調(diào)函數(shù)中不必對(duì)所調(diào)用的函數(shù)再作說(shuō)明chailettei(chai;char);floatf(floatfloat);mti(float,float);chailettei(charcl.chai-c2)聲明函數(shù)不同定義函數(shù),只給出函數(shù)類(lèi)型,名字及參數(shù),這種形式稱(chēng)為函數(shù)原型。函數(shù)原型的一般形式:(1)函數(shù)類(lèi)型函數(shù)名(參數(shù)類(lèi)型1,參數(shù)類(lèi)型2);(2)函數(shù)類(lèi)型函數(shù)名(參數(shù)類(lèi)型1參數(shù)名1,參數(shù)類(lèi)型2參數(shù)名2,);例,floatadd(floata,f
7、loatb);或floatadd(float.float);8.5函數(shù)的嵌套調(diào)用c語(yǔ)言不允許嵌套定義函數(shù),但允許嵌套調(diào)用例川弦截法求方程f(x)=x3.5x2+16x-80=0的根。#include#iiiclude/*定義函數(shù)f(x)*/floatRfloatx)floaty;y=x*x*x-5*x*x+16*x-80;letuiny;/*求(xl.f(xl)和(x2,f(x2)所構(gòu)成的直線與x軸的交點(diǎn)*/floatxpomt(floatxl.floatx2)floatx;x=(xl*f(x2)-x2*f(x1)/(f(x2)-f(x1);letuinx;/*用眩解法求方程的根*/float
8、root(floatxl.floatx2)floatxyyl;yi=f(xi);dox=xpoint(xl,x2);y=f(x);if(y*yl0)xl=x;yl=y;elsex2=x;wlule(fabs(y)=le-6);retuinx;嚴(yán)主函數(shù)*7mam()floatxl,x2,x,fl,f2;doprmtf(Mmputxlandx2:iin);scanf(H%f%f&x1x2);fl=f(xl);2=f(x2);wlule(fl*2=0);x=root(xl,x2);pnntftherootofequationis:%fn,x);8.6函數(shù)的遞歸調(diào)用函數(shù)直接或間接地調(diào)用自己,稱(chēng)為遞歸調(diào)
9、用,且分別稱(chēng)為直接遞歸和間接遞歸。例1,有5個(gè)人坐在一起,問(wèn)第5個(gè)人多少歲,他說(shuō)比第4個(gè)大2歲。問(wèn)最后一個(gè)人,他說(shuō)10歲。請(qǐng)問(wèn)第5個(gè)人多人10巒(哄age(“)+210巒(哄age(“)+2(n=l)(nl)intage(mtn)intc;if(n=l)c=10;elsec=age(n-l)+2;returnc;main()prmtf(“d”,age(5);例2,求n!可以用遞推和遞歸兩種方法求解。floatfac(intn)mti;floatt=l;if(n0)printfCerroF);exit(O);elsefor(i=l;i=n;i+)t=t*i;returnt;floatfac(in
10、tn)floatt;if(n%cjTXy);/*遞歸函數(shù)wvoidhamo(intncharx,chary,charz)if(n=l)move(x,z);elsehamo(ml“z,y);move(x.z);hanio(n-l、y、x、z);main()mtm;pnntfCplsinputthenumberofdisksiT);scanf(,%d,&m);hanio(m?A,BVC,);8.7數(shù)組做為函數(shù)參數(shù)8.7.1數(shù)組元素做為參數(shù)(實(shí)參)同一般的變屋,也是值傳遞。8.7.2數(shù)組名作參數(shù)(形參、實(shí)參)形參和實(shí)參都用數(shù)組名,是地址傳遞。有以卜幾種形式處理形參:floataver(floatar
11、ray10)實(shí)參數(shù)組的人小不起作用,只是用數(shù)組名來(lái)接收地址floataver(floatariay)同(1)floataver(floatarray.mtn)如果函數(shù)中需要數(shù)組的人小,則別設(shè)一參數(shù)n來(lái)動(dòng)態(tài)表示元素多少,這種方式最常用由于數(shù)組是地址傳遞,所以形參的變化反過(guò)來(lái)影響實(shí)參例1,用簡(jiǎn)單選擇排序?qū)潝?shù)組中的元素進(jìn)行從小到大排序。用FLASH演示(地址傳遞,排序過(guò)程)voidsort(floatauav4ntn)intij,k;floattemp;fbr(i=0;in-l;i+)k=i;for(j=i+ljn;j+)if(airavjairayk)kj;if(k!=i)temp=arraykj
12、;arrayk=anayi;anayi=temp;mam()floata10;inti;foi(i=0;i10;i-H-)scanf(H%f&ai);sort(aJO);fbi(i=0;i10;i-H-)pnntf(”62f/i);8.7.3用多維數(shù)組名作函數(shù)參數(shù)多維數(shù)組作為形參時(shí),可以省略第一維的人小,其余的不可以省略。mtanay310;mtarray10;二維數(shù)組是由若干個(gè)一維數(shù)組構(gòu)成,而形參數(shù)組的類(lèi)型應(yīng)與實(shí)參數(shù)組相同,所以它們必須由具有相同長(zhǎng)度的一維數(shù)組所組成。不能只指定第一維而省略第二維。intarray3;是錯(cuò)誤的在第二維相同的情況卜,第一維可以不同,實(shí)參:intscore習(xí)10;
13、形參可以是:intarray310;或mtanav810;8.8局部變量和全局變量8.8.1局部變量在函數(shù)內(nèi)部定義并使用的變鼠稱(chēng)為局部變吊,主函數(shù)中定義的變崑也只有在主函數(shù)中有效。不同函數(shù)內(nèi)定義的變量可以用相同的名字形參是局部變量函數(shù)中的復(fù)合語(yǔ)句內(nèi)可以定義變量,只在復(fù)合語(yǔ)句內(nèi)有效mam()inta,b=l;scanfC%P,&a);mtc;c=a+b;pnntf(“d”,c);出錯(cuò),因?yàn)閏是復(fù)介語(yǔ)句內(nèi)疋義的,在外面是無(wú)效的mam()inta,b=l;scanf(”d;&a);mta;a=10;prmtf(Humera=%dn,a);pnntf(Hextera=%dn”,a);輸入:100輸出:
14、innera=10extera=1008.8.2全局變量在函數(shù)Z外定義的變起是全局變最,作用范闈是從定義處直到源文件結(jié)束。對(duì)全局變帚的兒點(diǎn)說(shuō)明:全局變最增加了函數(shù)間數(shù)據(jù)聯(lián)系的渠道。一個(gè)函數(shù)只能返回一個(gè)值,如果要返回多個(gè)值,可以借助全局變量(2)C語(yǔ)言有一個(gè)不成文的約定,全局變量名的第一個(gè)字母大寫(xiě)(3)不必耍的時(shí)候不要使用全局變量,因?yàn)椋喝肿兞吭诔绦蜻\(yùn)行過(guò)程中一直占存貯單元;降低了程序的模塊化程度降低了程序的清晰性(4)外部變量與內(nèi)部變耄同名,則在局部變屋的作用范圍內(nèi),外部變崑不起作用。8.9變量的存貯類(lèi)別8.9.1動(dòng)態(tài)存貯方式與靜態(tài)存貯方式從變最的生存時(shí)間將變最分為靜態(tài)存貯方式和動(dòng)態(tài)存貯方式
15、靜態(tài)存貯方式:程序運(yùn)行期間分配固定的存貯空間的方式。動(dòng)態(tài)存貯方式:程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)分配存貯空間的方式存貯空間的劃分:用戶區(qū)程序區(qū)靜態(tài)存貯區(qū)動(dòng)態(tài)存貯區(qū)全局變最存貯靜態(tài)存貯區(qū)動(dòng)態(tài)存貯區(qū)存貯:(1)函數(shù)形參(2)自動(dòng)變量,未加static說(shuō)明的變量(3)函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址C語(yǔ)言中的變駅和函數(shù)都有兩個(gè)屬性:數(shù)據(jù)類(lèi)型和數(shù)據(jù)的存貯類(lèi)別。存貯類(lèi)別指數(shù)據(jù)在內(nèi)存中的存貯方式。存貯方式分為兩人類(lèi):靜態(tài)存貯和動(dòng)態(tài)存貯,具體包括:自動(dòng)的(auto),靜態(tài)的(static),寄存器的(register),外部的(extern)o根據(jù)變鼠的存貯類(lèi)別可以知道變量的作用域和生存期。892auto變量動(dòng)
16、態(tài)分配和釋放空間的局部變最。形參和函數(shù)中定義的變最是auto變帚,auto可以不寫(xiě)8.9.3用static聲明局部變量函數(shù)執(zhí)行結(jié)束后不釋放存貯空間,變屋的值仍然保留,可用static明局部靜態(tài)變最Hinta)autointb=0;staticc=3該語(yǔ)旬不等效Jstaticc;c=3;,改厲結(jié)果為7,7,7b=b+l;c=c+l;retuni(a+b+c);mam()inta=2;inti;fbr(i=0;i3;i+)運(yùn)行結(jié)果為789說(shuō)明:局部表態(tài)變量屬F靜態(tài)存貯類(lèi)別,在靜態(tài)存貯區(qū)內(nèi)分配存貯單元對(duì)靜態(tài)局部變最是在編譯時(shí)賦初值的,只賦值一次,程序運(yùn)行時(shí)不再重新賦初值,定義時(shí)不賦初值的話,編譯時(shí)自
17、動(dòng)賦初值0或空字符;自動(dòng)變鼠不賦初值則它的值是一個(gè)不確定的值盡管靜態(tài)局部變最在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)不能引用適合用靜態(tài)局部變量的場(chǎng)合:需要保留上一次調(diào)用值時(shí)初始化后變覺(jué)只被引用而不改變其值,免得每次調(diào)用時(shí)重新賦值例,打印1到4的階乘值intfac(intn)staticmtf=l;f=f*n;retuinf;mamQmti;for(i=l;i=5;i+)pnntf(4%d!=%dn”d,fac(i);894register為提高變最的訪問(wèn)速度,將一些經(jīng)常存取的變覺(jué)放在寄存器中,這種變炭稱(chēng)為寄存器變量,用關(guān)鍵字register聲明。registerinti,f=l;只有局部自動(dòng)變最和
18、形式參數(shù)可以作為寄存器變最,其他不行;局部靜態(tài)變量不可以定義為寄存器變量,不能寫(xiě)成registerstaticinta,b,c;定義的寄存器變磧數(shù)目不能太多,因?yàn)榧拇嫫鲾?shù)目有限,現(xiàn)代編譯系統(tǒng)可以自動(dòng)識(shí)別使用頻繁的變量,然后分配成寄存器變量895用extern聲明外部變量(1)在一個(gè)文件內(nèi)部聲明外部變量外部變量的作用域是從定義處到文件的末尾,要在定義Z前使用,則用extem聲明mam()externmtA,B;/j!*明A,B是已經(jīng)定義的外部變量,這樣就可以在main函數(shù)中使用pnntff%dn,max(A,B);mtA=13,b=8;在多文件的程序中聲明外部變量一個(gè)C程序可以由多個(gè)源文件組成,當(dāng)一個(gè)文件中要使用另一個(gè)文件中定義的變量時(shí)用e
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能門(mén)禁系統(tǒng)安裝合同
- 教師職稱(chēng)評(píng)定育人工作證明
- Tricyclohexylphosphine-Tricyclohexylphosphane-生命科學(xué)試劑-MCE
- 影視劇制作投資拍攝協(xié)議
- Actein-Standard-生命科學(xué)試劑-MCE
- 寓言故事愚公移山的教育意義深度解讀
- 美容美發(fā)產(chǎn)品使用效果免責(zé)承諾書(shū)
- 水電站落水孔清洗施工方案
- 蘇州玻璃鋼化糞池施工方案
- 2025年滁州c1貨運(yùn)上崗證模擬考試
- 《纏論的實(shí)戰(zhàn)技法》課件
- 新版標(biāo)準(zhǔn)化機(jī)電專(zhuān)業(yè)管理體系解讀課件
- 承包魚(yú)塘維修施工合同范例
- 耶魯綜合抽動(dòng)嚴(yán)重程度量表正式版
- 水利水電工程建設(shè)常見(jiàn)事故類(lèi)型及典型事故分析(標(biāo)準(zhǔn)版)
- 2024年濰坊工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)
- 《小學(xué)英語(yǔ)教學(xué)設(shè)計(jì)》課件全套 陳冬花 第1-10章 小學(xué)英語(yǔ)教學(xué)設(shè)計(jì)概述-小學(xué)英語(yǔ)課堂管理
- 電力線路常見(jiàn)故障培訓(xùn)
- 政府采購(gòu)項(xiàng)目采購(gòu)需求調(diào)查指引文本
- 酒店項(xiàng)目招商引資報(bào)告
- 2024年浙江省公務(wù)員錄用考試《行測(cè)》題(A類(lèi))
評(píng)論
0/150
提交評(píng)論