c語言函數(shù)教案-文檔資料_第1頁
c語言函數(shù)教案-文檔資料_第2頁
c語言函數(shù)教案-文檔資料_第3頁
c語言函數(shù)教案-文檔資料_第4頁
c語言函數(shù)教案-文檔資料_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)11第六章 函數(shù)概述函數(shù)的定義函數(shù)的返回值函數(shù)的調(diào)用函數(shù)參數(shù)及其傳遞方式函數(shù)的嵌套與遞歸調(diào)用變量的存儲屬性數(shù)組作為函數(shù)參數(shù)你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)226.1 概述n模塊化程序設(shè)計w基本思想:將一個大的程序按功能分割成一些小模塊,w特點:n各模塊相對獨立、功能單一、結(jié)構(gòu)清晰、接口簡單n控制了程序設(shè)計的復(fù)雜性n提高元件的可靠性n縮短開發(fā)周期n避免程序開發(fā)的重復(fù)勞動n易于維護和功能擴充w開發(fā)方法: 自上向下,逐步分解,分而治之你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)33源程序文件1預(yù)編譯命令說明部分執(zhí)行

2、部分函數(shù)1函數(shù)n源程序文件i源程序文件nC程序C程序結(jié)構(gòu)&C是函數(shù)式語言&必須有且只能有一個名為main的主函數(shù)&C程序的執(zhí)行總是從main函數(shù)開始,在main中結(jié)束&函數(shù)不能嵌套定義,可以嵌套調(diào)用C是模塊化程序設(shè)計語言你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)44w從用戶角度n標準函數(shù)(庫函數(shù)):由系統(tǒng)提供n用戶自定義函數(shù)w從函數(shù)形式n無參函數(shù)n有參函數(shù)使用庫函數(shù)應(yīng)注意:1、函數(shù)功能2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3、函數(shù)返回值意義和類型4、需要使用的包含文件函數(shù)分類你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)55n一般格式合

3、法標識符函數(shù)返回值類型缺省int型無返回值void函數(shù)體函數(shù)類型 函數(shù)名(形參類型說明表)說明部分語句部分現(xiàn)代風格:例 有參函數(shù)(現(xiàn)代風格) int max(int x,int y) int z; z=xy?x:y; return(z); 例 有參函數(shù)(現(xiàn)代風格) int max(int x, y) int z; z=xy?x:y; return(z); 例 空函數(shù) dummy( ) 函數(shù)體為空例 無參函數(shù) printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); 6.2 函數(shù)的定義你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章

4、函數(shù)66函數(shù)類型 函數(shù)名(形參表)形參類型說明說明部分語句部分傳統(tǒng)風格:例 有參函數(shù)(傳統(tǒng)風格) int max(x,y) int x,y; int z; z=xy?x:y; return(z); 函數(shù)傳統(tǒng)風格和例子你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)77n返回語句w形式: return(表達式); 或 return 表達式; 或 return;w功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時把返值帶給調(diào)用函數(shù)w說明:n函數(shù)中可有多個return語句n若無return語句,遇時,自動返回調(diào)用函數(shù)n若函數(shù)類型與return語句中表達式值的類型不一致,按前者為準,自動轉(zhuǎn)換-函

5、數(shù)調(diào)用轉(zhuǎn)換nvoid型函數(shù)例 無返回值函數(shù) void swap(int x,int y ) int temp; temp=x; x=y; y=temp; 6.3 函數(shù)的返回值你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)88n調(diào)用形式 函數(shù)名(實參表);說明:n實參與形參個數(shù)相等,類型一致,按順序一一對應(yīng)n實參表求值順序,因系統(tǒng)而定(Turbo C 自右向左)6.4 函數(shù)的調(diào)用你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)99w函數(shù)語句: 例 printstar(); printf(“Hello,World!n”);w函數(shù)表達式: 例 m=max(a,b)*2;w函數(shù)參數(shù): 例

6、 printf(“%d”,max(a,b); m=max(a,max(b,c);函數(shù)的調(diào)用方式你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1010w對被調(diào)用函數(shù)要求:n必須是已存在的函數(shù)n庫函數(shù): #include n用戶自定義函數(shù): 函數(shù)類型說明w函數(shù)說明n一般形式: 函數(shù)類型 函數(shù)名(形參類型 形參名,. ); 或 函數(shù)類型 函數(shù)名();n作用:告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個數(shù)及類型,以便檢驗n函數(shù)定義與函數(shù)說明不同n函數(shù)說明位置:程序的數(shù)據(jù)說明部分(函數(shù)內(nèi)或外)n下列情況下,可不作函數(shù)說明n若函數(shù)返值是char或int型,系統(tǒng)自動按int型處理n被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前n

7、有些系統(tǒng)(如Borland C+)要求函數(shù)說明指出函數(shù)返值類型和形參類型,并且對void 和 int 型函數(shù)也要進行函數(shù)說明函數(shù)說明你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1111n形參與實參w形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名w實際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中的表達式c=max(a,b);(main 函數(shù))(max 函數(shù))max(int x, int y) int z; z=xy?x:y; return(z); 例 比較兩個數(shù)并輸出大者main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(

8、Max is %d,c);max(int x, int y) int z; z=xy?x:y; return(z);形參實參6.5 函數(shù)參數(shù)及其傳遞方式你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1212說明:實參必須有確定的值形參必須指定類型形參與實參類型一致,個數(shù)相同若形參與實參類型不一致,自動按形參類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放形參與實參形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名實際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中的表達式6.5 函數(shù)參數(shù)及其傳遞方式你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1313w值

9、傳遞方式n方式:函數(shù)調(diào)用時,為形參分配單元,并將實參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實參單元仍保留并維持原值n特點:n形參與實參占用不同的內(nèi)存單元n單向傳遞參數(shù)傳遞方式你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1414711x:y:調(diào)用前:調(diào)用結(jié)束:711x:y:/*ch7_2.c*/#include main() int x=7,y=11; printf(x=%d,ty=%dn,x,y); printf(swapped:n); swap(x,y); printf(x=%d,ty=%dn,x,y);swap(int a,int b) int temp; temp=a;

10、a=b; b=temp;調(diào)用:711a:b:711x:y:swap:711x:y:117a:b:temp例 交換兩個數(shù)你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1515n方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參n特點:n形參與實參占用同樣的存儲單元n“雙向”傳遞n實參和形參必須是地址常量或變量函數(shù)的地址傳遞你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1616/*ch9_3.c*/swap(p1,p2)int *p1,*p2; int p; p=*p1; *p1=*p2; *p2=p;main()int a,b; scanf(%d,%d,&a,&

11、b); printf(“a=%d,b=%dn”,a,b); printf(“swapped:n”); swap(&a,&b); printf(”a=%d,b=%dn,a,b);例 交換兩個數(shù)a59b調(diào)前:a59b調(diào)swap:p1&a&bp2a95b交換:p1&a&bp2a95b返回:例子圖解你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1717#include long sum(int a, int b); long factorial(int n);main() int n1,n2; long a; scanf(%d,%d,&n

12、1,&n2); a=sum(n1,n2); printf(a=%1d,a); long sum(int a,int b) long c1,c2; c1=factorial(a); c2=factorial(b); return(c1+c2); long factorial(int n) long rtn=1; int i; for(i=1;i=n;i+) rtn*=i; return(rtn); long sum(int a, int b);long factorial(int n);文件包含編譯預(yù)處理命令函數(shù)類型說明函數(shù)定義函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)返回值形參實參例子解析你現(xiàn)在所處的位置在

13、:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1818n嵌套調(diào)用C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)main( )調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b6.6 函數(shù)的嵌套與遞歸調(diào)用你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)1919#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z);void main() int a,b,c,d; scanf(%d%d%d,&a,&b,&c); d=dif(a,b,c); printf(Max-Min

14、=%dn,d); Ch7_202.cint dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); main( )調(diào)用函數(shù)dif輸出結(jié)束dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)例 求三個數(shù)中最大數(shù)和最小數(shù)的差值你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2020定義:函數(shù)直接或間接

15、的調(diào)用自身叫函數(shù)的遞歸調(diào)用f( )調(diào)f調(diào)f2調(diào)f1f1( )f2( )說明C編譯系統(tǒng)對遞歸函數(shù)的自調(diào)用次數(shù)沒有限制每調(diào)用函數(shù)一次,在內(nèi)存堆棧區(qū)分配空間,用于存放函數(shù)變量、返回值等信息,所以遞歸次數(shù)過多,可能引起堆棧溢出int f(int x) int y,z; z=f(y); . return(2*z);int f1(int x) int y,z; z=f2(y); . return(2*z);int f2(int t) int a,c; c=f1(a); . return(3+c);遞歸調(diào)用你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2121) 1()!1() 1 , 0(1!nn

16、nnn/*ch7_8.c*/#include int fac(int n) int f; if(n0) printf(nbi, ai=bi,aik,認為數(shù)組ab 若nk,認為數(shù)組ab 若n=k,認為數(shù)組a=b#include main() int a10,b10,i,n=0,m=0,k=0; printf(Enter array a:n); for(i=0;i10;i+)scanf(%d,&ai); printf(Enter array b:n); for(i=0;i10;i+)scanf(%d,&bi); for(i=0;iy) flag=1; else if(xy) fla

17、g=-1; else flag=0; return(flag);你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2323地址傳遞在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類型應(yīng)一致形參數(shù)組大小(多維數(shù)組第一維)可不指定形參數(shù)組名是地址變量數(shù)組名作函數(shù)參數(shù)你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2424 #include float average(int stu10, int n); void main() int score10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, &

18、;scorei); av=average(score,10); printf(Average is:%.2f, av); float average(int stu10, int n) int i; float av,total=0; for( i=0; in; i+ ) total += stui; av = total/n; return av; 實參用數(shù)組名形參用數(shù)組定義, int stu .2109score562312.88stu例 求學(xué)生的平均成績你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)252512a調(diào)用前12ax調(diào)用21ax交換21a返回#include void

19、swap2(int x) int z; z=x0; x0=x1; x1=z;main() int a2=1,2; swap2(a); printf(a0=%dna1=%dn,a0,a1);地址傳遞例 數(shù)組元素與 數(shù)組名 作函數(shù)參數(shù)比較你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2626void sort(int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(k!=i) t=arrayi; arrayi=arrayk; arrayk=t; main()

20、int a10,i; for(i=0;i10;i+)scanf(%d,&ai); sort(a,10); for(i=0;i10;i+) printf(%d ,ai); printf(n);0123456789a4968573299927137688arraykjjjkjkjjjjj949i=0例 數(shù)組排序-簡單選擇排序你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2727void sort(int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(

21、k!=i) t=arrayi; arrayi=arrayk; arrayk=t; main() int a10,i; for(i=0;i10;i+)scanf(%d,&ai); sort(a,10); for(i=0;i10;i+) printf(%d ,ai); printf(n);kjjkjkjjjjj0123456789a4968573299927137688array949kk1368i=1例 數(shù)組排序-簡單選擇排序(1)你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)28280123456789a9132732495768768899arrayi=8void sort(

22、int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(k!=i) t=arrayi; arrayi=arrayk; arrayk=t; main() int a10,i; for(i=0;i10;i+)scanf(%d,&ai); sort(a,10); for(i=0;i10;i+) printf(%d ,ai); printf(n);例 數(shù)組排序-簡單選擇排序(2)你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)2929n概述w變量是對程序中數(shù)

23、據(jù)的存儲空間的抽象內(nèi)存.main() int a; a=10; printf(“%d”,a);編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元1020002001程序中使用變量名對內(nèi)存操作6.8 變量的存儲屬性你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)3030變量的屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性)存儲屬性存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)生存期:變量在某一時刻存在-靜態(tài)變量與動態(tài)變量作用域:變量在某區(qū)域內(nèi)有效-局部變量與全局變量變量的存儲類型auto -自動型register-寄存器型static -靜態(tài)型extern -外部型變量定義格式: 存儲類型 數(shù)據(jù)類型 變量表;概

24、述變量是對程序中數(shù)據(jù)的存儲空間的抽象如: int sum; auto int a,b,c; register int i; static float x,y;6.8 變量的存儲屬性你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)3131w局部變量-內(nèi)部變量n定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效n說明:nmain中定義的變量只在main中有效n不同函數(shù)中同名變量,占不同內(nèi)存單元n形參屬于局部變量n可定義在復(fù)合語句中有效的變量n局部變量可用存儲類型:auto register static (默認為auto)float f1(int a) int b,c; .char f2(int x,in

25、t y) int i,j; main() int m,n; .a,b,c有效x,y,i,j有效m,n有效例 不同函數(shù)中同名變量main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b);例 復(fù)合語句中變量#define N 5main() int i; int aN=1,2,3,4,5; for(i=0;iN/2;i+) int temp;temp=ai;ai=aN-i-1

26、;aN-i-1=temp; for(i=0;iN;i+) printf(%d ,ai);運行結(jié)果:5 4 3 2 1例 復(fù)合語句中變量#define N 5main() int i; int aN=1,2,3,4,5; for(i=0;iN/2;i+) int temp;temp=ai;ai=aN-i-1;aN-i-1=temp; for(i=0;i外部變量說明: extern 數(shù)據(jù)類型 變量表;外部變量定義與外部變量說明不同若外部變量與局部變量同名,則外部變量被屏蔽外部變量可用存儲類型:缺省 或 static全局變量你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)3333float m

27、ax,min;float average(float array, int n) int i; float sum=array0; max=min=array0; for(i=1;imax) max=arrayi; else if(arrayiy?x:y; return(z);main() extern int a,b; printf(max=%d,max(a,b);int a=13,b=-8;運行結(jié)果:max=13extern int a,b;int max() int z; z=ab?a:b; return(z);main() printf(max=%d,max();int a=13,b=

28、-8;例 外部變量定義與說明你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)3636/*ch7_17.c*/int a=3,b=5;max(int a, int b) int c; c=ab?a:b; return(c);main() int a=8; printf(max=%d,max(a,b);運行結(jié)果:max=8例 外部變量與局部變量你現(xiàn)在所處的位置在:首頁C語言教學(xué)幻燈片版第六章 函數(shù)3737w存儲方式n靜態(tài)存儲:程序運行期間分配固定存儲空間n動態(tài)存儲:程序運行期間根據(jù)需要動態(tài)分配存儲空間w內(nèi)存用戶區(qū)程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(auto register)函數(shù)調(diào)用現(xiàn)場保護

溫馨提示

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

評論

0/150

提交評論