版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、LOGO程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)LOGO第六章第六章 函數(shù)與模塊化程序設(shè)計(jì)函數(shù)與模塊化程序設(shè)計(jì) 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1 變量的作用域與存儲類型變量的作用域與存儲類型6.2 利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)6.3LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用v函數(shù)是構(gòu)成函數(shù)是構(gòu)成C程序的基本構(gòu)件。程序的基本構(gòu)件。C程序是程序是一系列函數(shù)的集合,每個(gè)函數(shù)都具有相對一系列函數(shù)的集合,每個(gè)函數(shù)都具有相對獨(dú)立的單一功能。獨(dú)立的單一功能。v一個(gè)完整的一個(gè)完整的C程序由程序由主函數(shù)主函數(shù)被調(diào)函數(shù)被調(diào)函數(shù)來來構(gòu)成構(gòu)成。LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 一個(gè)
2、一個(gè)C C程序可以分為若干個(gè)函數(shù)。程序可以分為若干個(gè)函數(shù)。 每個(gè)程序有且只能有一個(gè)主函數(shù)(每個(gè)程序有且只能有一個(gè)主函數(shù)(mainmain),其他),其他函數(shù)都是函數(shù)都是“字函數(shù)字函數(shù)”。 子函數(shù)可以互相調(diào)用,但主函數(shù)不能被調(diào)用。子函數(shù)可以互相調(diào)用,但主函數(shù)不能被調(diào)用。 一個(gè)一個(gè)C C源程序由一個(gè)或多個(gè)文件構(gòu)成,一個(gè)源程源程序由一個(gè)或多個(gè)文件構(gòu)成,一個(gè)源程序是一個(gè)編譯單位。序是一個(gè)編譯單位。 C C語言中允許一個(gè)函數(shù)被多次調(diào)用,也允許函數(shù)語言中允許一個(gè)函數(shù)被多次調(diào)用,也允許函數(shù)調(diào)用自己本身調(diào)用自己本身( (遞歸調(diào)用遞歸調(diào)用) )LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.1 函數(shù)分類
3、函數(shù)分類 從用戶角度 標(biāo)準(zhǔn)函數(shù)(庫函數(shù)):由系統(tǒng)提供 用戶自定義函數(shù) 從函數(shù)形式 無參函數(shù) 有參函數(shù)使用庫函數(shù)應(yīng)注意:1、函數(shù)功能2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3、函數(shù)返回值意義和類型4、需要使用的包含文件LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 6.1.2 函數(shù)的定義函數(shù)的定義 一般格式一般格式合法標(biāo)識符合法標(biāo)識符函數(shù)返回值類型函數(shù)返回值類型缺省缺省int型型無返回值無返回值void函數(shù)體函數(shù)體函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(形參類型說明表形參類型說明表)說明部分說明部分語句部分語句部分現(xiàn)代風(fēng)格現(xiàn)代風(fēng)格: :例例 有參函數(shù)(現(xiàn)代風(fēng)格)有參函數(shù)(現(xiàn)代風(fēng)格) int max
4、(int x,int y) int z; z=xy?x:y; return(z); 例例 有參函數(shù)(現(xiàn)代風(fēng)格)有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x, y) int z; z=xy?x:y; return(z); 例例 空函數(shù)空函數(shù) dummy( ) 函數(shù)體為空函數(shù)體為空例例 無參函數(shù)無參函數(shù) printstar( ) printf(“*n”); 或或 printstar(void ) printf(“*n”); LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.3 函數(shù)傳統(tǒng)風(fēng)格和例子函數(shù)傳統(tǒng)風(fēng)格和例子函數(shù)類型函數(shù)類型 函數(shù)名(形參表)函數(shù)名(形參表)形參類型說明形參類型說明說
5、明部分說明部分語句部分語句部分傳統(tǒng)風(fēng)格傳統(tǒng)風(fēng)格: :例例 有參函數(shù)(傳統(tǒng)風(fēng)格)有參函數(shù)(傳統(tǒng)風(fēng)格) int max(x,y) int x,y; int z; z=xy?x:y; return(z); LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 6.1.4 函數(shù)的返回值函數(shù)的返回值 返回語句返回語句 形式:形式: return(表達(dá)式表達(dá)式); 或或 return 表達(dá)式表達(dá)式; 或或 return; 功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時(shí)把返值帶給調(diào)用函數(shù)同時(shí)把返值帶給調(diào)用函數(shù) 說明:說明: 函數(shù)中可有多個(gè)函數(shù)中可有多個(gè)retur
6、n語句語句 若無若無return語句,遇語句,遇時(shí),自動返回調(diào)用函數(shù)時(shí),自動返回調(diào)用函數(shù) 若函數(shù)類型與若函數(shù)類型與return語句中表達(dá)式值的類型不一致,按語句中表達(dá)式值的類型不一致,按前者為準(zhǔn),自動轉(zhuǎn)換前者為準(zhǔn),自動轉(zhuǎn)換-函數(shù)調(diào)用轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換 void型函數(shù)型函數(shù)例例 無返回值函數(shù)無返回值函數(shù) void swap(int x,int y ) int temp; temp=x; x=y; y=temp; LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 6.1.5 函數(shù)的調(diào)用函數(shù)的調(diào)用 調(diào)用形式調(diào)用形式 函數(shù)名函數(shù)名(實(shí)參表實(shí)參表); 說明:說明: 實(shí)參與形參個(gè)數(shù)相等,類型一致,按順序一一
7、對應(yīng)實(shí)參與形參個(gè)數(shù)相等,類型一致,按順序一一對應(yīng) 實(shí)參表求值順序,因系統(tǒng)而定(實(shí)參表求值順序,因系統(tǒng)而定(Turbo C 自右向左)自右向左) 調(diào)用方式調(diào)用方式(1)直接以函數(shù)引用語句的形式出現(xiàn)直接以函數(shù)引用語句的形式出現(xiàn)例如:例如: call_function(x,y, z); scanf(%d%d%d“,&i,&j,&k)LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 (2) 函數(shù)在表達(dá)式中出現(xiàn)函數(shù)在表達(dá)式中出現(xiàn)例如:例如: y = 8.25*min(x,y)*function(n); (3) 在函數(shù)引用中以實(shí)參的形式出現(xiàn)在函數(shù)引用中以實(shí)參的形式出現(xiàn)例如:例如:y=cos(tg(x);/
8、也稱嵌套調(diào)用也稱嵌套調(diào)用 main( ) a( ) b( )調(diào)用調(diào)用a( ) 調(diào)用調(diào)用b( ) ENDLOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 在一個(gè)函數(shù)中調(diào)用另一函數(shù)(即被在一個(gè)函數(shù)中調(diào)用另一函數(shù)(即被調(diào)用函數(shù))需要具備哪些條件呢?調(diào)用函數(shù))需要具備哪些條件呢?被調(diào)用的函數(shù)必須是已經(jīng)存在的被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)函數(shù)(是庫函數(shù)或用戶自己定義函是庫函數(shù)或用戶自己定義函數(shù)數(shù)).(2) 如果使用庫函數(shù),一般應(yīng)在本文件如果使用庫函數(shù),一般應(yīng)在本文件開頭用開頭用include 預(yù)包含。預(yù)包含。(3) 如果使用用戶自己定義的函數(shù),而如果使用用戶自己定義的函數(shù),而且該函數(shù)與調(diào)用它的函數(shù)(即
9、主調(diào)函且該函數(shù)與調(diào)用它的函數(shù)(即主調(diào)函數(shù))在同一個(gè)文件中,一般還應(yīng)該在數(shù))在同一個(gè)文件中,一般還應(yīng)該在主調(diào)函數(shù)中對被調(diào)用的函數(shù)作聲明。主調(diào)函數(shù)中對被調(diào)用的函數(shù)作聲明。例例 對被調(diào)用的函數(shù)作聲明對被調(diào)用的函數(shù)作聲明main( ) float add (float x, float y); float a,b,c; scanf(f,f,a,b);); cadd(a,b);); printf (“sum isf”, c);float add(float x,float y) float ; xy; return();();LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用LOGO6.1 函數(shù)的定義和調(diào)
10、用函數(shù)的定義和調(diào)用(1)(1)轉(zhuǎn)展相除法求最大公約數(shù)的函數(shù)轉(zhuǎn)展相除法求最大公約數(shù)的函數(shù)#include stdio.hgcd(int m, int n) int temp,k; while(n!=0) temp=m%n; m=n; n=temp; k=m; return(k); (2) (2) 調(diào)用調(diào)用gcdgcd函數(shù)的主函數(shù)函數(shù)的主函數(shù)main() int m,n,j,temp; scanf(%d%d,&m,&n); if(mn) temp=m; m=n; n=temp; j=gcd(m,n); printf(gcd is: %dn,j); LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用v
11、 C程序的執(zhí)行從main函數(shù)開始,調(diào)用其他函數(shù)后仍回到main函數(shù),程序在main函數(shù)結(jié)束時(shí)結(jié)束。v 所有的子函數(shù)都是平行的,任何子函數(shù)都不屬于其他函數(shù).v 從用戶的角度看,函數(shù)可以分為: 標(biāo)準(zhǔn)函數(shù)即庫函數(shù) 自定義函數(shù)v 從函數(shù)的形式看,可分為: 無參數(shù)函數(shù): 有參數(shù)函數(shù)LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)說明函數(shù)說明 對被調(diào)用函數(shù)要求:對被調(diào)用函數(shù)要求: 必須是已存在的函數(shù)必須是已存在的函數(shù) 庫函數(shù)庫函數(shù): #include 用戶自定義函數(shù)用戶自定義函數(shù): 函數(shù)類型說明函數(shù)類型說明 函數(shù)說明函數(shù)說明 一般形式:一般形式: 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(形參類型形參類型 形參
12、名形參名,. ); 或或 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(); 作用:告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個(gè)數(shù)及類型,以便檢驗(yàn)作用:告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個(gè)數(shù)及類型,以便檢驗(yàn) 函數(shù)定義與函數(shù)說明不同函數(shù)定義與函數(shù)說明不同 函數(shù)說明位置:程序的數(shù)據(jù)說明部分(函數(shù)內(nèi)或外)函數(shù)說明位置:程序的數(shù)據(jù)說明部分(函數(shù)內(nèi)或外) 下列情況下,可不作函數(shù)說明下列情況下,可不作函數(shù)說明 若函數(shù)返值是若函數(shù)返值是char或或int型,系統(tǒng)自動按型,系統(tǒng)自動按int型處理型處理 被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前 有些系統(tǒng)有些系統(tǒng)(如如Borland C+)要求函數(shù)說明指出函數(shù)返值類型和要求函
13、數(shù)說明指出函數(shù)返值類型和形參類型,并且對形參類型,并且對void 和和 int 型函數(shù)也要進(jìn)行函數(shù)說明型函數(shù)也要進(jìn)行函數(shù)說明LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.6 函數(shù)參數(shù)及其傳遞方式函數(shù)參數(shù)及其傳遞方式 形參與實(shí)參 形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號中的變量名 實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號中的表達(dá)式c=max(a,b);(main 函數(shù))(max 函數(shù))max(int x, int y) int z; z=xy?x:y; return(z); 例 比較兩個(gè)數(shù)并輸出大者main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b);
14、printf(Max is %d,c);max(int x, int y) int z; z=xy?x:y; return(z);形參實(shí)參LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 函數(shù)參數(shù)及其傳遞方式函數(shù)參數(shù)及其傳遞方式形參與實(shí)參形參與實(shí)參形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號中的變量名形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號中的變量名實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號中的表達(dá)式實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號中的表達(dá)式說明:說明:實(shí)參必須有確定的值實(shí)參必須有確定的值形參必須指定類型形參必須指定類型形參與實(shí)參形參與實(shí)參類型一致,個(gè)數(shù)相同類型一致,個(gè)數(shù)相同若形參與實(shí)參類型不一致,自動按形參類型轉(zhuǎn)
15、換若形參與實(shí)參類型不一致,自動按形參類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換形參在函數(shù)被調(diào)用前不占內(nèi)存形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時(shí)為形參分函數(shù)調(diào)用時(shí)為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用參數(shù)傳遞方式參數(shù)傳遞方式 值傳遞方式值傳遞方式 方式:函數(shù)調(diào)用時(shí)方式:函數(shù)調(diào)用時(shí),為形參分配單元為形參分配單元,并將實(shí)參的值復(fù)制到形參并將實(shí)參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原值值 特點(diǎn):特點(diǎn): 形參與實(shí)參占用不同的內(nèi)存單元形參與實(shí)參占用不同的內(nèi)存單元 單向
16、傳遞單向傳遞LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用例例 交換兩個(gè)數(shù)交換兩個(gè)數(shù)711x: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; a=b; b=temp;調(diào)用:711a:b:711x:y:swap:711x:y:117a:b:tempLOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)
17、的地址傳遞函數(shù)的地址傳遞 方式:函數(shù)調(diào)用時(shí),將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參方式:函數(shù)調(diào)用時(shí),將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參 特點(diǎn):特點(diǎn): 形參與實(shí)參占用同樣的存儲單元形參與實(shí)參占用同樣的存儲單元 “雙向雙向”傳遞傳遞 實(shí)參和形參必須是地址常量或變量實(shí)參和形參必須是地址常量或變量LOGO6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用/*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,&b); printf(“a=%d,b=%dn”,a,b); printf(“
18、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返回:例子圖解例子圖解LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型運(yùn)行棧運(yùn)行棧C程序程序運(yùn)行時(shí)運(yùn)行時(shí)所用存所用存儲空間儲空間程序區(qū)程序區(qū)靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)存放執(zhí)行程序存放執(zhí)行程序的代碼和靜態(tài)的代碼和靜態(tài)變量變量存放外存放外部變量部變量系統(tǒng)為運(yùn)行程系統(tǒng)為運(yùn)行程序分配的存儲序分配的存儲空間空間LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型變量的存儲屬性變量的存儲屬性
19、概述 變量是對程序中數(shù)據(jù)的存儲空間的抽象內(nèi)存.main() int a; a=10; printf(“%d”,a);編譯或函數(shù)調(diào)用時(shí)為其分配內(nèi)存單元1020002001程序中使用變量名對內(nèi)存操作LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型變量的存儲屬性變量的存儲屬性概述變量是對程序中數(shù)據(jù)的存儲空間的抽象變量的屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性操作屬性)存儲屬性存儲屬性存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)生存期生存期:變量在某一時(shí)刻存在:變量在某一時(shí)刻存在-靜態(tài)變量與動態(tài)變量靜態(tài)變量與動
20、態(tài)變量作用域作用域:變量在某區(qū)域內(nèi)有效:變量在某區(qū)域內(nèi)有效-局部變量與全局變量局部變量與全局變量變量的存儲類型auto -自動型自動型register-寄存器型寄存器型static -靜態(tài)型靜態(tài)型extern -外部型外部型變量定義格式: 存儲類型 數(shù)據(jù)類型 變量表;如如: int sum; auto int a,b,c; register int i; static float x,y;LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型auto型變量型變量v auto型變量在函數(shù)內(nèi)部定義,它局限于所在的函數(shù)。也型變量在函數(shù)內(nèi)部定義,它局限于所在的函數(shù)。也稱為局部變量。稱為局部變量。
21、v auto型變量定義的形式:型變量定義的形式:v auto 數(shù)據(jù)類型標(biāo)識符數(shù)據(jù)類型標(biāo)識符 變量名表;變量名表; func (int a,int b) int i1,i2; char c1,c2; float a1,a2; int p1,p2; double d1,d2; auto int k; autoauto型變量的作用范圍局型變量的作用范圍局限于所在的花括號。函數(shù)的限于所在的花括號。函數(shù)的形參屬于形參屬于autoauto型變量其生命型變量其生命期在執(zhí)行所屬的函數(shù)這段時(shí)期在執(zhí)行所屬的函數(shù)這段時(shí)間區(qū)間。同名變量在不同函間區(qū)間。同名變量在不同函數(shù)中代表不同的含義。數(shù)中代表不同的含義。LOGO6
22、.2 變量的作用域與存儲類型變量的作用域與存儲類型extern型變量型變量v extern型變量也稱為外部變量,它是一種全局變量,在型變量也稱為外部變量,它是一種全局變量,在函數(shù)之外定義,其定義格式如下:函數(shù)之外定義,其定義格式如下:v extern 數(shù)據(jù)類型標(biāo)識符數(shù)據(jù)類型標(biāo)識符 變量名表變量名表;int f2(int a) a=a+b+c; return (a); #include stdio.hint b=1,c=2;int f1(int a,int c) int b=8; scanf(%d,&a); a=a+b+c; return (a);LOGO6.2 變量的作用域與存儲類型變量的作用
23、域與存儲類型register型變量型變量v由于CPU對寄存器的操作速度要遠(yuǎn)遠(yuǎn)快于對內(nèi)存的操作,為了加快操作速度,可以使用寄存器型變量。 寄存器變量定義的一般形式為:寄存器變量定義的一般形式為: register 數(shù)據(jù)類型標(biāo)識符數(shù)據(jù)類型標(biāo)識符 變量名表變量名表;LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型局部變量與全局變量局部變量與全局變量 局部變量-內(nèi)部變量 定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效 說明: main中定義的變量只在main中有效 不同函數(shù)中同名變量,占不同內(nèi)存單元 形參屬于局部變量 可定義在復(fù)合語句中有效的變量 局部變量可用存儲類型:auto register s
24、tatic (默認(rèn)為auto)float f1(int a) int b,c; .char f2(int x,int y) int i,j; main() int m,n; .a,b,c有效有效x,y,i,j有效有效m,n有效有效例例 不同函數(shù)中同名變量不同函數(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);例例 不同函數(shù)中同名變量不同函數(shù)中同名變量m
25、ain() 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);運(yùn)行結(jié)果:main:a=3,b=4sub:a=6,b=7main:a=3,b=4例例 復(fù)合語句中變量復(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; fo
26、r(i=0;iN;i+) printf(%d ,ai);運(yùn)行結(jié)果:5 4 3 2 1例例 復(fù)合語句中變量復(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;iN;i+) printf(%d ,ai);LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型 全局變量全局變量 -外部變量外部變量 定義:在函數(shù)外定義,可為本文件所有函數(shù)共用定義:在函數(shù)外定義,可為本文件所有函數(shù)共用 有效范圍:從定義變量的位置開始到本源
27、文件結(jié)束,及有有效范圍:從定義變量的位置開始到本源文件結(jié)束,及有extern說明的其它源文件說明的其它源文件外部變量說明: extern 數(shù)據(jù)類型 變量表;外部變量定義與外部變量說明不同 定義定義 說明u次數(shù): 只能1次 可說明多次u位置: 所有函數(shù)之外 函數(shù)內(nèi)或函數(shù)外u分配內(nèi)存: 分配內(nèi)存,可初始化 不分配內(nèi)存,不可初始化若外部變量與局部變量同名,則外部變量被屏蔽 應(yīng)盡量少使用全局變量,因?yàn)椋篩全局變量在程序全部執(zhí)行過程中占用存儲單元Y降低了函數(shù)的通用性、可靠性,可移植性Y降低程序清晰性,容易出錯(cuò)外部變量可用存儲類型:缺省:缺省 或 staticLOGO6.2 變量的作用域與存儲類型變量的作
28、用域與存儲類型全局變量在程序的整個(gè)執(zhí)行過程都占用內(nèi)存注注意意考慮程序的模塊性、通用性、可讀性,應(yīng)少用全局變量全局變量太多,當(dāng)程序長且大時(shí)往往難以清楚的判斷出各個(gè)瞬時(shí)各個(gè)全局變量的值。若函數(shù)中用到以前未定義過的參數(shù),要用 extern 作外部變量說明LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型float max,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);
29、main() extern int a,b; printf(max=%d,max(a,b);int a=13,b=-8;運(yùn)行結(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=-8;例例 外部變量定義與說明外部變量定義與說明LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型動態(tài)變量與靜態(tài)變量動態(tài)變量與靜態(tài)變量 存儲方式 靜態(tài)存儲:程序運(yùn)行期間分配固定存儲空間 動態(tài)存儲:程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配存儲空間 內(nèi)存用戶區(qū)程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲
30、區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(auto register)函數(shù)調(diào)用現(xiàn)場保護(hù)和返回地址等生存期靜態(tài)變量:從程序開始執(zhí)行到程序結(jié)束動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束LOGO靜態(tài)動態(tài)存儲方式程序整個(gè)運(yùn)行期間函數(shù)調(diào)用開始至結(jié)束生存期編譯時(shí)賦初值,只賦一次每次函數(shù)調(diào)用時(shí)賦初值自動賦初值0或空字符不確定未賦初值靜態(tài)存儲區(qū)動態(tài)區(qū)存儲區(qū)寄存器局部變量外部變量作用域定義變量的函數(shù)或復(fù)合語句內(nèi)本文件其它文件u局部變量默認(rèn)為auto型uregister型變量個(gè)數(shù)受限,且不能為long, double, float型u局部static變量具有全局壽命和局部可見性u局部static變
31、量具有可繼承性uextern不是變量定義,可擴(kuò)展外部變量作用域register局部staticauto外部static外部存儲類別變變量量存存儲儲類類型型6.2 變量的作用域與存儲類型變量的作用域與存儲類型LOGO6.2 變量的作用域與存儲類型變量的作用域與存儲類型靜態(tài)靜態(tài)變量變量內(nèi)部靜態(tài)變量內(nèi)部靜態(tài)變量外部靜態(tài)變量外部靜態(tài)變量 靜態(tài)變量定義的一般形式為:靜態(tài)變量定義的一般形式為: static 數(shù)據(jù)類型標(biāo)識符數(shù)據(jù)類型標(biāo)識符 變量名表;變量名表;函數(shù)內(nèi)定義函數(shù)內(nèi)定義在源文件的開始和所在源文件的開始和所有函數(shù)之外定義有函數(shù)之外定義 static和全局變量若不初始化和全局變量若不初始化,自動賦自動
32、賦0 static和全局變量初始化時(shí)必須用常量為其賦初值和全局變量初始化時(shí)必須用常量為其賦初值 static型局部變量的初始化僅執(zhí)行一次型局部變量的初始化僅執(zhí)行一次 若進(jìn)入某程序塊后若進(jìn)入某程序塊后auto和和register型變量要被初始化,型變量要被初始化,則每次執(zhí)行該程序塊都要進(jìn)行初始化則每次執(zhí)行該程序塊都要進(jìn)行初始化 未初始化的未初始化的auto和和register變量,其初值不定,不能直變量,其初值不定,不能直接在程序中使用接在程序中使用extern型的變量不能進(jìn)行初始化。型的變量不能進(jìn)行初始化。LOGO6.3 利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì) 模塊化程序設(shè)計(jì)模塊
33、化程序設(shè)計(jì) 基本思想:將一個(gè)大的程序按功能分割成一些小模塊基本思想:將一個(gè)大的程序按功能分割成一些小模塊, 特點(diǎn):特點(diǎn): 各模塊相對獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡單各模塊相對獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡單 控制了程序設(shè)計(jì)的復(fù)雜性控制了程序設(shè)計(jì)的復(fù)雜性 提高元件的可靠性提高元件的可靠性 縮短開發(fā)周期縮短開發(fā)周期 避免程序開發(fā)的重復(fù)勞動避免程序開發(fā)的重復(fù)勞動 易于維護(hù)和功能擴(kuò)充易于維護(hù)和功能擴(kuò)充 開發(fā)方法開發(fā)方法: 自上向下自上向下,逐步分解,分而治之逐步分解,分而治之LOGO6.3 利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)C是模塊化程序設(shè)計(jì)語言是模塊化程序設(shè)計(jì)語言源程序文件1預(yù)
34、編譯命令說明部分執(zhí)行部分函數(shù)1函數(shù)n源程序文件i源程序文件nC程序C程序結(jié)構(gòu)&C是函數(shù)式函數(shù)式語言&必須有且只能有一個(gè)名為mainmain的主函數(shù)&C程序的執(zhí)行總是從從mainmain函數(shù)開始,在函數(shù)開始,在mainmain中結(jié)束中結(jié)束&函數(shù)不能嵌套定義不能嵌套定義, ,可以嵌套調(diào)用可以嵌套調(diào)用LOGO6.3 利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)利用函數(shù)進(jìn)行模塊化程序設(shè)計(jì)例例 求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值#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=%dn,d); int 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:
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬現(xiàn)實(shí)辦公交互-洞察分析
- 冶金設(shè)備智能化制造-洞察分析
- 云計(jì)算在企業(yè)信息化建設(shè)中的優(yōu)勢-洞察分析
- 特征值在機(jī)器學(xué)習(xí)模型優(yōu)化中的價(jià)值分析-洞察分析
- 虛擬儀器設(shè)計(jì)與應(yīng)用-洞察分析
- 虛擬化安全性能評估-洞察分析
- 微生物發(fā)酵技術(shù)在農(nóng)產(chǎn)品加工中的應(yīng)用-洞察分析
- 醫(yī)療大數(shù)據(jù)與仿真分析-洞察分析
- 月球潮汐效應(yīng)研究-洞察分析
- 文化旅游目的地建設(shè)-洞察分析
- 2024-2030年全球與中國汽車音頻DSP芯片組市場銷售前景及競爭策略分析報(bào)告
- 2025禮品定制合同范本
- 醫(yī)院消毒隔離制度范文(2篇)
- 2024年01月11026經(jīng)濟(jì)學(xué)(本)期末試題答案
- 烘干煤泥合同范例
- 人教版六年級上冊數(shù)學(xué)第八單元數(shù)學(xué)廣角數(shù)與形單元試題含答案
- 2025年“三基”培訓(xùn)計(jì)劃
- 第20課 北洋軍閥統(tǒng)治時(shí)期的政治、經(jīng)濟(jì)與文化 教案
- 住房公積金稽核審計(jì)工作方案例文(4篇)
- Unit 2 My Schoolbag ALets talk(說課稿)-2024-2025學(xué)年人教PEP版英語四年級上冊
- 山東省青島實(shí)驗(yàn)高中2025屆高三物理第一學(xué)期期末綜合測試試題含解析
評論
0/150
提交評論