第4章 C語言程序設(shè)計(jì)課件_第1頁
第4章 C語言程序設(shè)計(jì)課件_第2頁
第4章 C語言程序設(shè)計(jì)課件_第3頁
第4章 C語言程序設(shè)計(jì)課件_第4頁
第4章 C語言程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、請用請用PowerPoint 2003PowerPoint 2003播放播放教學(xué)目的教學(xué)目的 要求學(xué)生了解要求學(xué)生了解模塊化程序設(shè)計(jì)與函數(shù),模塊化程序設(shè)計(jì)與函數(shù),重點(diǎn)掌握函數(shù)的定義與調(diào)用重點(diǎn)掌握函數(shù)的定義與調(diào)用 ;重點(diǎn)掌握參數(shù)的重點(diǎn)掌握參數(shù)的傳遞和函數(shù)的嵌套調(diào)用,掌握遞歸調(diào)用傳遞和函數(shù)的嵌套調(diào)用,掌握遞歸調(diào)用 ;了解了解變量的作用域與存儲(chǔ)方式,重點(diǎn)掌握編譯預(yù)處理變量的作用域與存儲(chǔ)方式,重點(diǎn)掌握編譯預(yù)處理及綜合應(yīng)用及綜合應(yīng)用 。教學(xué)重點(diǎn)教學(xué)重點(diǎn) 函數(shù)參數(shù)傳遞與返回值;變量的作用域與函數(shù)參數(shù)傳遞與返回值;變量的作用域與存儲(chǔ)類型;模塊化原則存儲(chǔ)類型;模塊化原則。關(guān)鍵詞關(guān)鍵詞模塊化;函數(shù);函數(shù)定義;函

2、數(shù)調(diào)用;模塊化;函數(shù);函數(shù)定義;函數(shù)調(diào)用;變量作用域;變量存儲(chǔ)方式;編譯預(yù)處理。變量作用域;變量存儲(chǔ)方式;編譯預(yù)處理。 授課時(shí)量授課時(shí)量理論學(xué)時(shí):理論學(xué)時(shí):6 6例例4.1 1). 一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成。一個(gè)源程 序文件是一個(gè)編譯單位,即以源文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。2). 一個(gè)程序由一個(gè)或多個(gè)源程序文件組成。一個(gè)源文件可以為多個(gè)程序公用。3). 一個(gè)程序有且只能有一個(gè)名為main的主函數(shù),程序的執(zhí)行從 main 函數(shù)開始,調(diào)用其它函數(shù)后流程回到 main 函數(shù),在 main 函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。main 函數(shù)是系統(tǒng)定義的。 4). 所有函數(shù)都是平等的

3、,即在定義函數(shù)時(shí)是互相獨(dú)立的,一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù),即函數(shù)不能嵌套定義,但可以互相調(diào)用(main 函數(shù)不能調(diào)用)。 5). 從用戶使用的角度看,函數(shù)有兩種:標(biāo)準(zhǔn)函數(shù),即庫函數(shù)。這是由系統(tǒng)提供的。使用時(shí)應(yīng)注意:函數(shù)功能、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型、函數(shù)返回值意義和類型、需要使用的包含文件用戶自己定義的函數(shù),以解決用戶的專門需要。所謂編程實(shí)質(zhì)就是編寫自定義功能函數(shù),通過各函數(shù)的相互調(diào)用實(shí)現(xiàn)算法,甚至可以考慮把相關(guān)的函數(shù)集合到一起,形成自己的函數(shù)庫,并加以相應(yīng)的頭文件,實(shí)現(xiàn)商業(yè)化。6). 從函數(shù)的形式看,函數(shù)分兩類無參函數(shù)。調(diào)用時(shí),主調(diào)函數(shù)無數(shù)據(jù)傳送給被調(diào)函數(shù)。有參函數(shù)。調(diào)用時(shí)

4、,主調(diào)函數(shù)與被調(diào)函數(shù)之間有參數(shù)傳遞。 7). 函數(shù)調(diào)用完成后,通過return語句返回函數(shù)值,若無該語句將返回不確定值,若函數(shù)類型定義為void(空)類型,該函數(shù)將沒有返回值。 合法標(biāo)識符函數(shù)返回值類型缺省int型無返回值void函數(shù)體函數(shù)類型函數(shù)名(形參類型說明表)說明部分語句部分現(xiàn)代風(fēng)格:例有參函數(shù)(現(xiàn)代風(fēng)格)intmax(intx,inty)intz;z=xy?x:y;return(z);例有參函數(shù)(現(xiàn)代風(fēng)格)intmax(intx,y)intz;z=xy?x:y;return(z);例空函數(shù)dummy()函數(shù)體為空例無參函數(shù)printstar()printf(“*n”);或prints

5、tar(void)printf(“*n”);函數(shù)類型函數(shù)名(形參表)形參類型說明說明部分語句部分傳統(tǒng)風(fēng)格:例有參函數(shù)(傳統(tǒng)風(fē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=b)c=0;el

6、sec=-1;return(c);運(yùn)行結(jié)果:0運(yùn)行結(jié)果:1c=max(a,b);(main函數(shù))(max函數(shù))max(intx,inty)intz;z=xy?x:y;return(z);例比較兩個(gè)數(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);形參實(shí)參例計(jì)算x的立方#includefloatcube(floatx)return(x*x*x);main()floata,product;printf(Pleaseinp

7、utvalueofa:);scanf(%f,&a);product=cube(a);printf(”Cubeof%.4fis%.4fn,a,product);xaproduct1.21.21.728711x:y:調(diào)用前:調(diào)用結(jié)束:711x:y:例交換兩個(gè)數(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;調(diào)用:711a:b:711x

8、: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);例交換兩個(gè)數(shù)a59b調(diào)前:a59b調(diào)swap:p1&a&bp2a95b交換:p1&a&bp2a95b返回:#includelongsum(in

9、ta,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 注:當(dāng)函數(shù)返回值類型與函數(shù)的類型不一致的時(shí)候,按函數(shù)的類型轉(zhuǎn)換。 例函數(shù)說明舉例main

10、()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);被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,不必函數(shù)說明/*ch4_1

11、0.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()調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b例求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值#includeintdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);vo

12、idmain()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()調(diào)用函數(shù)dif輸出結(jié)束dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)例用弦截

13、法求方程的根)()()()(121221xfxfxfxxfxxxyf(x)0 x1x2xf(x1)f(x2)077951923xxx求f(x1)與f(x2)連線與x軸的交點(diǎn)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ù)運(yùn)行情況:Inputx1,x2:2,6Arootofequationis5.0000main()調(diào)用函數(shù)root輸出根x結(jié)束root函數(shù)xpoint函數(shù)調(diào)用函數(shù)xpoint調(diào)用函數(shù)ff函數(shù)f()調(diào)f調(diào)f2調(diào)f1f1()f2()intf(in

14、tx)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,three,two);

15、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運(yùn)行情況如下:Inputthenumberofdisks:3Inputthenumberofdisks:A-CA-BC-BA-CB-AB-CA-C說明:main函數(shù)中定義的變量只在main函數(shù)中有效;不同函數(shù)中同名變量,屬于不同的變量,占不同內(nèi)存單元;形參屬于局部變量;可定義在復(fù)合語句中有

16、效的變量,上級語句塊定義的變量對下級語句塊有效(除非下級語句塊定義了同名變量將屏蔽上級語句塊定義的變量) 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);例復(fù)合語句中變量#defineN5main()inti

17、;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);運(yùn)行結(jié)果:54321例復(fù)合語句中變量#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=array0;for(i=

18、1;imax)max=arrayi;elseif(arrayiy?x:y;return(z);main()externinta,b;printf(max=%d,max(a,b);inta=13,b=-8;運(yùn)行結(jié)果: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);例外部變量與局部變量運(yùn)行結(jié)果:max

19、=8inti;main()voidprt();for(i=0;i5;i+)prt();voidprt()for(i=0;i5;i+)printf(“%c”,*);printf(“n”);例外部變量副作用運(yùn)行結(jié)果:*如:intsum;autointa,b,c;registerinti;staticfloatx,y;程序區(qū)靜態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)存儲(chǔ)區(qū)全局變量、局部靜態(tài)變量形參變量局部動(dòng)態(tài)變量(autoregister)函數(shù)調(diào)用現(xiàn)場保護(hù)和返回地址等靜態(tài)動(dòng)態(tài)存儲(chǔ)方式程序整個(gè)運(yùn)行期間函數(shù)調(diào)用開始至結(jié)束生存期編譯時(shí)賦初值,只賦一次每次函數(shù)調(diào)用時(shí)賦初值自動(dòng)賦初值0或空字符不確定未賦初值靜態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)區(qū)存儲(chǔ)區(qū)寄存器局

20、部變量外部變量作用域定義變量的函數(shù)或復(fù)合語句內(nèi)本文件其它文件u局部變量默認(rèn)為auto型uregister型變量個(gè)數(shù)受限,且不能為long, double, float型u局部static變量具有全局壽命和局部可見性u局部static變量具有可繼承性uextern不是變量定義,可擴(kuò)展外部變量作用域register局部staticauto外部static外部存儲(chǔ)類別例文件file1.cinta;main().f2;.f1;.f1()autointb;f2;.f2()staticintc;C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:例auto變量的作

21、用域main()intx=1;voidprt(void);intx=3;prt();printf(“2ndx=%dn”,x);printf(“1stx=%dn”,x);voidprt(void)intx=5;printf(“3thx=%dn”,x);運(yùn)行結(jié)果: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)變量值具有可繼承性運(yùn)行結(jié)果:11

22、1main()voidincrement(void);increment();increment();increment();voidincrement(void)staticintx=0;x+;printf(“%dn”,x);運(yùn)行結(jié)果: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;printf(-M

23、AIN-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)存儲(chǔ)區(qū)動(dòng)態(tài)存儲(chǔ)區(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:15例變量的壽命與

24、可見性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擴(kuò)展外部變量作用域運(yùn)行結(jié)果:1:x=0y=02:x=135y=2463:x=135y=246例引用其它文件中的外部變量intglobal;externfloatx;main()intlocal;.externintglobal;sta

25、ticintnumber;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;intpower(in

26、tn)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ù)實(shí)現(xiàn)同樣的功能帶參宏函數(shù)處理過程不分配內(nèi)存簡單的字符置換分配內(nèi)存先求實(shí)參值,再代入形參處理時(shí)間編譯時(shí)程序運(yùn)行時(shí)參數(shù)類型無類型問題定義實(shí)參,形參類型程序長度變長不變運(yùn)行速度不占運(yùn)行時(shí)間調(diào)用和返回占時(shí)間#include“file2

27、.c”file1.cfile2.cfile1.cfile2.cABA 直接按標(biāo)準(zhǔn)目錄搜索“” 先在當(dāng)前目錄搜索,再搜索標(biāo)準(zhǔn)目錄可指定路徑宏定義數(shù)據(jù)結(jié)構(gòu)定義函數(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),cube(n),quad(n);功能:常量表達(dá)式為非時(shí),程序段被編譯

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論