c語言課件第六章(顏輝)課件_第1頁
c語言課件第六章(顏輝)課件_第2頁
c語言課件第六章(顏輝)課件_第3頁
c語言課件第六章(顏輝)課件_第4頁
c語言課件第六章(顏輝)課件_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、c語言課件第六章(顏輝)第第 六六 章章 函函 數(shù)數(shù)n函數(shù)的基本使用函數(shù)的基本使用n函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用n函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 n變量存儲(chǔ)特征變量存儲(chǔ)特征n宏宏c語言課件第六章(顏輝)函數(shù)的概念函數(shù)的概念 k!n!+m!f=1;for(i=1; i=n; i+) f=f*i;scanf(%d%d%d, &m, &n, &k);fk=1;for(i=1; i=k; i+) fk = fk*i;fm=1;for(i=1; i=m; i+) fm = fm*i;fn=1;for(i=1; i=n; i+) fn = fn*i;printf(%fn, fm/(fn+fk);反復(fù)使用的代

2、碼段c語言課件第六章(顏輝)# include void main() int k, m, n; float fk, fm, fn; scanf(%d%d%d, &m, &n, &k); fk=1; for(i=1; i=k; i+) fk = fk*i; fm=1; for(i=1; i=m; i+) fm = fm*i; fn=1; for(i=1; i=n; i+) fn = fn*i; printf(%fn, fm/(fn+fk);# include void main() int k, m, n; float fk, fm, fn; float fact(int n); scanf(

3、%d%d%d, &m, &n, &k); fm = fact(m); fn = fact(n); fk = fact(k); printf(%fn, fm/(fn+fk);float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f;c語言課件第六章(顏輝)# include void main() int k, m, n; float fk, fm, fn; float fact(int n); scanf(%d%d%d, &m, &n, &k); fm = fact(m); fn = fact(n); fk =

4、fact(k); printf(%fn, fm/(fn+fk);float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f;mainscanfprintffact庫函數(shù)自定義函數(shù)庫函數(shù)main 主調(diào)函數(shù)fact 被調(diào)用函數(shù)調(diào)用定義c語言課件第六章(顏輝)函數(shù)的概念函數(shù)的概念n庫函數(shù) scanf() printf() sqrt()n功能獨(dú)立,反復(fù)使用的代碼段 計(jì)算階乘 fact() n模塊化編程 學(xué)生成績檔案管理軟件 成績輸入 成績修改 成績統(tǒng)計(jì) 成績打印c語言課件第六章(顏輝)# include void main

5、() int in; printf(1. INPUT 2.EDIT 3. PROCESS 4.PRINT 5.EXITn); while(1) printf(please input 1-5:); scanf(%d,&in); if (in=5) break; switch(in) case 1: input( ); break; case 2: edit( ); break; case 3: process( ); break; case 4: print( ); break; c語言課件第六章(顏輝)void input( ) /* .成績輸入 */ .void edit( ) /* 成績

6、修改 */ . 4個(gè)函數(shù)的定義void process( ) /* 成績統(tǒng)計(jì) */ .void print( ) /* 成績打印 */ .c語言課件第六章(顏輝)函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); 調(diào)用定義float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f;c語言課件第六章(顏輝)函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用返回值類型返回值類型 函數(shù)名函數(shù)名( (形式參數(shù)表形式參

7、數(shù)表) ) void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f;調(diào)用定義函數(shù)名函數(shù)名( (實(shí)際參數(shù)表實(shí)際參數(shù)表) )參數(shù)傳遞c語言課件第六章(顏輝)返回值類型返回值類型 函數(shù)名函數(shù)名( (形式參數(shù)表形式參數(shù)表) ) void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); fl

8、oat fact(int n) int i; float f=1; for(i=1; i 形參函數(shù)的參數(shù)函數(shù)的參數(shù)函數(shù)名函數(shù)名( (實(shí)際參數(shù)表實(shí)際參數(shù)表) )c語言課件第六章(顏輝)main() output( ); void output( ) printf(”*n”); printf(”* very good *n”); printf(”*n”);main( ) int x,y,z; scanf(“%d%d”,&x,&y); z=max(x, y); printf(“%d”,z);int max (int a , int b ) int c ; c=ab ? a : b ; return(

9、 c ) ;問題:實(shí)參可以是表達(dá)式嗎?如果實(shí)參和形參的類型不一樣?c語言課件第六章(顏輝)返回值類型返回值類型 函數(shù)名函數(shù)名( (形式參數(shù)表形式參數(shù)表) ) void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); float fact(int n) int i; float f=1; for(i=1; ib ? a : b ; return( c ) ;int問題:如果返回值的類型與return (exp) 中的exp不一致?c語言課件第六章(顏輝)實(shí)參 實(shí)參與形參實(shí)參與形參 參數(shù)傳遞參數(shù)傳遞void m

10、ain() int x, y, z; scanf(“%d%d”,&x,&y); z=max( x, y ); printf(“%d”,z)int max(int a , int b ) int c; c=ab ? a : b; return c;常量變量表達(dá)式形參:變量c語言課件第六章(顏輝)實(shí)參與形參實(shí)參與形參 參數(shù)傳遞參數(shù)傳遞int max(int a , int b ) int c; c=ab ? a : b; return c;void main() int x, y, z; scanf(“%d%d”,&x,&y); z=max( x, y ); printf(“%d”,z)x 3y

11、5zabc 5355c語言課件第六章(顏輝)1、實(shí)參與形參:個(gè)數(shù)相同、類型一致、按順序傳遞 2、實(shí)參 - 形參,值傳遞 單向 形參值的變化不會(huì)影響實(shí)參的值 實(shí)參和形參可以同名實(shí)參與形參實(shí)參與形參 參數(shù)傳遞參數(shù)傳遞void main() int x, y, z; scanf(“%d%d”,&x,&y); z=max( x, y ); printf(“%d”,z)int max(int a , int b ) int c; c=ab ? a : b; return c;c語言課件第六章(顏輝)void main( ) int x, y; scanf(%d%d, &x, &y); swap(x, y

12、); printf(%d%d, x, y);閱讀程序閱讀程序void s x, int y) int t; t = x; x = y; y = t;輸入 3 5c語言課件第六章(顏輝)函數(shù)的說明函數(shù)的說明void s a, int b) int t; t = a; a = b; b = t;void main( ) int x, y; scanf(%d%d, &x, &y); swap(x, y); printf(%d%d, x, y);void main( ) int x, y; scanf(%d%d, &x, &y); swap(x, y); printf(%d%d, x, y);void

13、 s a, int b) int t; t = a; a = b; b = t;void s a, int b);函數(shù)在被調(diào)用前必須先函數(shù)在被調(diào)用前必須先定義定義或或說明說明!c語言課件第六章(顏輝)函數(shù)調(diào)用小結(jié)函數(shù)調(diào)用小結(jié)函數(shù)調(diào)用時(shí),實(shí)參函數(shù)調(diào)用時(shí),實(shí)參計(jì)算值計(jì)算值,復(fù)制復(fù)制給給相應(yīng)位置相應(yīng)位置的形參;的形參;函數(shù)執(zhí)行完后,通過函數(shù)執(zhí)行完后,通過return (exp),可返回可返回結(jié)果結(jié)果。調(diào)用其他函數(shù),調(diào)用其他函數(shù),必須先說明!必須先說明!有多個(gè)實(shí)參時(shí) 后面的先計(jì)算形參的改變不影響實(shí)參數(shù)量、類型、順序一致一個(gè)結(jié)果c語言課件第六章(顏輝)分析函數(shù)調(diào)用過程分析函數(shù)調(diào)用過程# include

14、void main() int k, m, n; float fk, fm, fn; float fact(int n); scanf(%d%d%d, &m, &n, &k); fm = fact(m); fn = fact(n); fk = fact(k); printf(%fn, fm/(fn+fk);float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f; c語言課件第六章(顏輝)例T6-1 1!+2!+n!算法:k =1 to n s=s+f f=k! k+s=0;for(k=1;k=n;k+) f=f

15、act(k); s=s+f; float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return(f);c語言課件第六章(顏輝)例T6-2 x+x2+xn算法:k =1 to n s=s+f f= xk k+s=0;for(k=1;k=n;k+) f=mypow(x,k); s=s+f; float mypow(float x, int n) int i; float f=1; for(i=1; i=n; i+) f = f*x; return(f);c語言課件第六章(顏輝)例T6-3 編寫函數(shù) 比較2個(gè)變量是否相等equal

16、(x, y)當(dāng)x=y, 返回1 否則, 返回0int equal(int x, int y) if(x=y) return 1; else return 0;void main( ) int x, y; scanf(%d%d, &x, &y); if(equal(x,y) printf(x=y); else printf(x!=y);int equal(int x, int y) return(x=y);c語言課件第六章(顏輝)例T6-4 輸出100200間所有素?cái)?shù)算法:m =100 to 200 if m是素?cái)?shù) print mint prime(int m) int i, n=sqrt(m)

17、; for(i=2; in) return 1; else return 0;for(m=100; m=200; m+) if(prime(m) printf(%d,m) prime(m)if m是素?cái)?shù),返回1 否則,返回0c語言課件第六章(顏輝)函數(shù)的順序調(diào)用和嵌套調(diào)用函數(shù)的順序調(diào)用和嵌套調(diào)用n順序調(diào)用void main( ) f1( ); f2( ); f1() f2() mainf1f2mainf1f2c語言課件第六章(顏輝)函數(shù)的順序調(diào)用和嵌套調(diào)用函數(shù)的順序調(diào)用和嵌套調(diào)用n嵌套調(diào)用void main( ) f1( ); f1() f2( ); f2() mainf1f2mainf1f2

18、c語言課件第六章(顏輝)例例 求三角形面積求三角形面積 area=s(s-a)(s-b)(s-c)s=(a+b+c)/2mainareasmainareas# include # include void main() float a, b, c; float area(float a, float b, float c); float s(float a, float b, float c); scanf(%f%f%f, &a, &b, &c); printf(%fn, area(a, b, c);float area(float a, float b, float c) float ss;

19、 ss=s(a,b,c); return sqrt(ss*(ss-a)*(ss-b)*(ss-c); float s(float a, float b, float c) return (a+b+c)/2;c語言課件第六章(顏輝)遞歸式遞歸出口函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用( (遞歸函數(shù)遞歸函數(shù)) )求n!遞歸定義 n! = n * (n-1)! (n 1) n! = 1 (n = 0,1)void main() float fact(int n); printf(%fn, fact(5); float fact(int n) float res; if(n=0 | n=1) res=1; el

20、se res = n*fact(n-1); return res; fact(n)=n*fact(n-1);c語言課件第六章(顏輝)遞歸函數(shù)求 n! 的實(shí)現(xiàn)過程 fact(3) 3*fact(2) 2*fact(1)126float fact(int n) float res; if(n=0 | n=1) res=1; else res = n*fact(n-1); return res; c語言課件第六章(顏輝)函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用( (遞歸函數(shù)遞歸函數(shù)) )n用遞歸實(shí)現(xiàn)的問題,滿足兩個(gè)條件:問題可以逐步簡化成自身較簡單的形式(遞歸式)n! = n * (n-1)! n n-1i =

21、 n + i i=1 i=1遞歸最終能結(jié)束(遞歸出口)兩個(gè)條件缺一不可解決遞歸問題的兩個(gè)著眼點(diǎn)c語言課件第六章(顏輝)變量作用范圍變量作用范圍( (作用域作用域) ) 在函數(shù)內(nèi)定義的變量(包括形參)。局部變量 作用范圍:本函數(shù)內(nèi)部作用范圍:本函數(shù)內(nèi)部。 定義在復(fù)合語句內(nèi)的變量。 作用范圍:復(fù)合語句內(nèi)部作用范圍:復(fù)合語句內(nèi)部。全局變量:在函數(shù)以外定義的變量,不從屬于任一函數(shù)。作用范圍:從定義處到源文件結(jié)束作用范圍:從定義處到源文件結(jié)束(包括各函數(shù))(包括各函數(shù))c語言課件第六章(顏輝)變量作用范圍示例變量作用范圍示例n區(qū)分局部變量和全局變量int x=1;void main( ) int a=2

22、; . int b=3; . f( ); .int t=4 ;void f( ) int x=5, b=6; .int a=7; x=? a=? b=?b=? x=? b=? t=? a=? x=1 a=2 b=3b沒定義沒定義 x=5 b=6 t=4 a沒定義沒定義 若局部變量與全局變量同名,局部變量優(yōu)先c語言課件第六章(顏輝)變量作用范圍示例變量作用范圍示例int x=1;int f(int x) return(x+); main( ) int y; y=f(2) ; x=f(x) ; printf(“%d%d”, y, x);x=1c語言課件第六章(顏輝)變量作用范圍變量作用范圍n如果局

23、部變量與全局變量同名,局部變量優(yōu)先。n不要濫用全局變量。副作用int x=1;void f1() x+;void f2() x=5;void main( ) x=10; f1(); printf(%d , x); f2(); printf(%d , x);11 5c語言課件第六章(顏輝)變量存儲(chǔ)形式和生存期變量存儲(chǔ)形式和生存期1、動(dòng)態(tài)存儲(chǔ)自動(dòng)變量(auto): 普通的局部變量int x, y; auto int x, y;char c1; auto char c1;函數(shù)調(diào)用時(shí),才定義變量,分配存儲(chǔ)單元;函數(shù)調(diào)用結(jié)束,收回存儲(chǔ)單元。即使對(duì)同一函數(shù)的幾次調(diào)用,分配的存儲(chǔ)單元也不同。 fact(3)

24、 3*fact(2) 2*fact(1)126float fact(int n) float res; if(n=0 | n=1) res=1; else res = n*fact(n-1); return res; n=3n=2n=1c語言課件第六章(顏輝)變量存儲(chǔ)形式變量存儲(chǔ)形式2、靜態(tài)存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)分配單元執(zhí)行程序時(shí)定義變量,分配單元,運(yùn)行結(jié)束時(shí)收回。全局變量靜態(tài)局部變量 靜態(tài)全局變量c語言課件第六章(顏輝)int k;main() int i; k=2; for(i=4; i0; i-) fun();fun() int j=2; printf(j=%d, k=%dn, j, k);

25、k=k*k; j=j*j;示例示例j=2, k=2j=2, k=4j=2, k=16j=2, k=256作用域生存期c語言課件第六章(顏輝)int gobal=1;void fun();void main() int i; for(i=0; i3; i+) fun();void fun() int local=1; static int static_local=1; printf(gobal=%d, local=%d, static_local=%dn,gobal, local, static_local); gobal+; local+; static_local+;靜態(tài)局部變量靜態(tài)局部變

26、量gobal=1, local=1, static_local=1 gobal=2, local=1, static_local=2 gobal=3, local=1, static_local=3 作用域生存期c語言課件第六章(顏輝)int gobal=1;void fun();void main() int i; for(i=0; i3; i+) fun();void fun() int local=1; static int static_local=1; printf(gobal=%d, local=%d, static_local=%dn,gobal, local, static_l

27、ocal); gobal+; local+; static_local+;變量的初始化變量的初始化作用域生存期int local;local=1;static int static_local;static_local=1;等價(jià)嗎?靜態(tài)變量初值為0c語言課件第六章(顏輝)變量存儲(chǔ)形式變量存儲(chǔ)形式3、外部變量extern int x; 4、寄存器變量register int k;某些系統(tǒng)對(duì)寄存器變量的使用會(huì)比普通變量運(yùn)行速度快,但中寄存器變量與auto變量等價(jià)。c語言課件第六章(顏輝)程序模塊結(jié)構(gòu)程序模塊結(jié)構(gòu)文件模塊的連接文件模塊的連接 #include F1.cvoid main() int

28、n; long t; scanf(%d, &n); t = fact(n); printf(%ldn, t); 文件名 F1.clong fact(int k) int i; long res=1; for (i=1; i=k ; i+) res = res * i;return res; 文件名 F2.clong fact(int k) int i; long res=1; for (i=1; i=k ; i+) res = res * i;return res; void main() int n; long t; scanf(%d, &n); t = fact(n); printf(%l

29、dn, t); 文件名 F1.cc語言課件第六章(顏輝)程序模塊結(jié)構(gòu)程序模塊結(jié)構(gòu)一、一、文件包含文件包含 可以實(shí)現(xiàn)一個(gè)文件把另一個(gè)文件的全部內(nèi)容包含進(jìn)來。 格式: # include 文件名文件名 說明:1、#include 不是語句,無需分號(hào)。2、如果要連接多個(gè)文件,可用多個(gè)include包含,順序按調(diào)用關(guān)系,被調(diào)的應(yīng)在調(diào)用的前面。允許多層調(diào)用。3、.文件與.性質(zhì)相同,都是程序文件,.文件突出了頭文件(head)的性質(zhì)。4、include有兩種寫法: #include ” #include 只在tcinclude 文件夾下找 適用于系統(tǒng)頭文件 除此之外,還到程序所在文件夾下查找 適用于自定義頭文件c語言課件第六章(顏輝) 二、使用工程文件二、使用工程文件extern long fact(int k);void main() int n; long t; scanf(%d, &

溫馨提示

  • 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)論