語言程序設(shè)計(jì)教案函數(shù)_第1頁
語言程序設(shè)計(jì)教案函數(shù)_第2頁
語言程序設(shè)計(jì)教案函數(shù)_第3頁
語言程序設(shè)計(jì)教案函數(shù)_第4頁
語言程序設(shè)計(jì)教案函數(shù)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第八章 函 數(shù)課題:第八章 函數(shù) §1§4教學(xué)目的:1、掌握函數(shù)定義的一般形式2、掌握函數(shù)調(diào)用的一般形式教學(xué)重點(diǎn):教學(xué)難點(diǎn):函數(shù)定義、調(diào)用的一般形式形式參數(shù)和實(shí)際參數(shù)步驟一 復(fù)習(xí)引導(dǎo)一個(gè)C語言源程序可由一個(gè)主函數(shù)和若干個(gè)輔助函數(shù)組成。由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。 步驟二 講授新課§8.1 概述例8.1main( ) printstar( ); print_message( ); printstar( );printstar( ) printf( “ * n”); print_message( ) printf(“How do you d

2、o ! n”); 說明:F 1、一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成。一個(gè)源程序文件是一個(gè)編譯單位。F 2、一個(gè)C程序由一個(gè)或多個(gè)源程序文件組成。這樣可以分別編寫、分別編譯,提高調(diào)度效率。F 3、C程序的執(zhí)行從main 函數(shù)開始,在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。F 4、所有函數(shù)都是平行的,即函數(shù)不能嵌套定義,函數(shù)可以互相調(diào)用,但不能調(diào)用main函數(shù)。F 5、從用戶使用的角度看,函數(shù)有兩種:標(biāo)準(zhǔn)函數(shù)(庫函數(shù))和用戶自己定義的函數(shù)F 6、從函數(shù)的形式看,函數(shù)分為兩類:無參函數(shù)和有參函數(shù)§8.2 函數(shù)定義的一般形式(一)無參函數(shù)的定義形式 類型標(biāo)識(shí)符 函數(shù)名( ) 函數(shù)體(包括聲明部分和

3、執(zhí)行部分) 例: printstar( ) printf( “ * n”);  (二)有參函數(shù)定義的一般形式 類型標(biāo)識(shí)符 函數(shù)名(形式參數(shù)表) 函數(shù)體(包括聲明部分和執(zhí)行部分) 例如:int max(int x, int y) int z; z=x>y?x:y; return (z); (三)一個(gè)函數(shù)可以是空函數(shù) 如 dummy( )    §8.3 函數(shù)參數(shù)和函數(shù)的值(一)形式參數(shù)和實(shí)際參數(shù) 形式參數(shù):定義函數(shù)時(shí)函數(shù)名后括號(hào)中的變量名,簡(jiǎn)稱形參; 實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后括號(hào)中的表達(dá)式,簡(jiǎn)稱實(shí)參。例:main( ) int

4、 a,b,c; scanf(“%d,%d”,&a,&b); c = max(a, b); /*調(diào)用max函數(shù)*/ printf(“max=%d”,c);int max(int x ,int y) /*定義max函數(shù)*/ int z; z=x>y?x: y; return(z);  關(guān)于形參和實(shí)參的說明: 形參在未出現(xiàn)函數(shù)調(diào)用時(shí),并不占內(nèi)存中的存儲(chǔ)單元。只有在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)中的形參才被分配內(nèi)存單元。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。2、實(shí)參可以是常量、變量或表達(dá)式,如:c = max(3,a+b);但要求它們有確定的值。在調(diào)用時(shí)將實(shí)參的值賦

5、給形參(如果形參是數(shù)組名,則傳遞的是數(shù)組的首地址,而不是變量的值。)3、在被定義的函數(shù)中,必須指定形參的類型;4、實(shí)參與形參的類型應(yīng)一致。5、C語言規(guī)定,實(shí)參對(duì)形參的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。(二)函數(shù)的返回值1、return語句 return (表達(dá)式); 或:return 表達(dá)式; 或:return; 或:函數(shù)執(zhí)行到最后遇到 “” return語句的用途有二:(1)用于結(jié)束函數(shù)的執(zhí)行并返回到調(diào)用者;(2)用來向調(diào)用者傳遞一個(gè)返回值。F 注意:該語句對(duì)非void函數(shù)適用。 2、函數(shù)值的類型 如: int max(x,y)

6、char letter(c1, c2) double min(x, y)C語言默認(rèn)函數(shù)返回值為int型。 3、函數(shù)值的類型和return語句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn); main() float a, b; int c; scanf(“%f,%f”,&a,&b); c=max(a,b); printf(“Max is %dn”,c); max(float x, float y) float z; z = x>y? x: y; return (z); 若輸入的數(shù)據(jù)情況為:1.5, 2.5則輸出的結(jié)果為:Max is 2 4、如果被調(diào)函數(shù)中沒有r

7、eturn語句,則函數(shù)帶回一個(gè)不確定值。 5、為了明確表示“不帶回值”,可以用“void ”定義“無類型”(或稱“空類型”)。如:void print_message( ) printf(“How do you do!n”);  §8.4 函數(shù)的調(diào)用要正確實(shí)現(xiàn)函數(shù)間的相互調(diào)用需滿足下列條件:第一,被調(diào)用函數(shù)必須存在且允許調(diào)用;第二,必須給出滿足函數(shù)運(yùn)行時(shí)要求的參數(shù);第三,在調(diào)用一個(gè)函數(shù)之前一般應(yīng)該對(duì)被調(diào)用函數(shù)進(jìn)行聲明。  (一)函數(shù)聲明的一般形式 函數(shù)類型 函數(shù)名(參數(shù)類型1,參數(shù)類型2, , 參數(shù)類型n);或:函數(shù)類型 函數(shù)名(參數(shù)類型1 參

8、數(shù)名1,參數(shù)類型2 );如:int print(char format, ); char fun2(int i, char p1); float add(float , float);注意:函數(shù)聲明與函數(shù)定義不同!  (二)函數(shù)調(diào)用的一般方法 函數(shù)調(diào)用形式: 函數(shù)名(實(shí)參表列); 1函數(shù)語句如:前述例子中的 print(); 2函數(shù)表達(dá)式 如:c=max(a,b); 3函數(shù)參數(shù) 如:m=max(a, max(b,c); printf(“%d”, max(a,b); int f(int a, int b) int c; if

9、(a>b) c=1; else if(a= =b)c=0; else c=-1 return(c);   例:main( ) int i=2, p; p=f(i, +i); printf(“%d”,p);   TC環(huán)境下,按自右而左的順序求值。此例 f(i, +i) f(3,3)例:計(jì)算組合C(m,n)=m!/(n!(m-n)!)main() int m, n; long cmn, temp; long factor(int); scanf(“%d %d”,&m,&n); cmn=factor(m); temp=facto

10、r(n); cmn=cmn/temp; cmn=cmn/factor(m-n); printf(“%ldn”,cmn);  步驟三 課堂小結(jié)1、 有參函數(shù)的定義形式2、 形參和實(shí)參的區(qū)別3、 函數(shù)的聲明和調(diào)用  步驟四 布置作業(yè)書面作業(yè):(第八章課后練習(xí))8.1課題:第八章 函數(shù) §5§7教學(xué)目的:1、掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用2、掌握虛實(shí)結(jié)合教學(xué)重點(diǎn):教學(xué)難點(diǎn):嵌套和遞歸調(diào)用、數(shù)組作為函數(shù)參數(shù)遞歸調(diào)用、虛實(shí)結(jié)合步驟一 復(fù)習(xí)引導(dǎo)float root(float x1, float x2) int i; float x,y,y1; y

11、1=f(x1); do x=xpoint(x1,x2); y=f(x); if (y*y1>0) y1=y; x1=x; else y2=y; x2=x; while(fabs(y)>=0.0001); return(x);步驟二、講授新課§8.6 函數(shù)的遞歸調(diào)用直接或間接調(diào)用自身的函數(shù)為遞歸函數(shù)。一個(gè)問題采用遞歸方法來解決時(shí)必須符合以下條件:(1)可將一個(gè)問題轉(zhuǎn)化為具有同樣解法的規(guī)模較小的問題;(2)必須有明確的結(jié)束條件。 例8.7:有5個(gè)人坐在一起,問第5個(gè)人多少歲,他說比第4個(gè)人大2歲,問第4個(gè)人的歲數(shù),他說比第3個(gè)人大2歲,問第3個(gè)人的歲數(shù),他說比第2個(gè)人大2歲,

12、問第2個(gè)人,他說比第1個(gè)人大2歲,問第一個(gè)人,他說是10歲。請(qǐng)問第5個(gè)人的歲數(shù)?(P158)分析:顯然這是一個(gè)遞歸問題。即:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10程序:age(int n) int c; if(n= =1) c=10; else c=age(n-1)+2; return (c);main( ) printf(“%d”,age(5);例8.8:利用遞歸求 n!(P160) 例:Fibonacci數(shù)列已在前面定義過,用遞歸函數(shù)求此數(shù)列的第n項(xiàng)。fib(int n) int

13、f; if(n= =0 | n= =1) f=1; else f=fib(n-1)+fib(n-2); return(f);  習(xí)題8.13: 用遞歸方法求n階勒讓德多項(xiàng)式的值,遞歸公式為: 1 (n=0)Pn(x)= x (n=1) (2n-1)xPn-1(x)-(n-1)Pn-2(x)/n (n>1)  main() int x, n; float p(int ,int); printf(“n Input n & x:”); scanf(“%d,%d”,&n,&x); printf(“n=%d,x=%dn”,n,x); print

14、f(“P%d(%d)=%6.2f”,n,x,p(n,x); float p(int n, int x) if(n= =0) return(1); else if (n= = 1) return(x); else return( (2*n-1)*x-p(n-1),x)-(n-1)*p(n-2),x)/n ); 例:雙遞歸。這段程序的結(jié)果是_void f(int b, int t) int m; if(b<t) m=(b+t)/2; printf(“%dn”,m); f(b,m-1); f(m+1,t); main() f(1,6); §8.7 數(shù)組作為函數(shù)參數(shù)

15、虛實(shí)結(jié)合(啞實(shí)結(jié)合)一、數(shù)組元素作函數(shù)實(shí)參值傳遞:用賦值的方法,把實(shí)在參數(shù)的值賦給被調(diào)函數(shù)對(duì)應(yīng)的形式參數(shù)。 n 不希望破壞調(diào)用函數(shù)中作為實(shí)在參數(shù)對(duì)象的值時(shí),使用“值傳遞”方式;n 注意:數(shù)組元素作為函數(shù)實(shí)參時(shí)如同簡(jiǎn)單變量。 二、數(shù)組名作函數(shù)參數(shù)地址傳遞:指形參與實(shí)參結(jié)合的不是數(shù)據(jù)本身,而是把數(shù)據(jù)的地址傳遞給被調(diào)用函數(shù)。結(jié)合后的形參與實(shí)參都指向同一個(gè)存儲(chǔ)區(qū)。F 在函數(shù)間傳遞一批數(shù)據(jù)時(shí),一般采用“地址傳遞”方式。 例8.13:用選擇法對(duì)數(shù)組中10個(gè)整數(shù)按由小到大排序。main() int a10,i; printf(“enter the arrayn”); for(i=0; i

16、<10; i+) scanf(“%d”,&ai); sort(a,10); printf(“the sorted array:n”); for(i=0; i<10; i+) printf(“%d”,ai); printf(“n”);    三、多維數(shù)組名作函數(shù)參數(shù)main() static int a34=1,3,5,7, 2,4,6,8,15,17,34,12; printf(“max value is %n”, max_value(a);   步驟三 課堂小結(jié)函數(shù)的嵌套調(diào)用和遞歸調(diào)用,注意調(diào)用的過程數(shù)組作為函數(shù)

17、參數(shù)有兩種情況:傳遞數(shù)組元素的值、傳遞數(shù)組名 步驟四 布置作業(yè)書面作業(yè):(第八章課后練習(xí))8.2、8.17、15課題:第八章 函數(shù) §8-§10教學(xué)目的:1、 掌握局部變量和全局變量的作用范圍2、 掌握變量的存儲(chǔ)類別,了解內(nèi)部函數(shù)和外部函數(shù)教學(xué)重點(diǎn):教學(xué)難點(diǎn):局部變量和全局變量、變量的存儲(chǔ)類別變量的作用域和生存期步驟一、復(fù)習(xí)引導(dǎo)在函數(shù)調(diào)用過程中,不僅要注意實(shí)參和形參的數(shù)據(jù)結(jié)合,而且要注意各個(gè)變量的作用域和生存期。 步驟二、講授新課§8.8 局部變量和全局變量一、局部變量在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在本函數(shù)范圍內(nèi)有效。 二、

18、全局變量在函數(shù)之外定義的變量稱為外部變量,即全局變量(全程變量)。全局變量可以為本文件中其他函數(shù)所共用。它的有效范圍為從定義變量的位置開始到本源文件結(jié)束。 l 使用全局變量可以增加函數(shù)間的數(shù)據(jù)聯(lián)系;例8.15:有一個(gè)一維數(shù)組,內(nèi)放10個(gè)學(xué)生成績(jī),寫一函數(shù),求出平均分,最高分和最低分。float max=0,min=0;float average(float array,int n) int i; float aver,sum=array0; max=min=array0; for(i=1; i<n; i+) if(arrayi>max) max=arrayi; else

19、if(arrayi<min) min=arrayi; sum=sum+arrayi; aver=sum/n; return(aver);main()float ave,score10; int i; for(i=0;i<10;i+) scanf(“%f”,&scorei); ave=average(score,10); printf(“%6.2f,%6.2f,%6.2f”,max,min,ave);l 在同一源文件中,如果外部變量與局部變量同名,則在局部變量的作用范圍內(nèi)外部變量不起作用;例8.16:外部變量與局部變量同名int a=3,b=5; /*a,b外部變量*/max

20、(int a, int b); /*a,b局部變量*/ int c; c=a>b?a:b; return(c);main() int a=8; /*a局部變量*/ printf(“%d”,max(a,b);  §8.9 變量的存儲(chǔ)類別從變量的作用域(空間)來分,為全局和局部變量。從變量值存在的(生存期)時(shí)間來分,可以分為:一、動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式靜態(tài)存儲(chǔ)方式:指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。動(dòng)態(tài)存儲(chǔ)方式:在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。 二、auto變量n 調(diào)用函數(shù)時(shí)系統(tǒng)自動(dòng)分配存儲(chǔ)空間,在函數(shù)調(diào)用結(jié)束時(shí)自動(dòng)釋放

21、這些存儲(chǔ)空間,稱這類局部變量為自動(dòng)變量。n 自動(dòng)變量用關(guān)鍵字auto作存儲(chǔ)類別的聲明。它也可省。 三、用static聲明局部變量n 函數(shù)中變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,在下次該函數(shù)調(diào)用時(shí),該變量已有值,即為上一次函數(shù)調(diào)用結(jié)束時(shí)的值。該局部變量為靜態(tài)局部變量。main() int a=2, i; for( i=0; i<3; i+) printf(“%d”,f(a);  運(yùn)行結(jié)果為:_ 說明:1、靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期都不釋放。 自動(dòng)變量屬于動(dòng)態(tài)存儲(chǔ)類別,占動(dòng)態(tài)存儲(chǔ)區(qū)空間而不占靜態(tài)存儲(chǔ)區(qū)

22、空間,函數(shù)調(diào)用結(jié)束后即釋放。2、對(duì)靜態(tài)局部變量在編譯時(shí)賦初值,程序運(yùn)行時(shí),它已有初值,以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。 對(duì)自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行的,而是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值。3、對(duì)靜態(tài)局部變量來說,如不賦初值,編譯時(shí)自動(dòng)賦初值0或空字符。 對(duì)自動(dòng)變量來說,如不賦初值,它的值是一個(gè)不確定的值。4、雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)不能引用。 四、register變量將局部變量的值放在CPU中的寄存器中,需要用時(shí)直接從寄存器取出參加運(yùn)算,不必再到內(nèi)存中去存取。這種變量稱為寄存器變量。說明:F 1、只有

23、局部自動(dòng)變量和形式參數(shù)可作為register變量。F 2、不能定義任意多個(gè)寄存器變量。F 3、局部靜態(tài)變量不能定義為寄存器變量。 五、用extern聲明外部變量1、在一個(gè)文件內(nèi)聲明外部變量例:main() extern A; /*外部變量聲明*/ printf(“%d”,A); int A=13; /*定義外部變量*/ 2、在多文件的程序中聲明外部變量例:用extern將外部變量的作用域擴(kuò)展到其他文件。文件file1.c中的內(nèi)容為:int A;main() int power(int);/*對(duì)調(diào)用函數(shù)作聲明*/ int b=3,c; scanf(“%d”, &A);

24、 c=A*b; printf(“%d*%d=%dn”,A, b, c); 六、用static聲明外部變量在定義外部變量時(shí),加一個(gè)static聲明,可以使此變量只能用于本文件中。注:對(duì)外部變量加或不加static聲明,都是靜態(tài)存儲(chǔ),只是作用范圍不同,都是在編譯時(shí)分配內(nèi)存的。 l 用static來聲明一個(gè)變量的作用有二:1、對(duì)局部變量用static聲明,則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在。2、全局變量用static聲明,則該變量的作用域只限于本文件模塊。 另注:用auto、register、static聲明變量時(shí),是在定義變量的基礎(chǔ)上加這些關(guān)鍵字,而不能單獨(dú)使用。F 如:int a; /*定義整型變量a*/ static a; /*對(duì)變量a聲明為靜態(tài)變量*/此用法不對(duì)。編譯時(shí)會(huì)被認(rèn)為“重新定義”。  七、關(guān)于變量的聲明和定義一般講,把建立存儲(chǔ)空間的聲明稱定義,而把不需要建立存儲(chǔ)空間的聲明稱為聲明。n 例: main() extern A; /*是聲明不是定義*/ int A; /*是定義*/注:1、外部變量的定義只能一次,它在所有函數(shù)之外,而同一文件中的外部變量的聲明可以有多次,它可在函數(shù)內(nèi)也可在函數(shù)外。2、對(duì)外部變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論