版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第6章 模塊化程序設計函數(shù)2/20/20221 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt26.1 函數(shù)的概念C程序結構C C程序結構如圖所示程序結構如圖所示1.1.一個一個C C程序可以分為若干個函數(shù)程序可以分為若干個函數(shù)2.2.每個程序有且只有一個主函數(shù)每個程序有且只有一個主函數(shù)(main),(main),其他都是子函數(shù)其他都是子函數(shù)3.3.子函數(shù)可以相互調用子函數(shù)可以相互調用, ,但主函數(shù)不能被但主函數(shù)不能被調用調用4.4.一個一個C C源程序由一個或多個文件構成源程序由一個或多個文件構成, ,每個文件就是一個編譯單位每個文件就是一個編譯單位 C語言程
2、序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt3說明說明: :1.1.一個一個C C程序的執(zhí)行從主函數(shù)程序的執(zhí)行從主函數(shù)(main)(main)開始開始, ,調用其他函數(shù)后仍回到調用其他函數(shù)后仍回到mainmain主函數(shù)結束主函數(shù)結束. .2.2.每個子函數(shù)都是平行的每個子函數(shù)都是平行的, ,任何子函數(shù)都任何子函數(shù)都不從屬于其他函數(shù)不從屬于其他函數(shù)3.3.從用戶角度從用戶角度, ,函數(shù)可以分為函數(shù)可以分為: : 標準函數(shù)標準函數(shù), ,即庫函數(shù)即庫函數(shù) 用戶自定義函數(shù)用戶自定義函數(shù)4.4.從函數(shù)形式可以分為從函數(shù)形式可以分為: : 無參函數(shù)無參函數(shù):printstar()
3、:printstar() 有參函數(shù)有參函數(shù):printf(“hello”):printf(“hello”)#include void printStar() printf(“*n”);void printMessage() printf(“Hello, world.n”); printStar();void main() printStar(); printMessage(); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt4函數(shù)定義的一般形式函數(shù)定義的一般形式函數(shù)定義的一般形式: : 類型說明類型說明 函數(shù)名函數(shù)名(形式參數(shù)說明形式參數(shù)說明) 函數(shù)體函數(shù)體 形
4、式參數(shù)說明方法形式參數(shù)說明方法: : 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名,類型類型 變量名變量名 無參數(shù)函數(shù)定義形式無參數(shù)函數(shù)定義形式: : 類型說明類型說明 函數(shù)名函數(shù)名()() 函數(shù)體函數(shù)體 void printHello()void printHello() printf(“hello!n”); printf(“hello!n”); 有參數(shù)函數(shù)定義形式有參數(shù)函數(shù)定義形式: : 類型說明類型說明 函數(shù)名函數(shù)名( (形式參數(shù)說明形式參數(shù)說明) ) 函數(shù)體函數(shù)體 int sum(int x, int y)int sum(int x, int y) int z; int z; z=x+y; z=x+
5、y; return(z); return(z); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt5函數(shù)體函數(shù)體一般情況下一般情況下, ,函數(shù)體有兩部分組成函數(shù)體有兩部分組成: : 局部變量說明局部變量說明 語句語句; ; 局部變量說明局部變量說明: : 函數(shù)體內的變量函數(shù)體內的變量. .其有效范圍僅在本函數(shù)其有效范圍僅在本函數(shù)體內起作用體內起作用, ,離開本函數(shù)無意義離開本函數(shù)無意義. .int sum(int x, int y)int sum(int x, int y) int z; int z; /局部變量定義局部變量定義 z=x+y;z=x+y; retu
6、rn(z); return(z); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt6函數(shù)的參數(shù)和函數(shù)的值一個程序由若干個函數(shù)組成一個程序由若干個函數(shù)組成, ,各函數(shù)各函數(shù)調用時經常要傳遞一些數(shù)據(jù)調用時經常要傳遞一些數(shù)據(jù), ,即即調用函調用函數(shù)數(shù)把數(shù)據(jù)傳遞給把數(shù)據(jù)傳遞給被調用函數(shù)被調用函數(shù), ,經過經過被調被調用函數(shù)用函數(shù)處理后處理后, ,得到一個確定的結果得到一個確定的結果, ,在在返回返回調用函數(shù)調用函數(shù)時時, ,將結果帶回將結果帶回調用函數(shù)調用函數(shù). .#include #include int max(int x, int y)int max(int x,
7、 int y) int z; int z; z=(xy) ? x : y; z=(xy) ? x : y; return(z); return(z); void main()void main() int a,b,c; int a,b,c; scanf(“%d%d”,&a, &b); scanf(“%d%d”,&a, &b); c = max(a, b); c = max(a, b); printf(“max is %dn”,c); printf(“max is %dn”,c); 主函數(shù)主函數(shù)子函數(shù)子函數(shù) . . c = max(a,b);c = max(a,b
8、); . .int max (intx, int y) int max (intx, int y) . . . . . .return (z); return (z); a,bz各函數(shù)之間數(shù)據(jù)往來通過各函數(shù)之間數(shù)據(jù)往來通過參數(shù)傳遞參數(shù)傳遞和和返回語句返回語句實現(xiàn)實現(xiàn) C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt7函數(shù)參數(shù)函數(shù)參數(shù): :用于函數(shù)間數(shù)據(jù)的傳遞用于函數(shù)間數(shù)據(jù)的傳遞形式參數(shù)形式參數(shù): :定義函數(shù)定義函數(shù)時給出的參數(shù)時給出的參數(shù)實際參數(shù)實際參數(shù): :調用函數(shù)調用函數(shù)時給出的參數(shù)時給出的參數(shù)#include #include int max(int max
9、(intint x, intx, int y y) ) int z; int z; z=(xy) ? x : y; z=(xy) ? x : y; return(z); return(z); void main()void main() int a,b,c; int a,b,c; scanf(“%d%d”,&a, &b); scanf(“%d%d”,&a, &b); c=max( c=max( a a , , b b ); ); printf(“max is %dn”,c); printf(“max is %dn”,c); 對于函數(shù)對于函數(shù)max有兩個形式參數(shù)有
10、兩個形式參數(shù)x,y形式參數(shù)形式參數(shù)x和和y只在只在max函數(shù)中使用函數(shù)中使用a,b是主函數(shù)中定義的變量是主函數(shù)中定義的變量, 當當main函數(shù)調用函數(shù)調用max函數(shù)時函數(shù)時. a,b成為成為max的實際參數(shù)的實際參數(shù)調用時調用時, 實際參數(shù)的值賦給形參進行處理實際參數(shù)的值賦給形參進行處理例例:max接受到兩個值接受到兩個值:8923 max返回返回89一、形式參數(shù)和實際參數(shù)一、形式參數(shù)和實際參數(shù) C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt8#include #include int max(int max(intint x, intx, int y y) )
11、 int z; int z; z=(xy) ? x : y; z=(xy) ? x : y; return(z); return(z); void main()void main() int a,b,c; int a,b,c; scanf(“%d%d”,&a, &b); scanf(“%d%d”,&a, &b); c=max( c=max( a a , , b b ); ); printf(“max is %dn”,c); printf(“max is %dn”,c); 說明說明:1.定義函數(shù)時定義函數(shù)時,必須說明形參的類型必須說明形參的類型,形參只能形參只能
12、是是變量變量(包括數(shù)組包括數(shù)組). 不能是常量或表達式不能是常量或表達式2.函數(shù)被調用之前函數(shù)被調用之前,形參和子函數(shù)中的變量形參和子函數(shù)中的變量不占內存不占內存,調用結束返回調用結束返回,形參所占的內存被收回形參所占的內存被收回.3.實參可以是實參可以是常量、變量或表達式常量、變量或表達式. 因為傳遞過來的是具體數(shù)值因為傳遞過來的是具體數(shù)值.4.實參和形參類型必須一致實參和形參類型必須一致(或可以安全轉換或可以安全轉換).5.C語言中語言中,實參和形參傳遞的是實參和形參傳遞的是”按值傳遞按值傳遞”,即單向傳遞即單向傳遞, 只與參數(shù)相對位置有關只與參數(shù)相對位置有關,而與而與變量名無關變量名無關
13、int b, int aint c;int c;c=( ab ) ? a :b;c=( ab ) ? a :b;return(c);return(c);1320main-amain-bmax-amax-b1320 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt9#include int sum(int a, int b) a=a+b; b=a+b; return(a);void main() int a=1,b=3,c; c=sum(a,b); printf(“sum of %d,%d is %dn”,a,b,c);閱讀下面程序,寫出運行結果閱讀下面程序,寫出運
14、行結果函數(shù)被調用之前函數(shù)被調用之前,形參和子函數(shù)中的變量形參和子函數(shù)中的變量不占內存不占內存,調用結束返回調用結束返回,形參所占的內存被收回形參所占的內存被收回.實參和形參傳遞的是實參和形參傳遞的是”值傳遞值傳遞”,即單向傳遞即單向傳遞, 只與參數(shù)相對位置有關只與參數(shù)相對位置有關,而與而與變量名無關變量名無關sum of 1,3 is 4sum of 1,3 is 4 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt10二、函數(shù)返回值二、函數(shù)返回值#include #include int max(int max(intint x, intx, int y y)
15、) int z; int z; z=(xy) ? x : y; z=(xy) ? x : y; return(z); return(z); void main()void main() int a,b,c; int a,b,c; scanf(“%d%d”,&a, &b); scanf(“%d%d”,&a, &b); c=max( c=max( a a , , b b ); ); printf(“max is %dn”,c); printf(“max is %dn”,c); 函數(shù)值也就是函數(shù)的返回值函數(shù)值也就是函數(shù)的返回值,是一個是一個具體確定的值具體確定的值.函
16、數(shù)使用函數(shù)使用returnreturn語句返回值。語句返回值。一個函數(shù)內可以有多個一個函數(shù)內可以有多個returnreturn語句,語句,執(zhí)行到任何執(zhí)行到任何returnreturn語句,函數(shù)都將立即語句,函數(shù)都將立即返回到調用函數(shù)返回到調用函數(shù)if(xy)if(xy) return(x); return(x);elseelse return(y); return(y);returnreturn后面的后面的()()可以省略可以省略, ,可以返回可以返回一個表達式一個表達式, ,先求解表達式的值先求解表達式的值, ,再返回再返回. .int max(int x, int y)int max(in
17、t x, int y) return xy?x:y; return xy?x:y; 1.1.返回函數(shù)值的方法返回函數(shù)值的方法 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt11#include #include int max(int max(intint x, intx, int y y) ) int z; int z; z=(xy) ? x : y; z=(xy) ? x : y; return(z); return(z); void main()void main() int a,b,c; int a,b,c; scanf(“%d%d”,&a, &
18、amp;b); scanf(“%d%d”,&a, &b); c=max( c=max( a a , , b b ); ); printf(“max is %dn”,c); printf(“max is %dn”,c); 2.函數(shù)值的類型函數(shù)值的類型 函數(shù)的類型即函數(shù)值的類型函數(shù)的類型即函數(shù)值的類型. .例如例如, ,函數(shù)函數(shù) maxmax是是intint型型, ,函數(shù)的返回值也是函數(shù)的返回值也是intint型型. .省略了類型說明的函數(shù)就是省略了類型說明的函數(shù)就是intint型型. .returnreturn中表達式的值一般和函數(shù)中表達式的值一般和函數(shù)類型相同類型相同. .如果
19、不一致如果不一致, ,則需要進行類型轉換則需要進行類型轉換. .以以 函數(shù)類型為準函數(shù)類型為準. . C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt123.不需要返回的函數(shù)不需要返回的函數(shù)如果函數(shù)中沒有如果函數(shù)中沒有return, return, 認為是認為是 一個過程一個過程, ,可以使用類型可以使用類型void.void.如果一個函數(shù)被聲明如果一個函數(shù)被聲明voidvoid類型類型, ,就不允許就不允許 再引用它的返回值。只能單純調用它。再引用它的返回值。只能單純調用它。#include void printStar() printf(“*n”);void
20、printMessage() printf(“Hello, world.n”); printStar();void main() printStar(); printMessage(); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt13函數(shù)的調用一、函數(shù)調用一般形式一、函數(shù)調用一般形式一般形式一般形式: 函數(shù)名函數(shù)名(實參列表實參列表)說明說明: :如果調用無參函數(shù)如果調用無參函數(shù), ,實參表列可以忽略實參表列可以忽略, , 但括號不能省但括號不能省. .實參個數(shù)和形參個數(shù)相同實參個數(shù)和形參個數(shù)相同. .實參和形參類型一一對應實參和形參類型一一對應, ,必要時
21、會進必要時會進行類型轉換行類型轉換. .注意注意: :不同系統(tǒng)中不同系統(tǒng)中, ,實參的計算順序不同實參的計算順序不同. . 一般認為從右到左計算和賦值一般認為從右到左計算和賦值. . 一般在調用函數(shù)前計算出實參的值一般在調用函數(shù)前計算出實參的值例1 讀程序,寫出結果#include int f(int a, int b) int c; if(a b) c = 1; else if(a = b) c = 0; else c = -1; return c;void main() int i = 2, p; p = f(i, +i); printf(“%d”, p); C語言程序設計 第第 6 章章
22、 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt14二、函數(shù)調用方式二、函數(shù)調用方式1、函數(shù)語句、函數(shù)語句 形式為形式為: :函數(shù)函數(shù)( (實參表列實參表列););例如例如: :printMessage();printMessage();printf(“%d”,p);printf(“%d”,p);說明說明: :這種方式不要求函數(shù)帶返回值這種方式不要求函數(shù)帶返回值, ,函數(shù)只執(zhí)行一定操作函數(shù)只執(zhí)行一定操作. .2 2、函數(shù)表達式、函數(shù)表達式 函數(shù)的返回值參與運算函數(shù)的返回值參與運算例如例如: :m = max(a,b);m = max(a,b);m = 3 m = 3 * * max(a,b);
23、 max(a,b);printf(“%d”,max(a,b);printf(“%d”,max(a,b);說明說明: :這種方式的函數(shù)不能用于這種方式的函數(shù)不能用于voidvoid類型類型 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt15三、函數(shù)調用的執(zhí)行過程三、函數(shù)調用的執(zhí)行過程從右到左的順序從右到左的順序, ,計算實參中各計算實參中各表達式值表達式值. .按照位置按照位置, ,將實參的值一一將實參的值一一傳遞給形參傳遞給形參. .執(zhí)行被調用函數(shù)執(zhí)行被調用函數(shù). .當遇到當遇到return(return(表達式表達式) )語句時語句時, ,計算表達式的值并返回
24、主調函數(shù)計算表達式的值并返回主調函數(shù). .例2 讀程序,寫出結果#include int iabs(float x) return (x 0 ? x : -x);void main() float x = -0.6, y; y = iabs(2 * x); printf(“x=%f,iabs(x)=%fn”, x, y);1234X= -0.600000,iabs(x)=1.000000 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt16四、函數(shù)的原形四、函數(shù)的原形在程序中調用函數(shù)需滿足以下條件在程序中調用函數(shù)需滿足以下條件: :被調用函數(shù)必須存在被調用函數(shù)必須
25、存在, ,且必須遵循且必須遵循“先定義后使用先定義后使用”的原則的原則如果被調用函數(shù)的定義在主調函如果被調用函數(shù)的定義在主調函數(shù)之后數(shù)之后, ,可以在調用之前給出可以在調用之前給出原形原形說明說明. .原形說明原形說明: :類型說明類型說明 函數(shù)名函數(shù)名( (參數(shù)類型參數(shù)類型, ,參數(shù)類型參數(shù)類型) C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt17函數(shù)的嵌套調用嵌套調用是指在一個函數(shù)的函數(shù)體嵌套調用是指在一個函數(shù)的函數(shù)體中又調用了其他函數(shù)中又調用了其他函數(shù). .程序執(zhí)行過程程序執(zhí)行過程: :第一層第一層 第二層第二層 第三層第三層 main() printSt
26、ar() printStar(); printfMessage() printMessage(); printStar(); printStar(); 結束#include void printStar() printf(“*n”);void printMessage() printf(“Hello, world.n”); printStar();void main() printStar(); printMessage(); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt18例例3 3 編程求編程求)!( !mnmnCmn分析分析: : 重復三次不同的階乘運算
27、重復三次不同的階乘運算, ,只是每次的值不同只是每次的值不同. .將求階乘的過程編程一個函數(shù)將求階乘的過程編程一個函數(shù)fac,fac,以不同的參數(shù)值來調用以不同的參數(shù)值來調用facfacfackk!#include #include float fac(int k); float t=1.0; int i; for(i=2;i1n1時時11nnxxx當當n=0n=0時時當當n!=1n!=1時時 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt20 函數(shù)的遞歸調用是指在調用一個函數(shù)時又直接或間接調函數(shù)的遞歸調用是指在調用一個函數(shù)時又直接或間接調用函數(shù)本身用函數(shù)本身.
28、 . 直接調用直接調用 間接調用間接調用 遞歸調用必須引入一個遞歸調用必須引入一個循環(huán)條件控制遞歸結束循環(huán)條件控制遞歸結束, ,否則進入死循環(huán)否則進入死循環(huán). . C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt21例例4 4 有有5 5個人坐在一起個人坐在一起, ,問第問第5 5個人多少歲個人多少歲? ?答答: :比第比第4 4個人大個人大2 2歲歲; ;第第4 4個人說他比第三個人大個人說他比第三個人大2 2歲歲; ;第第3 3個人比第個人比第2 2個人大個人大2 2歲歲, ,第第2 2個人比第個人比第1 1個人大個人大2 2歲歲. .而第而第1 1個人有個人
29、有1010歲歲. .問第問第5 5個人多少歲個人多少歲? ? 計算公式計算公式: :2)1(10)(nagenage(n=1)(n1)回推階段遞推階段 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt22 函數(shù)調用過程函數(shù)調用過程#include int age ( int n) int c; if (n=1) c=10; else c=age(n-1) + 2; return c;void main() printf(“ %d “, age(5); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt23例例5 5 用遞歸調用求用遞歸調
30、用求n!n!階乘階乘(n=0)(n=0)使用循環(huán)做使用循環(huán)做: :float fac( int n)float fac( int n) float f=1; float f=1; if (n=0) if (n=0) for(i=2; i=n; i+) for(i=2; i=n; i+) f f * *= i;= i; else f else f=-=-1;1; return f; return f; #include float fac (int n) float f; if (n1) f=fac(n-1) * n; else if (n=0|n=1) f=1; else f=-1; retu
31、rn f;void main() int n; float y; printf(“input a integer number:”); scanf(“%d”, &n); y = fac (n); if (y1) C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt24根據(jù)變量的作用域作用域不同,可分為局部變量局部變量和全局變量全局變量兩種。1變量的作用域變量的作用域變量的作用域:變量的作用域:變量起作用的范圍。局部變量:局部變量:在函數(shù)內部或某個控制塊的內部定義的變量。局部變量的作用域:函數(shù)內部。作用:增強了函數(shù)模塊的獨立性。全局變量:全局變量:在函數(shù)外面定義
32、的變量稱為全局變量。全局變量的作用域:從該變量定義的位置開始,直到源文件結束。作用:在同一文件中,所有函數(shù)都可以引用全局變量。增強了各函數(shù)間數(shù)據(jù)的聯(lián)系。 6.2 變量的作用域 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt25局部變量和全局變量的作用域如圖所示: int i; main() float a, b; char s; function(); int k; void fuction(); int m; 局部變量 s 的作用域 局部變量 a, b 的作用域 全局變量 i 的作用域 全局變量 k 的作用域 局部變量 的作用域 C語言程序設計 第第 6 章章
33、 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt26閱讀程序【例6-4】的程序, 了解變量作用域。請注意區(qū)分局部變量局部變量和全局變量全局變量的作用域。程序:程序: example6_4.c C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt27變量的存儲類別一、變量的動態(tài)存儲和靜態(tài)存儲一、變量的動態(tài)存儲和靜態(tài)存儲全局變量和局部變量全局變量和局部變量 變量的作用域變量的作用域靜態(tài)存儲和動態(tài)存儲靜態(tài)存儲和動態(tài)存儲 變量的存儲類別變量的存儲類別: :生存期生存期內存中供用戶使用的空間有內存中供用戶使用的空間有: : 代碼區(qū)代碼區(qū) 靜態(tài)存儲區(qū)靜態(tài)存儲區(qū): :編譯時分配空間
34、編譯時分配空間 動態(tài)存儲區(qū)動態(tài)存儲區(qū): :執(zhí)行時分配空間執(zhí)行時分配空間變量或函數(shù)的屬性變量或函數(shù)的屬性: :數(shù)據(jù)類型存儲類型自動型auto靜態(tài)型static寄存器register外部型extern C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt28二、局部變量的存儲類別二、局部變量的存儲類別1 1、自動類別、自動類別 存儲在動態(tài)存儲區(qū)存儲在動態(tài)存儲區(qū), ,用用autoauto說明說明如如: : int func1( int a) int func1( int a) autoauto int b, c=3; int b, c=3; 形參形參a, a, 變量變量b,
35、cb,c都是自動變量都是自動變量, ,調用函數(shù)時調用函數(shù)時, ,系統(tǒng)給它們分配存系統(tǒng)給它們分配存儲空間儲空間, ,函數(shù)調用結束時函數(shù)調用結束時, ,自動自動釋放空間釋放空間. .通常通常autoauto可以省略可以省略 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt292 2、局部靜態(tài)變量、局部靜態(tài)變量 占用靜態(tài)存儲占用靜態(tài)存儲, ,用用staticstatic說明說明說明說明: :局部靜態(tài)變量局部靜態(tài)變量, ,屬于靜態(tài)存儲類別屬于靜態(tài)存儲類別, , 在程序執(zhí)行的整個過程中在程序執(zhí)行的整個過程中, ,都不釋放都不釋放 存儲空間存儲空間. .局部靜態(tài)變量在編譯時賦
36、值局部靜態(tài)變量在編譯時賦值, , 僅賦值一次僅賦值一次. .如果定義局部靜態(tài)變量沒有賦初值如果定義局部靜態(tài)變量沒有賦初值, , 系統(tǒng)會自動賦初值系統(tǒng)會自動賦初值. .局部靜態(tài)變量局部靜態(tài)變量, ,只有在定義它的函數(shù)只有在定義它的函數(shù) 內被引用內被引用( (它存在它存在, ,但不被其他函數(shù)引用但不被其他函數(shù)引用) )如果如果f f不定義成不定義成staticstatic是什么結果是什么結果? ?f=1;j=1; fac(1): f=f*n=1*1=1; 輸出1!=1;j=2; fac(2): f=f*n=1*2=2; 輸出2!=2;j=3; fac(3): f=f*n=2*3=6; 輸出3!=6
37、;j=4; fac(4): f=f*n=6*4=24; 輸出4!=24; C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt303 3、寄存器變量、寄存器變量 存儲在寄存器中存儲在寄存器中, ,用用registerregister說明說明說明說明: :計算機的寄存器個數(shù)有限計算機的寄存器個數(shù)有限. .寄存器變量對寄存器占有是動態(tài)的寄存器變量對寄存器占有是動態(tài)的有的系統(tǒng)對寄存器變量轉化為有的系統(tǒng)對寄存器變量轉化為 自動變量處理自動變量處理, ,而有的系統(tǒng)會而有的系統(tǒng)會 自動設置寄存器變量自動設置寄存器變量. . C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化
38、程序設計函數(shù)整理ppt31三、全局變量的存儲類別三、全局變量的存儲類別全局變量都存放在靜態(tài)的存儲區(qū)。全局變量都存放在靜態(tài)的存儲區(qū)。用用staticstatic關鍵字聲明的全局變量,只能在本文件內使用。關鍵字聲明的全局變量,只能在本文件內使用。沒有用沒有用staticstatic關鍵字的全局變量可以在別的文件中使用關鍵字的全局變量可以在別的文件中使用externextern關鍵字聲明為關鍵字聲明為外部變量外部變量,并在該文件中作為全局變,并在該文件中作為全局變量使用。量使用。盡量少使用全局變量盡量少使用全局變量/* a.c */int max;void calcMax(int a, int n)
39、 ./* main.c */extern int max;void main() . printf(“%d”,max); ./* a.c */static int max;void calcMax(int a, int n) ./* main.c */extern int max;void main() . printf(“%d”,max); .錯!max未定義錯!不能引用max C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt32四、存儲類別小結四、存儲類別小結1 1、變量的定義方法、變量的定義方法 存儲類別存儲類別 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名2 2、變量的
40、劃分、變量的劃分按作用域劃分按作用域劃分: :按生存期按生存期局部變量局部變量全局變量全局變量自動變量自動變量靜態(tài)變量靜態(tài)變量寄存器變量寄存器變量形式參數(shù)變量形式參數(shù)變量動態(tài)存儲動態(tài)存儲靜態(tài)存儲靜態(tài)存儲自動變量自動變量形式參數(shù)形式參數(shù)寄存器變量寄存器變量靜態(tài)局部變量靜態(tài)局部變量全局變量全局變量按變量的存放位置按變量的存放位置動態(tài)存儲區(qū)動態(tài)存儲區(qū)靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)自動變量自動變量形式參數(shù)形式參數(shù)靜態(tài)局部變量靜態(tài)局部變量全局變量全局變量寄存器寄存器寄存器變量寄存器變量 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt33自定義的函數(shù)有兩種:內部函數(shù)內部函數(shù)和外部函數(shù)
41、外部函數(shù)。1內部函數(shù)內部函數(shù) 若函數(shù)的存儲類型為static型,則稱其為內部函數(shù)內部函數(shù)(內部函數(shù)又稱為靜態(tài)函數(shù)),它表示在由多個源文件組成的同一個程序中,該函數(shù)只能在其所在的文件中使用,在其他文件中不可使用。內部函數(shù)的聲明形式: static ();例如:例如: static int Statistic ();2外部函數(shù)外部函數(shù) 若函數(shù)的存儲類型定義為extern型,則稱其為外部函數(shù)外部函數(shù),它表示該函數(shù)能被其他源文件調用。函數(shù)的默認存儲類型為extern型。 6.3 內部函數(shù)與外部函數(shù) C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt34 外部函數(shù)的應用示例。
42、下面的程序由3個文件組成:、example6_6.c。 在、中分別定義了兩個外部函數(shù); 在example6_6.c中可以分別調用這兩個函數(shù)。1/* 外部函數(shù)定義 */extern int add(int m, int n) return (m+n);2/* 外部函數(shù)定義 */extern int mod(int a, int b) return(a%b); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt353example6_6.c#include extern int mod(int a, int b);/*外部函數(shù)聲明*/extern int add(int
43、 m, int n);/*外部函數(shù)聲明*/main() int x, y, result1,result2,result; printf(Please enter x and y:n); scanf (%d%d, &x, &y); result1=add(x,y);/*調用file1中的外部函數(shù)*/ printf(x+y=%dn,result1); if (result10) result2=mod(x,y);/*調用file2中的外部函數(shù)*/ result=result1-result2; printf(mod(x,y)=%dn,result2); printf(x+y)-m
44、od(x,y)=%dn, result); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt36關于程序的幾點說明關于程序的幾點說明(1)在程序、中的函數(shù)定義可以不需要extern加以說明,默認為外部函數(shù)。(2)在example6_6.c中對外部函數(shù)的聲明也可以不用extern加以說明,默認為外部函數(shù)。(3)由多個源文件組成一個程序時,main()函數(shù)只能出現(xiàn)在一個源文件中。(4)由多個源文件組成一個程序時,有3種連接方式: 將各源文件分別編譯成目標文件,得到多個目標文件(.obj后綴),然后用連接命令把多個.obj文件連接起來。 C語言程序設計 第第 6 章章
45、模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt37建立項目文件(.prj后綴或.dsw后綴),具體操作可參閱各種C語言集成開發(fā)環(huán)境說明。使用文件包含命令。請參閱本章6.6節(jié)。(5)如果將或中的extern改成static,則主程序在編譯時無法通過。(6)在程序或中,也可以互相調用其外部函數(shù)。Turbo c的連接接命令為的連接接命令為tlink 例如:例如:tlink example6_6.obj+ 結果結果:生成一個example6_6.exe文件。 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt38 6.4 編譯預處理 作用:作用: 在對源程序編譯之前做一些處
46、理在對源程序編譯之前做一些處理, ,生成擴展生成擴展C C源程序源程序 種類種類 宏定義宏定義 #define 文件包含文件包含 #include 條件編譯條件編譯 #if-#else-#endif等等 格式:格式: “#”#”開頭開頭 占單獨書寫行占單獨書寫行 語句尾不加分號語句尾不加分號 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt39如 #define YES 1 #define NO 0 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”);展開后: if(x=1) printf
47、(“correct!n”); else if (x=0) printf(“error!n”); 1 宏定義宏定義不帶參數(shù)宏定義不帶參數(shù)宏定義 一般形式一般形式 #define #define 宏名宏名( (標識符標識符) ) 宏體宏體 (字符串)(字符串) 功能功能: :用指定標識符用指定標識符( (宏名宏名) )代替字符序列代替字符序列( (宏體宏體) ) 宏展開:預編譯時宏展開:預編譯時, ,用宏體來替換宏名用宏體來替換宏名-不作語法檢查不作語法檢查如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“H
48、ello,World”);說明說明: :1.1.定義位置定義位置: :任意任意( (一般在函數(shù)外面一般在函數(shù)外面) )2.2.作用域作用域: :從定義命令到文件結束從定義命令到文件結束3.3.#undef#undef可終止宏名作用域可終止宏名作用域 格式:格式: #undef #undef 宏名宏名例 #define YES 1 main() . #undef YES #define YES 0 max() . YES原作用域YES新作用域5.5.宏定義可嵌套,不能遞歸宏定義可嵌套,不能遞歸例 #define MAX MAX+10 ()4.4.引號中的內容與宏名相同也不置換引號中的內容與宏名相
49、同也不置換例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2);宏展開:printf(“2*PI=%fn”,3.14159*2);6.6.宏定義中使用必要的括號宏定義中使用必要的括號()例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展開:var= 80+40 *2;( )( )例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展開: var=WIDTH+40*2 var=80+40*27.7.只是簡單替代,標識符不占內存空間只是
50、簡單替代,標識符不占內存空間8.8.一般宏名使用大寫字母形式一般宏名使用大寫字母形式. . C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt40帶參數(shù)宏定義帶參數(shù)宏定義 一般形式:一般形式: #define #define 宏名宏名( (參數(shù)表參數(shù)表) ) 宏體宏體例 #define S (r) PI*r*r相當于定義了不帶參宏S,代表字符串“(r) PI*r*r” 說明:說明: 1.1.宏展開:不僅宏體替換宏展開:不僅宏體替換, ,還要進行還要進行形參替換形參替換 2 2. .宏體及各形參外一般應加括號宏體及各形參外一般應加括號()() 3.3.宏名與參數(shù)之間不
51、能有空格宏名與參數(shù)之間不能有空格例 #define S(a,b) a*b . area=S(3,2);宏展開: area=3*2;不能加空格例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y);宏展開:z=x+y*x+y;一般寫成: #define POWER(x) (x)*(x)宏展開: z=(x+y)*(x+y); C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt41#define MAX(x,y) (x)(y)?(x):(y) .main() int a,b,c,d,t; . t=MAX(a+b,c+d); 宏展開:t=
52、(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); 4. 用宏定義可以實現(xiàn)和函數(shù)同樣的功能用宏定義可以實現(xiàn)和函數(shù)同樣的功能 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt425.帶參的宏與函數(shù)區(qū)別帶參的宏與函數(shù)區(qū)別帶參宏函數(shù)處理過程不分配內存簡單的字符置換分配內存先求實參值,再代入形參處理時間編譯前程序運行時參數(shù)類型無類型問題定義實參,形參類型程序長度變長不變運行速度不占運行時間調用和返回占時間 C語言程序設計 第第
53、6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt43 2 文件包含功能:一個源文件可將另一個源文件的內容全部包含進功能:一個源文件可將另一個源文件的內容全部包含進來來一般形式:一般形式: #include “#include “文件名文件名” 或或 #include #include #include “”BABA處理過程:預編譯時處理過程:預編譯時, ,用被包含文件的內容取代該預處理用被包含文件的內容取代該預處理命令,再對命令,再對“包含包含”后的文件作一個源文件編譯后的文件作一個源文件編譯 直接按標準目錄搜索(存放C的庫函數(shù)頭文件)“” 先在當前目錄搜索,再搜索標準目錄 可指定路徑 C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt44被包含文件內容 源文件(*.c) 頭文件(*.h)宏定義數(shù)據(jù)結構定義函數(shù)說明等文件包含可嵌套#include “”AC#include “” BA C語言程序設計 第第 6 章章 模塊化程序設計函數(shù)模塊化程序設計函數(shù)整理ppt45例 文件包含舉例/* powers.h */#define sqr(x) (x)*(x)#define cube(x) (x)*(x)*(x)#define quad(x) (x)*(x)*(x)*(x)#include
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智慧社區(qū)車位共享管理服務合同范本3篇
- 2024跨境教育服務合作合同
- 2025年度住宅小區(qū)車位租賃押金退還及違約責任合同4篇
- 2025年度校園窗簾設計與施工一體化服務合同3篇
- 2025年度物流金融承運商合作協(xié)議范本8篇
- 2025年度特種物品儲藏安全管理合同4篇
- 2025年度工業(yè)遺產保護與拆遷補償協(xié)議3篇
- 2025年度智慧農業(yè)監(jiān)測系統(tǒng)采購合同4篇
- 2024版門面精裝修產權轉讓協(xié)議
- 2025年員工辭退后債權債務處理協(xié)議3篇
- 2024版?zhèn)€人私有房屋購買合同
- 2025年山東光明電力服務公司招聘筆試參考題庫含答案解析
- 2024爆炸物運輸安全保障協(xié)議版B版
- 《神經發(fā)展障礙 兒童社交溝通障礙康復規(guī)范》
- 2025年中建六局二級子企業(yè)總經理崗位公開招聘高頻重點提升(共500題)附帶答案詳解
- 2024年5月江蘇省事業(yè)單位招聘考試【綜合知識與能力素質】真題及答案解析(管理類和其他類)
- 注漿工安全技術措施
- 《食品與食品》課件
- 2024年世界職業(yè)院校技能大賽“食品安全與質量檢測組”參考試題庫(含答案)
- 讀書分享會《白夜行》
- 2023上海高考英語詞匯手冊單詞背誦默寫表格(復習必背)
評論
0/150
提交評論