




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、請用請用PowerPoint 2003PowerPoint 2003播放播放第第4章章 函數(shù)函數(shù)本章導讀本章導讀 學習完本章以后,你將能夠:l理解模塊化程序設計的基本思想,掌握利用函數(shù)實現(xiàn)程序的模塊化設計 ;l掌握函數(shù)的定義與調用方法 ;l了解系統(tǒng)標準函數(shù)的作用,掌握利用系統(tǒng)函數(shù)解決具體問題的方法 ;l掌握函數(shù)的嵌套調用,遞歸調用 ;l理解變量作用域與存儲方式 ;l掌握編譯預處理 內(nèi)容介紹內(nèi)容介紹C語言是面向過程的模塊化語言,以函數(shù)(具有某種特定功能相對獨立的程序模塊)作為程序的模塊單位,實現(xiàn)程序模塊化,又稱函數(shù)式的語言。的源程序是由一個主函數(shù)和若干個函數(shù)組成的,函數(shù)的相互調用構成了程序。 在
2、程序設計中常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供公共選用。要善于利用函數(shù),以減少重復編寫程序段的工作量。 變量是對程序中數(shù)據(jù)的存儲空間的抽象,必須先定義后使用,每個變量僅在定義它的語句塊(包含下級語句快)內(nèi)有效 。 變量的屬性包括:操作屬性和存儲屬性 。教學目的教學目的 要求學生了解要求學生了解模塊化程序設計與函數(shù),模塊化程序設計與函數(shù),重點掌握函數(shù)的定義與調用重點掌握函數(shù)的定義與調用 ;重點掌握參數(shù)的重點掌握參數(shù)的傳遞和函數(shù)的嵌套調用,掌握遞歸調用傳遞和函數(shù)的嵌套調用,掌握遞歸調用 ;了解了解變量的作用域與存儲方式,重點掌握編譯預處理變量的作用域與存儲方式,重點掌握編譯預處理及綜合
3、應用及綜合應用 。v系統(tǒng)函數(shù)的正確調用系統(tǒng)函數(shù)的正確調用 v用戶函數(shù)的定義方法用戶函數(shù)的定義方法 v函數(shù)的類型和返回值函數(shù)的類型和返回值 v形式參數(shù)與實際參數(shù),參數(shù)值的傳遞形式參數(shù)與實際參數(shù),參數(shù)值的傳遞 v函數(shù)的正確調用,嵌套調用,遞歸調用函數(shù)的正確調用,嵌套調用,遞歸調用 v局部變量和全局變量局部變量和全局變量 v變量的存儲類別(自動,靜態(tài),寄存器,外變量的存儲類別(自動,靜態(tài),寄存器,外部),變量的作用域和生存期部),變量的作用域和生存期 v宏定義,文件包含和條件編譯宏定義,文件包含和條件編譯教學重點教學重點教學難點教學難點 函數(shù)參數(shù)傳遞與返回值;變量的作用域與函數(shù)參數(shù)傳遞與返回值;變量
4、的作用域與存儲類型;模塊化原則存儲類型;模塊化原則。關鍵詞關鍵詞模塊化;函數(shù);函數(shù)定義;函數(shù)調用;模塊化;函數(shù);函數(shù)定義;函數(shù)調用;變量作用域;變量存儲方式;編譯預處理。變量作用域;變量存儲方式;編譯預處理。 授課時量授課時量理論學時:理論學時:6 6本章主要內(nèi)容如下:本章主要內(nèi)容如下:4.1 概述概述 C語言是面向過程的模塊化語言,以函數(shù)(具有某語言是面向過程的模塊化語言,以函數(shù)(具有某種特定功能相對獨立的程序模塊)作為程序的模塊單位,種特定功能相對獨立的程序模塊)作為程序的模塊單位,實現(xiàn)程序模塊化,又稱函數(shù)式的語言。的源程序是由實現(xiàn)程序模塊化,又稱函數(shù)式的語言。的源程序是由一個主函數(shù)和若干
5、個函數(shù)組成的,函數(shù)的相互調用構成一個主函數(shù)和若干個函數(shù)組成的,函數(shù)的相互調用構成了程序。了程序。 運行時,運行時, 程序從主函數(shù)程序從主函數(shù)main( ) 開始執(zhí)開始執(zhí)行,到行,到 main( ) 的終止行結束。其它函數(shù)由的終止行結束。其它函數(shù)由 main() 或別或別的函數(shù)或自身調用后組成可執(zhí)行程序。的函數(shù)或自身調用后組成可執(zhí)行程序。 在程序設計中常將一些常用的功能模塊編寫成函數(shù),在程序設計中常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供公共選用。要善于利用函數(shù),以減少重放在函數(shù)庫中供公共選用。要善于利用函數(shù),以減少重復編寫程序段的工作量。復編寫程序段的工作量。例例4.1 1). 一個源程
6、序文件由一個或多個函數(shù)組成。一個源程 序文件是一個編譯單位,即以源文件為單位進行編譯,而不是以函數(shù)為單位進行編譯。2). 一個程序由一個或多個源程序文件組成。一個源文件可以為多個程序公用。3). 一個程序有且只能有一個名為main的主函數(shù),程序的執(zhí)行從 main 函數(shù)開始,調用其它函數(shù)后流程回到 main 函數(shù),在 main 函數(shù)中結束整個程序的運行。main 函數(shù)是系統(tǒng)定義的。 4). 所有函數(shù)都是平等的,即在定義函數(shù)時是互相獨立的,一個函數(shù)并不從屬于另一個函數(shù),即函數(shù)不能嵌套定義,但可以互相調用(main 函數(shù)不能調用)。 5). 從用戶使用的角度看,函數(shù)有兩種:標準函數(shù),即庫函數(shù)。這是由
7、系統(tǒng)提供的。使用時應注意:函數(shù)功能、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型、函數(shù)返回值意義和類型、需要使用的包含文件用戶自己定義的函數(shù),以解決用戶的專門需要。所謂編程實質就是編寫自定義功能函數(shù),通過各函數(shù)的相互調用實現(xiàn)算法,甚至可以考慮把相關的函數(shù)集合到一起,形成自己的函數(shù)庫,并加以相應的頭文件,實現(xiàn)商業(yè)化。6). 從函數(shù)的形式看,函數(shù)分兩類無參函數(shù)。調用時,主調函數(shù)無數(shù)據(jù)傳送給被調函數(shù)。有參函數(shù)。調用時,主調函數(shù)與被調函數(shù)之間有參數(shù)傳遞。 7). 函數(shù)調用完成后,通過return語句返回函數(shù)值,若無該語句將返回不確定值,若函數(shù)類型定義為void(空)類型,該函數(shù)將沒有返回值。 4.2 函數(shù)
8、的定義與調用函數(shù)的定義與調用函數(shù)的定義函數(shù)的定義 函數(shù)的調用、參數(shù)及傳遞方式函數(shù)的調用、參數(shù)及傳遞方式 函數(shù)的返回值函數(shù)的返回值 函數(shù)聲明的作用函數(shù)聲明的作用 main函數(shù)中的參數(shù)函數(shù)中的參數(shù) 合法標識符函數(shù)返回值類型缺省int型無返回值void函數(shù)體函數(shù)類型函數(shù)名(形參類型說明表)說明部分語句部分現(xiàn)代風格:例有參函數(shù)(現(xiàn)代風格)intmax(intx,inty)intz;z=xy?x:y;return(z);例有參函數(shù)(現(xiàn)代風格)intmax(intx,y)intz;z=xy?x:y;return(z);例空函數(shù)dummy()函數(shù)體為空例無參函數(shù)printstar()printf(“*n”)
9、;或printstar(void)printf(“*n”);函數(shù)類型函數(shù)名(形參表)形參類型說明說明部分語句部分傳統(tǒng)風格:例有參函數(shù)(傳統(tǒng)風格)intmax(x,y)intx,y;intz;z=xy?x:y;return(z);main()inti=2,p;p=f(i,+i);printf(%d,p);intf(inta,intb)intc;if(ab)c=1;elseif(a=b)c=0;elsec=-1;return(c);例參數(shù)求值順序main()inti=2,p;p=f(i,i+);printf(%d,p);intf(inta,intb)intc;if(ab)c=1;elseif(a=
10、b)c=0;elsec=-1;return(c);運行結果:0運行結果:1c=max(a,b);(main函數(shù))(max函數(shù))max(intx,inty)intz;z=xy?x:y;return(z);例比較兩個數(shù)并輸出大者main()inta,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Maxis%d,c);max(intx,inty)intz;z=xy?x:y;return(z);形參實參例計算x的立方#includefloatcube(floatx)return(x*x*x);main()floata,product;printf(P
11、leaseinputvalueofa:);scanf(%f,&a);product=cube(a);printf(”Cubeof%.4fis%.4fn,a,product);xaproduct1.21.21.728711x:y:調用前:調用結束:711x:y:例交換兩個數(shù)/*ch7_2.c*/#includemain()intx=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:n);swap(x,y);printf(x=%d,ty=%dn,x,y);swap(inta,intb)inttemp;temp=a;a=b;b=temp;調用:711
12、a:b:711x:y:swap:711x:y:117a:b:temp/*ch9_3.c*/swap(p1,p2)int*p1,*p2;intp;p=*p1;*p1=*p2;*p2=p;main()inta,b;scanf(%d,%d,&a,&b);printf(“a=%d,b=%dn”,a,b);printf(“swapped:n”);swap(&a,&b);printf(”a=%d,b=%dn,a,b);例交換兩個數(shù)a59b調前:a59b調swap:p1&a&bp2a95b交換:p1&a&bp2a95b返回:#includelo
13、ngsum(inta,intb);longfactorial(intn);main()intn1,n2;longa;scanf(%d,%d,&n1,&n2);a=sum(n1,n2);printf(a=%1d,a);longsum(inta,intb)longc1,c2;c1=factorial(a);c2=factorial(b);return(c1+c2);longfactorial(intn)longrtn=1;inti;for(i=1;iy?x:y;return(z);輸入:5.6,7.3輸出:7 注:當函數(shù)返回值類型與函數(shù)的類型不一致的時候,按函數(shù)的類型轉換。 例函數(shù)
14、說明舉例main()floata,b;intc;scanf(%f,%f,&a,&b);c=max(a,b);printf(Maxis%dn,c);max(floatx,floaty)floatz;z=xy?x:y;return(z);int型函數(shù)可不作函數(shù)說明(VisualC+不行)/*ch4_10.c*/floatadd(floatx,floaty)floatz;z=x+y;return(z);main()floata,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sumis%f,c);被調函數(shù)出現(xiàn)在主調函數(shù)之前,不必函數(shù)說
15、明/*ch4_10.c*/main()floatadd(float,float);/*functiondeclaration*/floata,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sumis%f,c);floatadd(floatx,floaty)floatz;z=x+y;return(z);float add();main()調用函數(shù)a結束a函數(shù)b函數(shù)調用函數(shù)b例求三個數(shù)中最大數(shù)和最小數(shù)的差值#includeintdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,
16、intz);voidmain()inta,b,c,d;scanf(%d%d%d,&a,&b,&c);d=dif(a,b,c);printf(Max-Min=%dn,d);Ch7_202.cintdif(intx,inty,intz)returnmax(x,y,z)-min(x,y,z);intmax(intx,inty,intz)intr;r=xy?x:y;return(rz?r:z);intmin(intx,inty,intz)intr;r=xy?x:y;return(rz?r:z);main()調用函數(shù)dif輸出結束dif函數(shù)max函數(shù)調用函數(shù)max調用函數(shù)minm
17、in函數(shù)例用弦截法求方程的根)()()()(121221xfxfxfxxfxxxyf(x)0 x1x2xf(x1)f(x2)077951923xxx求f(x1)與f(x2)連線與x軸的交點x輸入x1,x2,求f(x1),f(x2)直到f(x1)與f(x2)異號y=f(x),y1=f(x1)y與y1同號真假x1=xy1=yx2=x直到|y|root=x輸出rootroot函數(shù)運行情況:Inputx1,x2:2,6Arootofequationis5.0000main()調用函數(shù)root輸出根x結束root函數(shù)xpoint函數(shù)調用函數(shù)xpoint調用函數(shù)ff函數(shù)f()調f調f2調f1f1()f2(
18、)intf(intx)inty,z;z=f(y);.return(2*z);intf1(intx)inty,z;z=f2(y);.return(2*z);intf2(intt)inta,c;c=f1(a);.return(3+c);例求n的階乘) 1()!1() 1 , 0(1!nnnnn/*ch4_14.c*/#includeintfac(intn)intf;if(n0)printf(n%cn,getone,putone);voidhanoi(intn,charone,chartwo,charthree)if(n=1)move(one,three);elsehanoi(n-1,one,thr
19、ee,two);move(one,three);hanoi(n-1,two,one,three);main()intm;printf(Inputthenumberofdisks:);scanf(%d,&m);printf(Thestepstomoving%3ddisks:n,m);hanoi(m,A,B,C);ABC運行情況如下:Inputthenumberofdisks:3Inputthenumberofdisks:A-CA-BC-BA-CB-AB-CA-C說明:main函數(shù)中定義的變量只在main函數(shù)中有效;不同函數(shù)中同名變量,屬于不同的變量,占不同內(nèi)存單元;形參屬于局部變量;可定
20、義在復合語句中有效的變量,上級語句塊定義的變量對下級語句塊有效(除非下級語句塊定義了同名變量將屏蔽上級語句塊定義的變量) floatf1(inta)intb,c;.charf2(intx,inty)inti,j;main()intm,n;.a,b,c有效x,y,i,j有效m,n有效例不同函數(shù)中同名變量main()inta,b;a=3;b=4;printf(main:a=%d,b=%dn,a,b);sub();printf(main:a=%d,b=%dn,a,b);sub()inta,b;a=6;b=7;printf(sub:a=%d,b=%dn,a,b);例復合語句中變量#defineN5ma
21、in()inti;intaN=1,2,3,4,5;for(i=0;iN/2;i+)inttemp;temp=ai;ai=aN-i-1;aN-i-1=temp;for(i=0;iN;i+)printf(%d,ai);運行結果:54321例復合語句中變量#defineN5main()inti;intaN=1,2,3,4,5;for(i=0;iN/2;i+)inttemp;temp=ai;ai=aN-i-1;aN-i-1=temp;for(i=0;ifloatmax,min;floataverage(floatarray,intn)inti;floatsum=array0;max=min=array
22、0;for(i=1;imax)max=arrayi;elseif(arrayiy?x:y;return(z);main()externinta,b;printf(max=%d,max(a,b);inta=13,b=-8;運行結果:max=13externinta,b;intmax()intz;z=ab?a:b;return(z);main()printf(max=%d,max();inta=13,b=-8;inta=3,b=5;max(inta,intb)intc;c=ab?a:b;return(c);main()inta=8;printf(max=%d,max(a,b);例外部變量與局部變量
23、運行結果:max=8inti;main()voidprt();for(i=0;i5;i+)prt();voidprt()for(i=0;i5;i+)printf(“%c”,*);printf(“n”);例外部變量副作用運行結果:*如:intsum;autointa,b,c;registerinti;staticfloatx,y;程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(autoregister)函數(shù)調用現(xiàn)場保護和返回地址等靜態(tài)動態(tài)存儲方式程序整個運行期間函數(shù)調用開始至結束生存期編譯時賦初值,只賦一次每次函數(shù)調用時賦初值自動賦初值0或空字符不確定未賦初值靜態(tài)存儲區(qū)動態(tài)
24、區(qū)存儲區(qū)寄存器局部變量外部變量作用域定義變量的函數(shù)或復合語句內(nèi)本文件其它文件u局部變量默認為auto型uregister型變量個數(shù)受限,且不能為long, double, float型u局部static變量具有全局壽命和局部可見性u局部static變量具有可繼承性uextern不是變量定義,可擴展外部變量作用域register局部staticauto外部static外部存儲類別例文件file1.cinta;main().f2;.f1;.f1()autointb;f2;.f2()staticintc;C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:例
25、auto變量的作用域main()intx=1;voidprt(void);intx=3;prt();printf(“2ndx=%dn”,x);printf(“1stx=%dn”,x);voidprt(void)intx=5;printf(“3thx=%dn”,x);運行結果:3thx=52ndx=31stx=1x=1作用域x=1作用域x=3作用域x=5作用域main()voidincrement(void);increment();increment();increment();voidincrement(void)intx=0;x+;printf(“%dn”,x);例局部靜態(tài)變量值具有可繼承
26、性運行結果:111main()voidincrement(void);increment();increment();increment();voidincrement(void)staticintx=0;x+;printf(“%dn”,x);運行結果:123other()staticinta=2;staticintb;intc=10;a=a+2;i=i+32;c=c+5;printf(-OTHER-n);printf(i:%da:%db:%dc:%dn,i,a,b,c);b=a;#includeinti=1;main()staticinta;registerintb=-10;intc=0;p
27、rintf(-MAIN-n);printf(i:%da:%db:%dc:%dn,i,a,b,c);c=c+8;other();printf(-MAIN-n);printf(i:%da:%db:%dc:%dn,i,a,b,c);i=i+10;other();全局i1main:a0b:-10registermain:c0靜態(tài)存儲區(qū)動態(tài)存儲區(qū)other:a2other:b0other:c10843315443other:c10675156-Main-i:1a:0b:-10c:0-Other-i:33a:4b:0c:15-Main-i:33a:0b:-10c:8-Other-i:75a:6b:4c:1
28、5例變量的壽命與可見性main()voidgx(),gy();externintx,y;printf(“1:x=%dty=%dn”,x,y);y=246;gx();gy();voidgx()externintx,y;x=135;printf(“2:x=%dty=%dn”,x,y);intx,y;voidgy()printf(“3:x=%dty=%dn”,x,y);例用extern擴展外部變量作用域運行結果:1:x=0y=02:x=135y=2463:x=135y=246例引用其它文件中的外部變量intglobal;externfloatx;main()intlocal;.externintgl
29、obal;staticintnumber;func2().floatx;staticintnumber;func3()externintglobal;.file1.cfile2.cfile3.c例引用其它文件中的變量,輸出ab和a的m次方inta;main()intpower(intn);intb=3,c,d,m;printf(Enterthenumberaanditspower:n);scanf(%d,%d,&a,&m);c=a*b;printf(%d*%d=%dn,a,b,c);d=power(m);printf(%d*%d=%d,a,m,d);externinta;int
30、power(intn)inti,y=1;for(i=1;i(y)?(x):(y) .main() int a,b,c,d,t; . t=MAX(a+b,c+d); 宏展開:t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y) return(xy?x:y);main() int a,b,c,d,t; . t=max(a+b,c+d); 例用宏定義和函數(shù)實現(xiàn)同樣的功能帶參宏函數(shù)處理過程不分配內(nèi)存簡單的字符置換分配內(nèi)存先求實參值,再代入形參處理時間編譯時程序運行時參數(shù)類型無類型問題定義實參,形參類型程序長度變長不變運行速度不占運行時間調用和返回占時間#inclu
31、de“file2.c”file1.cfile2.cfile1.cfile2.cABA 直接按標準目錄搜索“” 先在當前目錄搜索,再搜索標準目錄可指定路徑宏定義數(shù)據(jù)結構定義函數(shù)說明等#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.cBfile1.cAfile3.cfile2.c例文件包含舉例/*powers.h*/#definesqr(x)(x)*(x)#definecube(x)(x)*(x)*(x)#definequad(x)(x)*(x)*(x)*(x)/*ch8_10.c*/#include#included:fengyibkcpowers.h#defineMAX_POWER10voidmain()intn;printf(numbertexp2texp3texp4n);printf(-t-t-t-n);for(n=1;n=MAX_POWER;n+)printf(%2dt%3dt%4dt%5dn,n,sqr(n),cu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國鼓風機軸瓦市場分析及競爭策略研究報告
- 2025至2030年中國隨車急救工具市場分析及競爭策略研究報告
- 2025至2030年中國輸箱系統(tǒng)市場分析及競爭策略研究報告
- 2025至2030年中國花齒墊片市場分析及競爭策略研究報告
- 2025至2030年中國組合臺燈市場分析及競爭策略研究報告
- 2025至2030年中國短節(jié)市場分析及競爭策略研究報告
- 2025至2030年中國甲基丙烯酯市場分析及競爭策略研究報告
- 2025至2030年中國滲透性松銹油市場分析及競爭策略研究報告
- 2025至2030年中國水溶鈦項圈市場分析及競爭策略研究報告
- 2025至2030年中國木材烘干箱市場分析及競爭策略研究報告
- Cpk 計算標準模板
- 化工原理課程設計-用水冷卻煤油產(chǎn)品的列管式換熱器的工藝設計
- 初中美術(湘教版)八年級下冊《變廢為寶》單元作業(yè)設計
- 熱力學與統(tǒng)計物理-試題及答案 2
- 2023-2024學年四川省雅安市小學數(shù)學一年級下冊期末高分試卷
- 網(wǎng)絡游戲代理合同通用版范文(2篇)
- GB/T 6414-1999鑄件尺寸公差與機械加工余量
- GB/T 27773-2011病媒生物密度控制水平蜚蠊
- GB/T 12817-1991鐵道客車通用技術條件
- 質量風險識別項清單及防控措施
- 【課件超聲】常見的超聲效應與圖象偽差
評論
0/150
提交評論