C語言項目開發(fā)教程 第4章ppt課件_第1頁
C語言項目開發(fā)教程 第4章ppt課件_第2頁
C語言項目開發(fā)教程 第4章ppt課件_第3頁
C語言項目開發(fā)教程 第4章ppt課件_第4頁
C語言項目開發(fā)教程 第4章ppt課件_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、整理ppt1第第4章章 函函 數(shù)數(shù)在大型程序中,一個同樣的程序段可能需要出現(xiàn)多次,這樣,程序?qū)⒆兊檬秩唛L,一旦這部分程序需要調(diào)整,程序的修改工作將十分繁重。因此,C語言中提供了函數(shù)方式,利用這種方式,可以將一個復(fù)雜的問題分解為很多小問題,給每一個小問題編寫一段程序(函數(shù)體),為這段程序設(shè)定名稱(函數(shù)名)以及接收數(shù)據(jù)的方式(參數(shù))。最后把很多個這樣的函數(shù)通過函數(shù)調(diào)用組合成一個完成復(fù)雜功能的有機(jī)體。這就是C語言結(jié)構(gòu)化設(shè)計的思想。通過這種結(jié)構(gòu)化的設(shè)計,將復(fù)雜的程序任務(wù)分解為很多個更小、更簡單的任務(wù)。每一個任務(wù)由一個函數(shù)完成,而函數(shù)中的變量和代碼也獨立于程序的其他部分,這樣使得程序編寫更容易。同時如

2、果程序中有錯誤,可以將問題縮小到特定的函數(shù),使程序更加容易調(diào)試。C語言中的函數(shù)有兩種:標(biāo)準(zhǔn)函數(shù)和自定義函數(shù)。前者由系統(tǒng)提供,如之前用到的printf()、puts(),數(shù)據(jù)處理函數(shù)sin(x)、cos(x)等,這類函數(shù)只要把其對應(yīng)的頭文件包括進(jìn)來即可以直接調(diào)用;后者是程序員根據(jù)需要自己定義的函數(shù)。本章主要討論自定義函數(shù)的使用方法。整理ppt2任務(wù)4.1 數(shù)學(xué)能力測試系統(tǒng) 任務(wù)目標(biāo) 了解函數(shù)的功能和優(yōu)點。 掌握函數(shù)的定義形式。 掌握函數(shù)的調(diào)用方法。 掌握形參和實參的概念。 掌握函數(shù)說明語句的形式和用法。 掌握函數(shù)的值的概念。 掌握函數(shù)返回值的用法。 完成數(shù)學(xué)能力測試程序設(shè)計。整理ppt34.1.

3、1 函數(shù)的定義函數(shù)定義就是確定函數(shù)完成什么功能以及如何運(yùn)行的程序模塊。函數(shù)必須先定義,然后才能使用。創(chuàng)建一個函數(shù)時,必須指定函數(shù)頭作為定義的第一行,接著是這個函數(shù)放在一對大括號內(nèi)的執(zhí)行代碼。這些代碼成為函數(shù)體。函數(shù)頭指明了函數(shù)的返回值類型、函數(shù)的名稱和參數(shù),函數(shù)體完成函數(shù)所有的處理操作。函數(shù)定義的一般形式為:類型標(biāo)志符 函數(shù)名(形式參數(shù)表) 變量說明 執(zhí)行語句其中,類型標(biāo)志符即函數(shù)類型,函數(shù)類型和函數(shù)返回值的類型一致,如果沒有返回值,則函數(shù)類型為void。有的函數(shù)有返回值,有的函數(shù)沒有返回值。函數(shù)的返回值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)用函數(shù)的值。有返回值的參數(shù),其

4、函數(shù)體中必須有相應(yīng)的返回語句return。函數(shù)名是唯一標(biāo)識一個函數(shù)的名稱,應(yīng)為一個合法的標(biāo)識符。形式參數(shù)列表由0個、1個或多個參數(shù)組成。參數(shù)之間用逗號隔開,每個參數(shù)都包括參數(shù)的類型和名稱。例如int max(int a,int b);中聲明了兩個參數(shù),它們均為int類型。用大括號括起來的部分為函數(shù)體,包括變量說明和執(zhí)行語句,這一部分的代碼表明了函數(shù)可以實現(xiàn)的功能。函數(shù)體內(nèi)可以沒有代碼,但是大括號必須存在??盏暮瘮?shù)體在調(diào)試大型程序時經(jīng)常用到。出現(xiàn)在形式參數(shù)列表中的形參,以及出現(xiàn)在函數(shù)體變量說明中的變量都是局部變量,只在函數(shù)內(nèi)部生效。整理ppt4下面是合法的函數(shù)定義的例子?!景咐?-1】 輸出簡單

5、圖形。void print() int i,j; for(i=1;i=10;i+) for(j=1;j=i;j+) printf(*); printf(n); 案例4-1中定義了一個void類型的無參數(shù)函數(shù)print,該函數(shù)的功能為在屏幕上打印一個10行的三角形。當(dāng)函數(shù)沒有返回值時,必須說明函數(shù)類型為void,這里的void不可以省略?!景咐?-2】 根據(jù)參數(shù)輸出簡單圖形。void print(int x) int i,j; for(i=1;i=x;i+) for(j=1;j=i;j+) printf(*); printf(n); 案例4-2中定義的函數(shù)print包含一個參數(shù),其功能同樣為在屏

6、幕上打印一個三角形,不同的是三角形的行數(shù)是由函數(shù)的參數(shù)確定的。函數(shù)運(yùn)行前首先接收通過函數(shù)調(diào)用傳遞的參數(shù),確定x的取值,然后執(zhí)行后續(xù)操作。整理ppt5下面幾個關(guān)于函數(shù)定義的案例是不正確的?!景咐?-3】 定義函數(shù),根據(jù)輸入的參數(shù)輸出一個長方形。void print(int x, y) int i,j; for(i=1;i=x;i+) for(j=1;j=y;j+) if(i=1|j=1|i=x|j=y) printf(* ); else printf( ); printf(n); 在函數(shù)定義中,每一個形參都必須用一個類型說明符單獨說明,不可以公用。將上述案例中的函數(shù)定義改為void print(

7、int x,int y),則函數(shù)定義正確?!景咐?-4】 定義一個函數(shù),輸出一個數(shù)的平方。void add(int x,int y) int result; void squart(int x); result=suqart(x)+squart(y) printf(%d,result);案例4-4中,在一個函數(shù)的函數(shù)體內(nèi)又定義了另外一個函數(shù),這種現(xiàn)象為函數(shù)的定義嵌套,這是不正確的。整理ppt6 在C語言中,所有的函數(shù)定義,包括main()函數(shù)在內(nèi),都是平行的,也就是說一個函數(shù)的函數(shù)體內(nèi),不能定義另一個函數(shù),即不能嵌套定義。是函數(shù)之間運(yùn)行互相調(diào)用時,也允許嵌套調(diào)用,但main()函數(shù)除外,mai

8、n()只能調(diào)用其他函數(shù)而不能被調(diào)用。因此,C程序的執(zhí)行總是從main()函數(shù)開始,完成對其他函數(shù)的調(diào)用后再返回到mian()函數(shù),最后由mian()函數(shù)結(jié)束整個程序。一個程序有且只能有一個mian()函數(shù)。整理ppt74.1.2 函數(shù)的調(diào)用 1函數(shù)調(diào)用形式程序中之所以定義函數(shù),是為了在程序中其他需要的地方調(diào)用函數(shù)。在程序中是通過對函數(shù)的調(diào)用來執(zhí)行函數(shù)體的。在前面的章節(jié)中,其實已經(jīng)涉及到了一些函數(shù)的調(diào)用的案例,如printf函數(shù)、puts函數(shù)等的調(diào)用。函數(shù)調(diào)用時通過函數(shù)調(diào)用語句實現(xiàn)的,主函數(shù)就是主調(diào)函數(shù),主函數(shù)中調(diào)用的函數(shù)為被調(diào)函數(shù)。函數(shù)調(diào)用的一般形式為:函數(shù)名(實際參數(shù)表)對無參數(shù)函數(shù)調(diào)用時無

9、實際參數(shù)。實際參數(shù)列表中的參數(shù)可以是常數(shù),變量或其他構(gòu)造類型數(shù)據(jù)表達(dá)式,各參數(shù)之間用逗號隔開。這里的參數(shù)的個數(shù)、類型和順序都應(yīng)與被調(diào)函數(shù)定義中的參數(shù)列表中的設(shè)置相同。函數(shù)調(diào)用的過程為:先計算出實際參數(shù)表中各表達(dá)式的值,然后把值傳遞給對應(yīng)的形參,然后再將執(zhí)行控制流轉(zhuǎn)向被調(diào)函數(shù)的第一個語句并執(zhí)行函數(shù)體。當(dāng)函數(shù)執(zhí)行完后,執(zhí)行控制流返回到主調(diào)函數(shù)中。函數(shù)調(diào)用的結(jié)果稱為函數(shù)的值,也就是函數(shù)體中return 語句返回的值??赏ㄟ^“函數(shù)名(實際參數(shù)表)”的形式訪問返回語句返回的值,如,有以下函數(shù):int add(int a,int b) return a+b;其中,return語句表示返回a加b的值,即調(diào)用

10、該函數(shù)可獲得a加b的值,調(diào)用形式為add(a,b)。函數(shù)調(diào)用有三種表現(xiàn)形式,分別為:作為單獨的函數(shù)調(diào)用語句;作為函數(shù)的部分參數(shù);作為表達(dá)式的一部分。整理ppt8【案例4-5】 編寫程序,求三個數(shù)中的最大值。#include int max(int a,int b,int c) if(ab) if(ac) return a; else return c; else if(bc) return b; else return c; void main() int a,b,c; int maxnum; printf(請依次輸入三個整數(shù):n); scanf(%d%d%d,&a,&b,&a

11、mp;c); printf(最大值為:%dn,max(a,b,c); /函數(shù)調(diào)用作為輸出參數(shù)整理ppt9程序運(yùn)行結(jié)果如下:請依次輸入三個整數(shù):9 2 6最大值為:9案例中定義了求三個數(shù)中的最大值函數(shù)max,函數(shù)中通過比較返回三個參數(shù)中的最大值。在主程序中,函數(shù)調(diào)用作為輸出參數(shù)直接輸出??梢詫⑸鲜龀绦蛑械妮敵霾糠痔崛〕鰜韱为氉鳛橐粋€函數(shù),則程序可變?yōu)椋簐oid print(int maxnum) printf(最大值為:%dn,maxnum);void main() int a,b,c; int maxnum; printf(請依次輸入三個整數(shù):n); scanf(%d%d%d,&a,&

12、amp;b,&c); print(max(a,b,c);此時對print函數(shù)的調(diào)用是作為單獨的函數(shù)調(diào)用語句,函數(shù)沒有返回值,只是完成獨立的操作。max函數(shù)的調(diào)用結(jié)果則作為參數(shù)傳遞給print函數(shù)。整理ppt10 2函數(shù)的形參和實參在函數(shù)定義中,出現(xiàn)在函數(shù)名括號中的參數(shù)為形式參數(shù),簡稱形參;函數(shù)調(diào)用時,出現(xiàn)在函數(shù)名后括號中的參數(shù)是實際參數(shù),簡稱實參。函數(shù)調(diào)用時,形參的數(shù)量和類型要和實參的數(shù)量和類型相一致,并且實參和形參的順序也應(yīng)保持一致,所代表的意義也一致。形參和實參的功能是數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時,主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)的形參,從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。形參和實參

13、的使用有以下特點:(1)形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。 (2)實參可以是常量、變量、表達(dá)式、函數(shù)等,無論實參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值、輸入等辦法使實參獲得確定值。 (3)實參和形參在數(shù)量上、類型上、順序上應(yīng)嚴(yán)格一致,否則會發(fā)生“類型不匹配”的錯誤。 (4)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此,在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而

14、實參中的值不會變化。整理ppt11【案例4-6】 計算從1到n的和。#include int s(int n) int i; for(i=n-1;i=1;i-) n=n+i; printf(函數(shù)s中: n=%dn,n); return 0;void main() int n; printf(請輸入一個正整數(shù):n); scanf(%d,&n); printf(主函數(shù)中調(diào)用s前:n=%dn,n); s(n); printf(主函數(shù)中調(diào)用s后:n=%dn,n);程序運(yùn)行結(jié)果如下:請輸入一個正整數(shù):100主函數(shù)中調(diào)用s前:n=100函數(shù)s中: n=5050主函數(shù)中調(diào)用s后:n=100整理ppt

15、12 本程序中定義了一個函數(shù)s,該函數(shù)的功能是求ni的值。在主函數(shù)中輸入n值,并作為實參,在調(diào)用時傳送給s函數(shù)的形參量n(注意,本例的形參變量和實參變量的標(biāo)識符都為n,但這是兩個不同的量,各自的作用域不同)。在主函數(shù)中調(diào)用函數(shù)s前用printf語句輸出一次n值,這個n值是實參n的值。在函數(shù)s中也用printf語句輸出了一次n值,這個n值是形參最后取得的n值,然后再在主函數(shù)中輸出一次n的值,發(fā)現(xiàn)n的值仍為10不變。從運(yùn)行情況看,輸入n值為100。即實參n的值為100。把此值傳給函數(shù)s時,形參n的初值也為100,在執(zhí)行函數(shù)過程中,形參n的值變?yōu)?050。返回主函數(shù)之后,輸出實參n的值仍為100???/p>

16、見傳值調(diào)用時實參不隨形參的變化而變化。 在函數(shù)調(diào)用時,為形參變量n分配內(nèi)存單元,并將實參n的值傳遞給形參n。然后在函數(shù)s內(nèi)對n的值進(jìn)行計算,形參n的值發(fā)生了變化。在程序結(jié)束時,要釋放為形參n分配的內(nèi)存空間。即形參n只在函數(shù)s內(nèi)部有效,函數(shù)s的執(zhí)行不會影響主函數(shù)中實參s的值,函數(shù)調(diào)用前后實參值不變。整理ppt133函數(shù)的說明C語言可以由若干個文件組成,每一個文件又可以單獨編譯,因此當(dāng)編譯程序中的函數(shù)調(diào)用時,如果不知道該函數(shù)參數(shù)的個數(shù)和類型,編譯系統(tǒng)就無法檢查形參和實參是否匹配。為了保證函數(shù)調(diào)用時,編譯程序能夠檢查出調(diào)用過程中傳遞的參數(shù)和函數(shù)定義中的參數(shù)是否類型一致和個數(shù)匹配,以保證函數(shù)調(diào)用的成功

17、,因此有時在主調(diào)用函數(shù)中需要對調(diào)用函數(shù)進(jìn)行說明。在之前的例子中,總是先寫調(diào)用函數(shù)然后再寫主調(diào)函數(shù)。但是實際上組成一個程序的函數(shù)的位置是任意的,即有可能主調(diào)函數(shù)在被調(diào)函數(shù)之前,此時需要用到函數(shù)說明語句,否則將無法使用被調(diào)函數(shù)。函數(shù)說明的一般形式如下:函數(shù)類型 函數(shù)名(形式參數(shù)列表)例如:int max(int a,int b);整理ppt14【案例4-7】 求圓的面積。#include #define PI 3.14void main() float x; float a; float area(float x); printf(請輸入圓的半徑:n); scanf(%f,&x); a=a

18、rea(x); printf(圓的面積為:%.3fn,a);float area(float x) float a; a=PI*x*x; return a;程序運(yùn)行結(jié)果如下:請輸入圓的半徑:6圓的面積為:113.040整理ppt15函數(shù)的說明除了在主調(diào)函數(shù)中,也可以出現(xiàn)在函數(shù)的外部,如上述程序可以改寫為:#include #define PI 3.14float area(float x);void main() float x; float a; printf(請輸入圓的半徑:n); scanf(%f,&x); a=area(x); printf(圓的面積為:%.3fn,a);flo

19、at area(float x) float a; a=PI*x*x; return a;函數(shù)的說明和函數(shù)定義在形式上類似,但是函數(shù)說明并不等價于函數(shù)定義。函數(shù)的定義由兩部分組成:函數(shù)首部和函數(shù)體,函數(shù)的定義中應(yīng)包括實現(xiàn)函數(shù)功能的語句和返回值等;而函數(shù)的說明中只是一個說明,沒有具體的功能實現(xiàn)語句。整理ppt16另外,函數(shù)的定義只能有一次,而函數(shù)的說明可以有多次,每次調(diào)用函數(shù)之前就應(yīng)該在主調(diào)函數(shù)中說明依次。例如:#define PI 3.14void main() float area(float x); void print() float area(float x); float area(

20、float x) float a; a=PI*x*x; return a;在主函數(shù)和另外一個函數(shù)print中均用到了函數(shù)area,所以都在調(diào)用前對函數(shù)area進(jìn)行了說明,但是函數(shù)area的定義只有一次,在定義中給出了函數(shù)的具體功能的實現(xiàn)。而函數(shù)的說明則不包括功能實現(xiàn)。函數(shù)說明并不是必須的,在下列情況中不需要對函數(shù)進(jìn)行說明也可以使用:函數(shù)返回值為整型或字符型時,且在同一個文件中既定義函數(shù),又調(diào)用函數(shù);函數(shù)的定義和調(diào)用在同一個文件中,且定義在調(diào)用之前。如果函數(shù)的定義和調(diào)用在兩個不同的文件中,則無論函數(shù)返回值的類型是什么,在調(diào)用函數(shù)時,必須給出函數(shù)的說明。整理ppt17【案例4-8】 求長方形的面積

21、。#include void main() int x,y; int a; printf(請輸入長方形兩邊長:n); scanf(%d%d,&x,&y); a=area(x,y); printf(長方形的面積為:%dn,a);int area(int x,int y) int a; a=x*y; return a;程序運(yùn)行結(jié)果如下:請輸入長方形兩邊長:5 6長方形的面積為:30整理ppt184.1.3 函數(shù)的值函數(shù)的值指示函數(shù)調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得并返回給主調(diào)用函數(shù)的值,函數(shù)值的類型為函數(shù)類型。函數(shù)的值只能通過返回值的形式返回給主調(diào)用用函數(shù)。返回值語句return

22、的形式如下:return 表達(dá)式;執(zhí)行時,首先計算表達(dá)式的值(可以為常量表達(dá)式、變量或復(fù)合類型的表達(dá)式),然后將該值返回給調(diào)用函數(shù)。函數(shù)類型一般與return 語句表達(dá)式的類型一致。如果函數(shù)不提供返回值,則可以定義函數(shù)類型為空類型(void)。如果return 語句中表達(dá)式的類型與函數(shù)的類型不一致,則以函數(shù)的類型為準(zhǔn),返回時自動進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。一個程序中可以有多個return語句,但是每次調(diào)用只能執(zhí)行一個return語句,因此函數(shù)只能有一個返回值。如果函數(shù)不提供返回值,且被定義為空類型時,系統(tǒng)默認(rèn)函數(shù)類型為整型。返回值語句return 的作用為:結(jié)束本函數(shù)運(yùn)行,返回到主調(diào)用函數(shù)中執(zhí)行下一條指

23、定;將表達(dá)式運(yùn)算結(jié)果返回到調(diào)用處。整理ppt19【案例4-9】 編寫一個函數(shù),在屏幕上顯示一個字符串。#includevoid print() char s100; printf(請輸入一個字符串:n); gets(s); printf(輸入的字符串為:n); puts(s); return;void main() print(); printf(輸出結(jié)束n);程序運(yùn)行結(jié)果如下:請輸入一個字符串:Hello輸入的字符串為:Hello輸出結(jié)束整理ppt20 程序中定義了一個無參數(shù)函數(shù)print(),在執(zhí)行完最后一個語句puts(s),即顯示字符串s 之后,遇到return語句,函數(shù)結(jié)束并返回到主

24、調(diào)用函數(shù)中,即繼續(xù)執(zhí)行主函數(shù)中的輸出語句。 在函數(shù)類型為void的情況下,通常可以省略return語句的使用,函數(shù)執(zhí)行完最后一條語句后,自動結(jié)束并返回到主調(diào)用函數(shù)中整理ppt21【案例4-10】 編寫一個函數(shù),比較a、b的大小,并返回其中較大的一個。#include int max1(int a,int b) if(a=b) return a; else return b;int max2(int a,int b)Return (ab?a:b);void main() int a,b; int m; printf(請輸入兩個整數(shù):n); scanf(%d%d,&a,&b); p

25、rintf(兩個數(shù)中較大值為:n); m=max1(a,b); printf(調(diào)用函數(shù)max1運(yùn)行結(jié)果:%dn,m); m=max2(a,b); printf(調(diào)用函數(shù)max2運(yùn)行結(jié)果:%dn,m);整理ppt22程序運(yùn)行結(jié)果如下:請輸入兩個整數(shù):10 15兩個數(shù)中較大值為:調(diào)用函數(shù)max1運(yùn)行結(jié)果:15調(diào)用函數(shù)max2運(yùn)行結(jié)果:15在這個程序中定義的函數(shù)max1和max2的功能為返回兩個數(shù)中的較大值。在這個兩個函數(shù)中,程序并不是執(zhí)行到最后一條語句之后才終止并跳出到主程序中的,而是根據(jù)比較結(jié)果,如已知ab時,則不需要執(zhí)行下面的else語句就可以確定最大值,這時可以直接跳出函數(shù)。程序max1和m

26、ax2的功能均為比較兩個數(shù)的最大值,max2函數(shù)中只有一條return語句,max1中有兩條return語句,但函數(shù)具體執(zhí)行時都只執(zhí)行其中的一條return語句,返回該函數(shù)值到主調(diào)用函數(shù)中。函數(shù)的返回值非空時,則可以將函數(shù)的值看成一個明確的數(shù)值用在任意表達(dá)式中,如將函數(shù)返回值賦給另外的變量或直接輸出函數(shù)返回值。注意,用戶定義的函數(shù)大部分屬于以下三種類型:第一種為數(shù)據(jù)處理型,函數(shù)的主體為對數(shù)據(jù)進(jìn)行計算或其他處理,最后輸出數(shù)據(jù)處理結(jié)果;第二種為信息處理型,對一些信息進(jìn)行處理,處理后返回一個值,這個值僅作為處理成功或失敗的標(biāo)記,而無具體的含義;第三種為功能獨立型,完成指定的功能,沒有返回值。整理pp

27、t234.1.4 任務(wù)實現(xiàn)1問題描述編寫程序,訓(xùn)練兒童加、減、乘、除數(shù)學(xué)算數(shù)能力的程序。程序應(yīng)該能自動生成加法、減法、乘法和除法運(yùn)算的算數(shù)表達(dá)式,并且通過學(xué)生輸入的答案判斷結(jié)果是否正確,然后給出提示。在用戶選擇結(jié)束程序時,可以統(tǒng)計共回答了多少題,得分為多少。2要點解析根據(jù)程序功能,可以將總程序分為5個模塊,即add:隨機(jī)輸出加法表達(dá)式并判斷答案是否正確。sub:隨機(jī)輸出減法表達(dá)式并判斷答案是否正確。mul:隨機(jī)輸出乘法表達(dá)式并判斷答案是否正確。divi:隨機(jī)輸出除法表達(dá)式并判斷答案是否正確。mark:統(tǒng)計答題數(shù)目和得分情況。整理ppt243程序?qū)崿F(xiàn)#include#include#includ

28、evoid add();void sub();void mul();void divi();void mark(int c);int count = 0,sum = 0;void main() int choice; char ans = y; printf(歡迎使用兒童算數(shù)運(yùn)算能力測試程序nn 長時間使用計算機(jī)不利于兒童身體健康nn 每次只能做一項練習(xí):nn); printf(t1.加法運(yùn)算n); printf(t2.減法運(yùn)算n); printf(t3.乘法運(yùn)算n); printf(t4.除法法運(yùn)算n); printf(t0.退出n); printf(請選擇操作(0-4):); scanf(

29、%d,&choice);整理ppt25 while(ans = y | ans = Y) switch(choice) case 1:add();break; case 2:sub();break; case 3:mul();break; case 4:divi();break; case 0:printf(歡迎下次使用,再見!nn);exit(0); default:printf(輸入有誤!nn);exit(0); printf(是否繼續(xù)?按y繼續(xù),按n退出。n); scanf(%s,&ans); mark(choice);void add() int x,y,z,resul

30、t; srand(time(NULL); x = rand()%10; y = rand()%10; result = x + y; printf(%d+%d= ,x,y); scanf(%d,&z); if(z = result) printf(恭喜你,答對了,加10分!nn);整理ppt26 sum+=10; else printf(答錯了,繼續(xù)努力哦!nn); count+;void sub() int x,y,z,result; srand(time(NULL); x = rand()%10; y = rand()%10; result = x - y; printf(%d-%

31、d= ,x,y); scanf(%d,&z); if(z = result) printf(恭喜你,答對了,加10分!nn); sum+=10; else printf(答錯了,繼續(xù)努力哦!nn); count+;整理ppt27void mul() int x,y,z,result; srand(time(NULL); x = rand()%10; y = rand()%10; result = x * y; printf(%d*%d= ,x,y); scanf(%d,&z); if(z = result) printf(恭喜你,答對了,加10分!nn); sum+=10; e

32、lse printf(答錯了,繼續(xù)努力哦!nn); count+;void divi() int x,y,z,result; srand(time(NULL); x = rand()%10; y = rand()%10;整理ppt28 while(x%y != 0 | y = 0) srand(time(NULL); x = rand()%10; y = rand()%10; result = x / y; printf(%d/%d= ,x,y); scanf(%d,&z); if(z = result) printf(恭喜你,答對了,加10分!nn); sum+=10; else p

33、rintf(答錯了,繼續(xù)努力哦!nn); count+;void mark(int c) switch(c) case 1:printf(本次共做加法題%d道,總得分為%d!n,count,sum);break; case 2:printf(本次共做減法題%d道,總得分為%d!n,count,sum);break; case 3:printf(本次共做乘法題%d道,總得分為%d!n,count,sum);break; case 4:printf(本次共做除法題%d道,總得分為%d!n,count,sum);break; printf(歡迎下次使用,再見!n);整理ppt29程序運(yùn)行結(jié)果如下:歡

34、迎使用兒童算數(shù)運(yùn)算能力測試程序長時間使用計算機(jī)不利于兒童身體健康每次只能做一項練習(xí): 1.加法運(yùn)算 2.減法運(yùn)算 3.乘法運(yùn)算 4.除法運(yùn)算 0.退出請選擇操作(04):19+8= 17恭喜你,答對了,加10分!是否繼續(xù)?按y繼續(xù),按n退出。y2+5= 7恭喜你,答對了,加10分!是否繼續(xù)?按y繼續(xù),按n退出。y5+1= 6恭喜你,答對了,加10分!是否繼續(xù)?按y繼續(xù),按n退出。y4+8= 10答錯了,繼續(xù)努力哦!是否繼續(xù)?按y繼續(xù),按n退出。n本次共做加法題4道,總得分為30!歡迎下次使用,再見!整理ppt30 任務(wù)4.2 漢諾塔問題 任務(wù)目標(biāo) 掌握函數(shù)的遞歸調(diào)用方法。 掌握函數(shù)嵌套調(diào)用方法

35、。 掌握變量局部變量和全局變量的概念和用法。 掌握變量的靜態(tài)和動態(tài)存儲方式。 掌握全局變量和局部變量的存儲方式。 完成漢諾塔程序設(shè)計整理ppt314.2.1 嵌套調(diào)用和遞歸調(diào)用 1函數(shù)的嵌套調(diào)用在C 語言中,各函數(shù)的定義是平等的,獨立的,不允許在一個函數(shù)的函數(shù)體內(nèi)定義另外一個函數(shù),即函數(shù)的定義不允許嵌套。但是C 語言中,運(yùn)行在一個函數(shù)的定義中會出現(xiàn)另外一個函數(shù)的調(diào)用,即函數(shù)的嵌套調(diào)用。當(dāng)出現(xiàn)這樣的調(diào)用時,在執(zhí)行第一個函數(shù)的函數(shù)體過程中會出現(xiàn)第二個函數(shù)的調(diào)用和執(zhí)行。【案例4-11】 函數(shù)的嵌套調(diào)用。#include void fun1() void fun2(); printf(-n); fun

36、2(); printf(-n);void fun2() printf(*n);void main() void fun1(); void fun2(); printf(&n); fun1(); printf(&n);整理ppt32程序運(yùn)行結(jié)果如下:&-*-&其中,函數(shù)的執(zhí)行過程為:(1)執(zhí)行main函數(shù)的開頭部分。(2)遇到fun1函數(shù)的調(diào)用語句,轉(zhuǎn)向fun1函數(shù)的執(zhí)行。(3)執(zhí)行fun1的開頭部分。(4)遇到fun2函數(shù)的調(diào)用語句,轉(zhuǎn)向fun2函數(shù)的執(zhí)行。(5)執(zhí)行fun2函數(shù)。(6)fun2函數(shù)執(zhí)行結(jié)束,返回其調(diào)用處,即fun1。(7)繼續(xù)執(zhí)行fun1函數(shù)。

37、(8)fun1函數(shù)執(zhí)行結(jié)束,返回到main函數(shù)的執(zhí)行。(9)main函數(shù)執(zhí)行結(jié)束,程序終止。整理ppt33 程序執(zhí)行流程如圖4-1所示。 圖4-1 嵌套函數(shù)執(zhí)行流程 2函數(shù)的遞歸調(diào)用 在調(diào)用一個函數(shù)的過程中又出現(xiàn)了直接或間接地調(diào)用該函數(shù)自身,這種函數(shù)調(diào)用方式稱為遞歸調(diào)用整理ppt34例如:void fun() fun(); 在函數(shù)體內(nèi)直接有本函數(shù)的調(diào)用,這種方式為直接遞歸調(diào)用。void fun1() fun2(); void fun2() fun1()在一個函數(shù)的函數(shù)體內(nèi)調(diào)用了另外一個函數(shù),但是該函數(shù)又有對本函數(shù)的調(diào)用,這種方式為嵌套遞歸調(diào)用。由于算法的有窮性特點,不能讓一個函數(shù)無休止地調(diào)用其

38、函數(shù)自身,這樣會導(dǎo)致死循環(huán)。因此,必須采用某些手段來終止遞歸調(diào)用,常用的方法是在遞歸調(diào)用前添加判斷條件,條件不滿足之后就跳出該遞歸調(diào)用?!景咐?-12】 使用遞歸調(diào)用求一個數(shù)的階乘。設(shè)定f(n)=n!,則可知f(n-1)=nf(n-1),f(1)=1,f(0)=1。整理ppt35源程序如下:#include int f(int n) int s; if(n0) printf(輸入錯誤!n); return 0; if(n=0|n=1) s=1; else s=f(n-1)*n; return s;void main() int n; int s; printf(請輸入一個正整數(shù):); scan

39、f(%d,&n); s=f(n); printf(%d!=%dn,n,s);程序運(yùn)行結(jié)果如下:請輸入一個正整數(shù):55!=120整理ppt36主函數(shù)調(diào)用scanf函數(shù)得到一個正整數(shù),然后調(diào)用f函數(shù),并且f中n的值為5,此時n的值不滿足n0或者n=0|n=1,所以繼續(xù)調(diào)用函數(shù)f。第二次調(diào)用f時,形參n接收到的實參值為4,然后繼續(xù)調(diào)用,直到第五次調(diào)用,接收到的形參值為1,滿足條件n=1,則執(zhí)行s=1,然后執(zhí)行return語句。這樣第4次調(diào)用f收到第5次調(diào)用的返回值f(1),并計算f(2)=2f(1)=2,并將這個值返回給第3次調(diào)用,第4次調(diào)用結(jié)束;第3次調(diào)用根據(jù)第4次調(diào)用的返回值f(2)計算

40、f(3)3f(2)=6,結(jié)束本次調(diào)用并返回給第2次調(diào)用;第2次調(diào)用計算f(4)=4f(3)=24;第一次調(diào)用計算f(5)=5f(4)=120,然后返回給主程序并輸出。案例4-12也可以不用遞歸的方法,而是直接使用循環(huán)語句來實現(xiàn),且比遞歸法更加易于理解和容易實現(xiàn)。但是有些問題則比較適合用遞歸法來實現(xiàn),比如:(1)可以將問題轉(zhuǎn)化為與原問題解決方法相同的新問題,通常新問題的規(guī)模和復(fù)雜度較原問題遞減。(2)簡化之后的問題是易于實現(xiàn)的或者已知解決方法的。(3)遞歸必須有一個出口,即終止遞歸語句的條件。整理ppt37【案例4-13】 輸入一個正整數(shù)序列,以相反的順序輸出該序列,以遞歸的方法實現(xiàn)。將原問題分

41、解為解決方法相同的幾個小問題:假設(shè)輸出的正整數(shù)只有一位,則問題簡化為反向輸出一位正整數(shù)。這樣只要輸出這一位正整數(shù)即可。對于一個位數(shù)大于1的正整數(shù),則可以將其在邏輯上分為兩部分:個位數(shù)的數(shù)字和個位數(shù)之前的所有數(shù)字。則問題分解為:(1)先輸出個位數(shù)的反向序列。(2)再輸出其他部分的反向序列。顯然前面一個問題是已經(jīng)可以解決的,問題轉(zhuǎn)化為輸出個位數(shù)之前的反向序列。對于個位數(shù)之前的數(shù)字,可以繼續(xù)按上述規(guī)則將其分解,直到完成整個正整數(shù)序列的反向輸出。整理ppt38程序源代碼如下:#include void change(int num) int n=num; if(n=0&n=9) /若n為一位整

42、數(shù) printf(%d,n); /直接輸出 else printf(%d,n%10); /輸出n的個位數(shù) change(n/10); /輸出n的個位數(shù)之外的其他數(shù)字 void main() int num; printf(請輸入一個正整數(shù)序列:n); scanf(%d,&num); printf(該整數(shù)的反向序列為:n); change(num); printf(n);程序運(yùn)行結(jié)果如下:請輸入一個正整數(shù)序列:123456789該整數(shù)的反向序列為:987654321上述問題的解決方案為將問題進(jìn)行分解,然后用較小的問題來解決較大的問題,即遞歸的思想。整理ppt394.2.2 局部變量和全局

43、變量在C語言中,變量的不同定義形式和定義位置,使得變量有不同的有效范圍,這個有效范圍即變量的作用域。從變量的作用域來劃分,變量可以分為局部變量和全局變量。 1局部變量局部變量也稱內(nèi)部變量,是指在函數(shù)內(nèi)定義的變量。局部變量的作用域僅限于本函數(shù)內(nèi),即只能在本函數(shù)中使用,在函數(shù)執(zhí)行結(jié)束后即釋放該變量的內(nèi)存空間,離開函數(shù)之后再使用這種變量是非法的。局部變量的形式有以下三種。(1)在函數(shù)體內(nèi)定義的變量:其作用范圍只能在所處的函數(shù)內(nèi),一旦超出這個范圍,變量不起作用。(2)在函數(shù)形式參數(shù)列表中定義的變量:其作用范圍只在函數(shù)內(nèi)部。(3)在符合語句中定義的變量:其作用范圍僅在所處的復(fù)合語句中。整理ppt40例如

44、:int f1(int i) int j,k; int f2(int x) int y,z; 函數(shù)f1中定義了三個變量,i為形參,j和k為變量,i、j、k僅在f1內(nèi)部有效,或者i、j、k的作用域僅限于f1內(nèi)部。同理,f2中定義的x、y、z的作用域f2內(nèi)部,僅在f2內(nèi)部有效。允許在不同函數(shù)中使用相同的變量名和形參名。復(fù)合語句中也可以定義變量,其作用域只在復(fù)合語句范圍內(nèi),如:void fun() - int x,y; - x和y的作用域 int z; z的作用域 z=x+y; - -同一函數(shù)體內(nèi)或同一層的復(fù)合語句內(nèi),應(yīng)先進(jìn)行所有的聲明,然后再寫執(zhí)行語句。不同層的復(fù)合語句,變量之前可以重名。此時執(zhí)行

45、到內(nèi)層語句時,同名變量中內(nèi)層定義的變量有限,外層變量被屏蔽,結(jié)束內(nèi)層語句后才有效整理ppt41【案例4-14】 局部變量的作用域。#include int add(int x,int y) int sum; sum=x+y; return sum;int plu(int x,int y) return x-y;void main() int x=3; int y=3; printf(x=%d,y=%dn,x,y); int x=5; printf(x=%dn,x); y+; printf(x=%d,y=%dn,x,y); printf(x+y=%dn,add(x,y); printf(x-y=

46、%dn,plu(x,y);程序運(yùn)行結(jié)果如下:x=3,y=3x=5x=3,y=4x+y=7x-y=-1請讀者自行分析上述程序中各個變量的作用域整理ppt42 2全局變量在任何函數(shù)體外定義的變量為全局變量。全局變量的作用域比較寬,它的有效范圍為從其定義的位置開始到所在源文件的結(jié)束,在這個區(qū)域內(nèi)任意函數(shù)都可以調(diào)用它。例如:int a,b; /外部變量void fun1() int x,y;void fun2() void main() 其中a、b、x和y都是外部變量,a和b的作用域為從其開始定義到fun1、fun2和main函數(shù),而x和y的定義在fun1之后,所以其作用域為fun2和main函數(shù)。全

47、局變量可以加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但是會使函數(shù)之間的獨立性降低,這在程序模塊化設(shè)計的觀點看是不利的。全局變量的使用還容易導(dǎo)致程序錯誤,因為全局變量為多個函數(shù)共享,因此全局變量的錯誤將會傳遞給其作用域所在的所有函數(shù)。因此在程序設(shè)計時應(yīng)盡量避免全局變量的使用,加強(qiáng)函數(shù)的獨立性。在同一個源文件中,允許全局變量和局部變量同名。在局部變量的作用范圍之內(nèi),全部變量被屏蔽,不起作用。例如:整理ppt43int x=0;void fun(int x) x=x+1;Void main() fun(x); printf(x=%d,x);程序中定義了一個全局變量x,它的作用范圍為從定義到文本結(jié)束。而fun函數(shù)中

48、也定義了一個同名的變量x,則在fun內(nèi)部,全局變量x不起作用。程序執(zhí)行時,調(diào)用函數(shù)fun(x),這里的 x為全局變量,即x=0。程序轉(zhuǎn)向fun函數(shù)時,fun函數(shù)內(nèi)的x被賦值為0,并執(zhí)行x=x+1的操作,局部變量x變?yōu)?。函數(shù)fun執(zhí)行結(jié)束之后,繼續(xù)執(zhí)行main函數(shù),輸出x的值。此時fun函數(shù)中改變的x的值為局部變量x,全局變量x的值不變,輸出結(jié)果應(yīng)為x=1。整理ppt44【案例4-15】 全局變量的使用。#include int max,min,avg;void process(int num) int score,sum=0; int count=0; printf(請輸入學(xué)生%d的成績:n

49、,num); scanf(%d,&score); max=min=score; do sum=sum+score; if(scoremax) max=score; count+; scanf(%d,&score); while(score=0); avg=sum/count;void main() int i; for(i=1;i=3;i+) process(i); printf(*學(xué)生1*n); printf(最高分t最低分t平均分n); printf(%dt%dt%dn,max,min,avg); 整理ppt45程序運(yùn)行結(jié)果如下:請輸入學(xué)生1的成績:78 90 86 74

50、92 -1*學(xué)生1*最高分 最低分 平均分92 74 84請輸入學(xué)生2的成績:89 93 82 85 71 -1*學(xué)生1*最高分 最低分 平均分93 71 84請輸入學(xué)生3的成績:78 92 94 65 99 -1*學(xué)生1*最高分 最低分 平均分99 65 85整理ppt464.2.3 變量的存儲類型C語言中的每一個變量都有兩個屬性:變量類型和存儲類型。變量的作用域從變量在什么空間內(nèi)有效的角度劃分,可以分為全局變量和局部變量。變量的存儲類別則是以變量在內(nèi)存中存在的時間角度劃分的,可以分為動態(tài)存儲方式和靜態(tài)存儲方式兩種。靜態(tài)存儲方式是指在程序運(yùn)行期間分配固定的存儲空間的方式。而動態(tài)存儲方式則是在

51、程序運(yùn)行期間根據(jù)需要動態(tài)分配存儲空間的方式。編譯后的C程序有4個不同的邏輯內(nèi)存區(qū)域,它們分別有不同的功能。程序區(qū):用來存放程序代碼的區(qū)域。靜態(tài)存儲區(qū):用來存儲程序中的全局變量和局部變量。棧區(qū):程序運(yùn)行時用來存放臨時數(shù)據(jù),可以用來保存函數(shù)調(diào)用時的現(xiàn)場和返回地址,也可以用來存放形式參數(shù)變量和自動局部變量等。堆區(qū):是一個自由存儲區(qū)域,程序通過C語言的動態(tài)存儲分配函數(shù)來使用它,用于存儲鏈表等。棧和堆的內(nèi)容是動態(tài)變化的,因此也稱為動態(tài)存儲區(qū)。數(shù)據(jù)可以存放在動態(tài)存儲區(qū)和靜態(tài)存儲區(qū),變量的存儲相應(yīng)地可以分為動態(tài)存儲類型和靜態(tài)存儲類型。由于全局變量可以供程序中所有函數(shù)使用,所以全局變量的值需要在整個運(yùn)行期間進(jìn)

52、行保存,全部變量應(yīng)該安排在靜態(tài)存儲區(qū)內(nèi)。局部變量可以放在靜態(tài)存儲區(qū)內(nèi),也可以放在棧區(qū)。一個變量屬于靜態(tài)存儲還是動態(tài)存儲,并不能僅從其作用域來看,還應(yīng)該考慮其存儲類別說明。整理ppt47在C語言中,變量的存儲類別如表4-1所示。表4-1 變量存儲類別auto自動變量動態(tài)存儲方式register寄存器變量extern 外部變量靜態(tài)存儲方式static靜態(tài)變量下面詳細(xì)介紹上述4種存儲類別。 1auto自動變量auto的變量類型為動態(tài)存儲變量,其一般形式為:auto 數(shù)據(jù)類型 變量名;例如:auto int a;函數(shù)中的變量如果不做特殊說明,系統(tǒng)都是動態(tài)地分配內(nèi)存空間,數(shù)據(jù)存儲在動態(tài)存儲區(qū)中,函數(shù)的形

53、參和在函數(shù)中定義的變量都屬于此類。在調(diào)用變量時系統(tǒng)為其分配內(nèi)存空間,在函數(shù)調(diào)用結(jié)束后自動釋放內(nèi)存空間,這類變量為自動變量。auto只能用來說明函數(shù)體內(nèi)的局部變量,不能說明形參、全局變量。函數(shù)中的形參雖然不用auto來說明,但是形參也是auto類型變量。函數(shù)被調(diào)用運(yùn)行期是該函數(shù)自動局部變量的生存期。自動局部變量的有限生存期可以節(jié)省內(nèi)存單元,而且使函數(shù)獨立性增強(qiáng)。變量類型為auto時,auto也可以省略,省略是默認(rèn)為auto類型。整理ppt48 2registerregister定義的變量值存放在CPU的寄存器中,而不像普通的變量存儲在內(nèi)存單元中。使用寄存器來存儲變量的速度比使用普通變量快得多,這

54、時因為寄存器變量實際上存儲在CPU中,不需訪問內(nèi)存來確定和修改其值。存儲其變量的定義形式為:register 數(shù)據(jù)類型 變量名;例如:register int a;寄存器變量可以提高數(shù)據(jù)的讀取速度,以提高程序的運(yùn)行效率。不過,有的編譯系統(tǒng)可以忽略寄存器存儲類型修飾符,直接把register變量當(dāng)成自動變量處理,在內(nèi)存中給其分配內(nèi)存單元,而不把數(shù)據(jù)放在存儲器中;并且現(xiàn)在計算機(jī)的運(yùn)行速度越來越快,性能越來越高,優(yōu)化的編譯器能夠自動識別使用比較頻繁的變量,將其放在寄存器中,而不需要程序員的指定。因此,register類型的變量在實際應(yīng)用中使用不多,這里只要了解即可。整理ppt49 3externex

55、tern 類型說明符可以用來擴(kuò)展外部變量的作用域。在不加任何說明的情況下,聲明全局變量的作用域只能從定義開始,到變量所在的文件結(jié)束為止,如果要把作用范圍擴(kuò)展到其他文件或文件的其他區(qū)域,則需要定義外部變量,即extern 類型的變量。extern 類型的變量定義形式為:extern 變量名;【案例4-16】 外部變量的使用。在同一個工程中創(chuàng)建兩個文件,分別命名為file1和file2。file1的代碼:#include int a;void main() int power(int n); int b=3,c,d,m; scanf(%d,%d,&a,&m); c=a*b; pri

56、ntf(%d*%d=%dn,a,b,c); d=power(m); printf(%d%d=%dn,a,m,d);file2的代碼:extern a;int power(int n) int i,y=1; for(i=1;i=n;i+) y*=a; return y;整理ppt50程序運(yùn)行結(jié)果如下:2,32*3=623=8案例4-16在file1中定義了變量a,變量a的作用域為整個file1文件。文件file2中使用extern a聲明將a的作用域又?jǐn)U展到了file2中。這樣a在file2中同樣有效。程序先通過接收鍵盤輸入將a的值賦為2,然后調(diào)用power函數(shù),power函數(shù)中有對a進(jìn)行處理的

57、語句,語句中a的值也為2。同理,函數(shù)也可以使用外部聲明擴(kuò)展作用范圍,如案例4-16也使用了外部函數(shù)power,外部函數(shù)的聲明可以省略關(guān)鍵字extern整理ppt514static類型static 有以下兩個作用。(1)把未用auto 說明的局部變量的存儲方式由動態(tài)存儲方式改為靜態(tài)存儲方式,即改變其生存周期。前面介紹到,如果一個局部變量定義為auto 類型或者未說明類型,則默認(rèn)為動態(tài)存儲方式存儲,函數(shù)調(diào)用時為其分配內(nèi)存空間,函數(shù)結(jié)束后自動消失。但是如果函數(shù)的局部變量聲明為static 類型,則該變量即變?yōu)殪o態(tài)存儲類型,稱為靜態(tài)局部變量,該變量是在變量定義時就分配內(nèi)存空間,并且一直存在,直到整個程

58、序執(zhí)行結(jié)束。靜態(tài)局部變量的作用域仍和動態(tài)局部變量相同,即只能在定義該變量的函數(shù)內(nèi)使用,退出該函數(shù)之后,盡管該變量還繼續(xù)存在,但是不能使用。如果再次調(diào)用該函數(shù),則可以繼續(xù)使用該變量,并且保留上次調(diào)用該函數(shù)結(jié)束時該變量的值。如果一個變量聲明為static 類型,且在定義時未給其賦初值,則系統(tǒng)自動為其賦初使值為0。整理ppt52【案例4-17】 靜態(tài)局部變量和動態(tài)局部變量的比較。#include int fun1() int x=0; x+; return x;int fun2() static int y=0; y+; return y;void main() int i; printf(fun1

59、:t); for(i=0;i5;i+) printf(%dt,fun1(); printf(n); printf(fun2:t); for(i=0;i5;i+) printf(%dt,fun2(); printf(n);整理ppt53程序運(yùn)行結(jié)果為:fun1: 1 1 1 1 1fun2: 1 2 3 4 5fun1和fun2中分別定義了一個靜態(tài)局部變量和動態(tài)局部變量,比較函數(shù)fun1和函數(shù)fun2的5次運(yùn)行結(jié)果可以看出,每次fun1運(yùn)行時,fun1的返回值不變,這時因為每次fun1運(yùn)行開始時為x 分別存儲空間并賦初值,fun1運(yùn)行結(jié)束后就釋放內(nèi)存空間,所以每次運(yùn)行x 的值不變;而fun2中y

60、 為靜態(tài)局部變量,編輯時即分配內(nèi)存空間并賦初值,每次運(yùn)行fun2時y 的值保持為上次fun2運(yùn)行結(jié)束時y 的值,所以連續(xù)5次運(yùn)行fun2時返回的值分別為1、2、3、4、5。(2)使全局變量的作用域無法擴(kuò)展到其他文件中。前面介紹過使用extern可以將一個文件中的全局變量擴(kuò)展到其他文件中,但是為了保成程序的獨立性,并不希望一個文件中定義的變量可以讓其他文件任意使用,這樣就可以使用static來完成,即在定義一個變量時加上static修飾符,那么該變量就只能在當(dāng)前文件中使用?!景咐?-18】 用static改變?nèi)肿兞孔饔糜颉ile 中代碼如下:#include void a();void b();void main() extern int num; num=7; a(); b();整理ppt54file1中代碼如下:#include int num;void a() printf(n,num);file2中代碼如下:#

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論