第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第1頁(yè)
第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第2頁(yè)
第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第3頁(yè)
第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第4頁(yè)
第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩103頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)

7.2怎樣定義函數(shù)7.3調(diào)用函數(shù)7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型7.5函數(shù)的嵌套調(diào)用

7.6函數(shù)的遞歸調(diào)用7.7數(shù)組作為函數(shù)參數(shù)

7.8局部變量和全局變量7.9變量的存儲(chǔ)方式和生存期7.10關(guān)于變量的聲明和定義7.11內(nèi)部函數(shù)和外部函數(shù)7.1為什么要用函數(shù)問(wèn)題:如果程序的功能比較多,規(guī)模比較大,把所有代碼都寫(xiě)在main函數(shù)中,就會(huì)使主函數(shù)變得龐雜、頭緒不清,閱讀和維護(hù)變得困難有時(shí)程序中要多次實(shí)現(xiàn)某一功能,就需要多次重復(fù)編寫(xiě)實(shí)現(xiàn)此功能的程序代碼,這使程序冗長(zhǎng),不精煉7.1為什么要用函數(shù)解決的方法:用模塊化程序設(shè)計(jì)的思路采用“組裝”的辦法簡(jiǎn)化程序設(shè)計(jì)的過(guò)程事先編好一批實(shí)現(xiàn)各種不同功能的函數(shù)把它們保存在函數(shù)庫(kù)中,需要時(shí)直接用7.1為什么要用函數(shù)解決的方法:用模塊化程序設(shè)計(jì)的思路函數(shù)就是功能每一個(gè)函數(shù)用來(lái)實(shí)現(xiàn)一個(gè)特定的功能函數(shù)的名字應(yīng)反映其代表的功能7.1為什么要用函數(shù)在設(shè)計(jì)一個(gè)較大的程序時(shí),往往把它分為若干個(gè)程序模塊,每一個(gè)模塊包括一個(gè)或多個(gè)函數(shù),每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次7.1為什么要用函數(shù)一個(gè)較大的程序可分為若干個(gè)程序模塊,每一個(gè)模塊用來(lái)實(shí)現(xiàn)一個(gè)特定的功能。在高級(jí)語(yǔ)言中用子程序?qū)崿F(xiàn)模塊的功能。子程序由函數(shù)來(lái)完成。一個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成。由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次。函數(shù)間的調(diào)用關(guān)系7.1為什么要用函數(shù)可以使用庫(kù)函數(shù)可以使用自己編寫(xiě)的函數(shù)在程序設(shè)計(jì)中要善于利用函數(shù),可以減少重復(fù)編寫(xiě)程序段的工作量,同時(shí)可以方便地實(shí)現(xiàn)模塊化的程序設(shè)計(jì)7.1為什么要用函數(shù)例7.1輸出以下的結(jié)果,用函數(shù)調(diào)用實(shí)現(xiàn)。******************Howdoyoudo!****************** main() { PrintStar(); PrintMessage(); PrintStar(); } PrintStar() { printf(“**********\n”); } PrintMessage() { printf(“Hello\n”); }PrintStar函數(shù)PrintMessage函數(shù)main函數(shù)主函數(shù)兩個(gè)自定義函數(shù)**********Hello**********7.2怎樣定義函數(shù)7.2.1為什么要定義函數(shù)7.2.2定義函數(shù)的方法7.2.1為什么要定義函數(shù)C語(yǔ)言要求,在程序中用到的所有函數(shù),必須“先定義,后使用”指定函數(shù)名字、函數(shù)返回值類型、函數(shù)實(shí)現(xiàn)的功能以及參數(shù)的個(gè)數(shù)與類型,將這些信息通知編譯系統(tǒng)。7.2.1為什么要定義函數(shù)指定函數(shù)的名字,以便以后按名調(diào)用指定函數(shù)類型,即函數(shù)返回值的類型指定函數(shù)參數(shù)的名字和類型,以便在調(diào)用函數(shù)時(shí)向它們傳遞數(shù)據(jù)指定函數(shù)的功能。這是最重要的,這是在函數(shù)體中解決的7.2.1為什么要定義函數(shù)對(duì)于庫(kù)函數(shù),程序設(shè)計(jì)者只需用#include指令把有關(guān)的頭文件包含到本文件模塊中即可程序設(shè)計(jì)者需要在程序中自己定義想用的而庫(kù)函數(shù)并沒(méi)有提供的函數(shù)7.2.2定義函數(shù)的方法函數(shù)定義的一般形式 類型符函數(shù)名(形式參數(shù)說(shuō)明表) { 說(shuō)明部分 語(yǔ)句部分

}函數(shù)首部函數(shù)體intadd(intx,inty){ intsum; sum=x+y; returnsum;}完整的函數(shù)定義無(wú)參函數(shù)定義空函數(shù)定義intread(){ intx; scanf(“%d”,&x); returnx;}

dummy(){};[例7.2]實(shí)參和形參voidmain(){ inta=15,b=20,c; c=max(a+10,b); printf(“Max=%d”,c);}intmax(intx,inty){ intz; z=x>y?x:y; returnz;}main函數(shù)max函數(shù)形參實(shí)參15a20bczxy252025257.3調(diào)用函數(shù)7.3.1函數(shù)調(diào)用的形式7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞7.3.3函數(shù)調(diào)用的過(guò)程7.3.4函數(shù)的返回值7.3.1函數(shù)調(diào)用的形式函數(shù)調(diào)用的一般形式函數(shù)名(實(shí)參表)如果是調(diào)用無(wú)參函數(shù),則實(shí)參表可以沒(méi)有,但括號(hào)不能省略。如果實(shí)參表包含多個(gè)實(shí)參,則各參數(shù)之間用逗號(hào)隔開(kāi)。實(shí)參與形參的個(gè)數(shù)應(yīng)相等,類型應(yīng)一致。實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。如:

p=power(2.5,4); /*ok*/ q=power(2.5,3.8); /*error*/ s=power(2.5); /*error*/ t=power(5,3); /*ok*/函數(shù)調(diào)用的方式1.函數(shù)語(yǔ)句:即把函數(shù)調(diào)用作為一個(gè)語(yǔ)句。如:

printStar(); printf(“***********”);

這時(shí)不要求函數(shù)帶回值,只要求完成一定的操作,通常將函數(shù)字義為“void”類型。2.函數(shù)表達(dá)式:函數(shù)出現(xiàn)在可以寫(xiě)表達(dá)式的地方,此時(shí)需要的是函數(shù)的值。如:c=2*max(a,b);printf(“%d”,max(a,b));7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞1.形式參數(shù)和實(shí)際參數(shù)在調(diào)用有參函數(shù)時(shí),主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系定義函數(shù)時(shí)函數(shù)名后面的變量名稱為“形式參數(shù)”(簡(jiǎn)稱“形參”)主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面參數(shù)稱為“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”)實(shí)際參數(shù)可以是常量、變量或表達(dá)式7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞2.實(shí)參和形參間的數(shù)據(jù)傳遞在調(diào)用函數(shù)過(guò)程中,系統(tǒng)會(huì)把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參或者說(shuō),形參從實(shí)參得到一個(gè)值該值在函數(shù)調(diào)用期間有效,可以參加被調(diào)函數(shù)中的運(yùn)算7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞

例7.3輸入兩個(gè)整數(shù),要求輸出其中值較大者。要求用函數(shù)來(lái)找到大數(shù)。先編寫(xiě)max函數(shù):intmax(intx,inty){intz;z=x>y?x:y;return(z);}7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞在max函數(shù)上面,再編寫(xiě)主函數(shù)#include<stdio.h>intmain(){intmax(intx,inty);inta,b,c;printf(“twointegernumbers:");scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}實(shí)參可以是常量、變量或表達(dá)式7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞

c=max(a,b);(main函數(shù))intmax(intx,inty)(max函數(shù)){intz;z=x>y?x:y;return(z);}7.3.3函數(shù)調(diào)用的過(guò)程在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元。在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)max的形參被臨時(shí)分配內(nèi)存單元。2a3bxy23實(shí)參形參7.3.3函數(shù)調(diào)用的過(guò)程調(diào)用結(jié)束,形參單元被釋放實(shí)參單元仍保留并維持原值,沒(méi)有改變?nèi)绻趫?zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值發(fā)生改變,不會(huì)改變主調(diào)函數(shù)的實(shí)參的值2a3bxy23實(shí)參形參7.3.4.函數(shù)的返回值通常,在調(diào)用一個(gè)函數(shù)時(shí),都希望被調(diào)函數(shù)能返回一個(gè)確定的值。這就是函數(shù)的返回值。函數(shù)的返回值是通過(guò)返回語(yǔ)句return實(shí)現(xiàn)的,返回語(yǔ)句的形式為:

return;或return表達(dá)式;前一種形式,函數(shù)返回值是不確定的,這時(shí)調(diào)用者一般對(duì)返回值不感興趣,同時(shí)將函數(shù)說(shuō)明成void類型。后一種形式,函數(shù)要把“表達(dá)式”的值返回給調(diào)用者。7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需要具備如下條件:(1)被調(diào)用函數(shù)必須是已經(jīng)定義的函數(shù)(是庫(kù)函數(shù)或用戶自己定義的函數(shù))(2)如果使用庫(kù)函數(shù),應(yīng)該在本文件開(kāi)頭加相應(yīng)的#include指令(3)如果使用自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)后面,應(yīng)該聲明對(duì)被調(diào)函數(shù)的聲明

voidmain() {inta=10,b=20,c;c=max(a,b); printf(“%d\n”,c); } intmax(intx,inty) {returnx>y?x:y; }怎樣使這些信息正確呢?C編譯系統(tǒng)假定:

1、函數(shù)名:max2、函數(shù)類型:int根據(jù)掃描得知:

3、有兩個(gè)參數(shù)

4、每一個(gè)參數(shù)的類型均為int該函數(shù)與已知信息相符。floatfloatfloatfloat%f由于類型的變化,使該函數(shù)與已知信息不相符。這句有錯(cuò)誤!float函數(shù)聲明有三種格式:格式1:函數(shù)類型函數(shù)名(形參說(shuō)明表);格式2:函數(shù)類型函數(shù)名(形參類型表);格式3:函數(shù)類型函數(shù)名();如:intmax(intx,inty);intmax(int,int);intmax();例7.4求最大值函數(shù)原型#include<stdio.h>floatmax(floatx,floaty){returnx>y?x:y;}main(){ floata=10,b=20,c; c=max(a,b); printf("%f\n",c);}①②④⑥⑦保存:返回地址當(dāng)前現(xiàn)場(chǎng)③恢復(fù):主調(diào)程序現(xiàn)場(chǎng)返回地址⑤main()調(diào)fun()結(jié)束fun()返回圖7.1函數(shù)調(diào)用的過(guò)程練習(xí):1.計(jì)算n!的數(shù)學(xué)定義為: 請(qǐng)編寫(xiě)函數(shù)fact()求n!。2.在上題基礎(chǔ)上編寫(xiě)函數(shù)求。m與n通過(guò)鍵盤(pán)輸入,注意判斷m與n的關(guān)系。7.5函數(shù)的嵌套調(diào)用C語(yǔ)言不能嵌套定義函數(shù),但可以嵌套調(diào)用函數(shù),也就是說(shuō),在調(diào)用一個(gè)函數(shù)的過(guò)程中,又調(diào)用另一個(gè)函數(shù)。7.5函數(shù)的嵌套調(diào)用

例7.5輸入4個(gè)整數(shù),找出其中最大的數(shù)。用函數(shù)的嵌套調(diào)用來(lái)處理。解題思路:main中調(diào)用max4函數(shù),找4個(gè)數(shù)中最大者max4中再調(diào)用max2,找兩個(gè)數(shù)中的大者max4中多次調(diào)用max2,可找4個(gè)數(shù)中的大者,然后把它作為函數(shù)值返回main函數(shù)main函數(shù)中輸出結(jié)果#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數(shù)對(duì)max4

函數(shù)聲明輸入4個(gè)整數(shù)調(diào)用后肯定是4個(gè)數(shù)中最大者輸出最大者intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)對(duì)max2

函數(shù)聲明a,b中較大者a,b,c中較大者a,b,c,d中最大者intmax2(inta,intb){if(a>=b)returna;elsereturnb;}找a,b中較大者return(a>b?a:b);intmax4(inta,intb,intc,intd){intmax2(inta,intb);ruturnmax2(max2(max2(a,b),c),d);}intmax2(inta,intb){return(a>b?a:b);}#include<stdio.h>intmain(){……max=max4(a,b,c,d);……}7.6函數(shù)的遞歸調(diào)用在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。C語(yǔ)言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用。7.6函數(shù)的遞歸調(diào)用

例7.6有5個(gè)學(xué)生坐在一起問(wèn)第5個(gè)學(xué)生多少歲?他說(shuō)比第4個(gè)學(xué)生大2歲問(wèn)第4個(gè)學(xué)生歲數(shù),他說(shuō)比第3個(gè)學(xué)生大2歲問(wèn)第3個(gè)學(xué)生,又說(shuō)比第2個(gè)學(xué)生大2歲問(wèn)第2個(gè)學(xué)生,說(shuō)比第1個(gè)學(xué)生大2歲最后問(wèn)第1個(gè)學(xué)生,他說(shuō)是10歲請(qǐng)問(wèn)第5個(gè)學(xué)生多大age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18

回溯階段

遞推階段結(jié)束遞歸的條件#include<stdio.h>intmain(){intage(intn);printf("NO.5,age:%d\n",age(5));return0;}

intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}age(5)輸出age(5)mainc=age(4)+2age函數(shù)n=5c=age(3)+2age函數(shù)n=4c=age(1)+2age函數(shù)n=2c=age(2)+2age函數(shù)n=3c=10age函數(shù)n=1age(1)=10age(2)=12age(3)=14age(4)=16age(5)=1818例7.7用遞歸方法求n!。#include<stdio.h>intmain(){intfac(intn);intn;inty;printf("inputanintegernumber:");scanf("%d",&n);y=fac(n);printf("%d!=%d\n",n,y);return0;}intfac(intn){intf;if(n<0) printf("n<0,dataerror!");elseif(n==0||n==1) f=1;elsef=fac(n-1)*n;return(f);}注意溢出fac(5)輸出fac(5)mainf=fac(4)×5fac函數(shù)n=5f=fac(3)×4fac函數(shù)n=4f=fac(1)×2fac函數(shù)n=2f=fac(2)×3fac函數(shù)n=3f=1fac函數(shù)n=1fac(1)=1fac(2)=2fac(3)=6fac(4)=24fac(5)=120120

例7.8Hanoi(漢諾)塔問(wèn)題。古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A、B、C,開(kāi)始時(shí)A座上有64個(gè)盤(pán)子,盤(pán)子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤(pán)子從A座移到C座,但規(guī)定每次只允許移動(dòng)一個(gè)盤(pán),且在移動(dòng)過(guò)程中在3個(gè)座上都始終保持大盤(pán)在下,小盤(pán)在上。在移動(dòng)過(guò)程中可以利用B座。要求編程序輸出移動(dòng)一盤(pán)子的步驟。ABCABC……將63個(gè)從A到B第1個(gè)和尚的做法……ABC將63個(gè)從A到B第1個(gè)和尚的做法……ABC將1個(gè)從A到C第1個(gè)和尚的做法……ABC將1個(gè)從A到C第1個(gè)和尚的做法……ABC將63個(gè)從B到C第1個(gè)和尚的做法……ABC將63個(gè)從B到C第1個(gè)和尚的做法ABC……將62個(gè)從A到C第2個(gè)和尚的做法ABC……將62個(gè)從A到C第2個(gè)和尚的做法ABC……將1個(gè)從A到B第2個(gè)和尚的做法ABC……將1個(gè)從A到B第2個(gè)和尚的做法ABC……將62個(gè)從C到B第2個(gè)和尚的做法ABC……將62個(gè)從C到B第2個(gè)和尚的做法第3個(gè)和尚的做法第4個(gè)和尚的做法第5個(gè)和尚的做法第6個(gè)和尚的做法第7個(gè)和尚的做法……第63個(gè)和尚的做法第64個(gè)和尚僅做:將1個(gè)從A移到CABC將3個(gè)盤(pán)子從A移到C的全過(guò)程將2個(gè)盤(pán)子從A移到BABC將3個(gè)盤(pán)子從A移到C的全過(guò)程將2個(gè)盤(pán)子從A移到BABC將3個(gè)盤(pán)子從A移到C的全過(guò)程將1個(gè)盤(pán)子從A移到CABC將3個(gè)盤(pán)子從A移到C的全過(guò)程將1個(gè)盤(pán)子從A移到CABC將3個(gè)盤(pán)子從A移到C的全過(guò)程將2個(gè)盤(pán)子從B移到CABC將3個(gè)盤(pán)子從A移到C的全過(guò)程將2個(gè)盤(pán)子從B移到CABC將2個(gè)盤(pán)子從A移到B的過(guò)程將1個(gè)盤(pán)子從A移到CABC將2個(gè)盤(pán)子從A移到B的過(guò)程將1個(gè)盤(pán)子從A移到CABC將2個(gè)盤(pán)子從A移到B的過(guò)程將1個(gè)盤(pán)子從A移到BABC將2個(gè)盤(pán)子從A移到B的過(guò)程將1個(gè)盤(pán)子從A移到BABC將2個(gè)盤(pán)子從A移到B的過(guò)程將1個(gè)盤(pán)子從C移到BABC將2個(gè)盤(pán)子從A移到B的過(guò)程將1個(gè)盤(pán)子從C移到BABC將2個(gè)盤(pán)子從B移到C的過(guò)程ABC將2個(gè)盤(pán)子從B移到C的過(guò)程ABC將2個(gè)盤(pán)子從B移到C的過(guò)程ABC將2個(gè)盤(pán)子從B移到C的過(guò)程由上面的分析可知:將n個(gè)盤(pán)子從A座移到C座可以分解為以下3個(gè)步驟:(1)將A上n-1個(gè)盤(pán)借助C座先移到B座上(2)把A座上剩下的一個(gè)盤(pán)移到C座上(3)將n-1個(gè)盤(pán)從B座借助于A座移到C座上#include<stdio.h>intmain(){voidhanoi(intn,charone,chartwo,charthree);intm;printf(“thenumberofdiskes:");scanf("%d",&m);printf("move%ddiskes:\n",m);

hanoi(m,'A','B','C');}voidhanoi(intn,charone,chartwo,charthree){voidmove(charx,chary);if(n==1)

move(one,three);else{hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);}}voidmove(charx,chary){printf("%c-->%c\n",x,y);}7.7數(shù)組作為函數(shù)參數(shù)7.7.1數(shù)組元素作函數(shù)實(shí)參7.7.2數(shù)組名作函數(shù)參數(shù)7.7.3多維數(shù)組名作函數(shù)參數(shù)7.7.1數(shù)組元素作函數(shù)實(shí)參

例7.8輸入10個(gè)數(shù),要求輸出其中值最大的元素和該數(shù)是第幾個(gè)數(shù)。#include<stdio.h>intmain(){intmax(intx,inty);inta[10],m,n,i;printf(“10integernumbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(i=1,m=a[0],n=0;i<10;i++){if(max(m,a[i])>m) {m=max(m,a[i]); n=i; }}printf(“l(fā)argestnumberis%d\n",m);printf(“%dthnumber.\n“,n+1);}intmax(intx,inty){return(x>y?x:y);}7.7.2數(shù)組名作函數(shù)參數(shù)除了可以用數(shù)組元素作為函數(shù)參數(shù)外,還可以用數(shù)組名作函數(shù)參數(shù)(包括實(shí)參和形參)用數(shù)組元素作實(shí)參時(shí),向形參變量傳遞的是數(shù)組元素的值用數(shù)組名作函數(shù)實(shí)參時(shí),向形參

傳遞的是數(shù)組首元素的地址7.7.2數(shù)組名作函數(shù)參數(shù)

例7.9有一個(gè)一維數(shù)組score,內(nèi)放10個(gè)學(xué)生成績(jī),求平均成績(jī)。#include<stdio.h>intmain(){floataverage(floatarray[10]);

floatscore[10],aver;inti;printf("input10scores:\n");for(i=0;i<10;i++)scanf("%f",&score[i]);printf("\n");aver=average(score);printf("%5.2f\n",aver);return0;}定義實(shí)參數(shù)組floataverage(float

array[10]){inti;floataver,sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);}定義形參數(shù)組相當(dāng)于score[0]相當(dāng)于score[i]

例7.10用選擇法對(duì)數(shù)組中10個(gè)整數(shù)按由小到大排序。a[0]a[1]a[2]a[3]a[4]36194

16394

1

3694

1

3

496

1

3

4

69小到大排序#include<stdio.h>intmain(){voidsort(intarray[],intn);inta[10],i;printf("enterarray:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);

sort(a,10);printf("Thesortedarray:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");return0;}voidsort(intarray[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j; t=array[k];

array[k]=array[i];

array[i]=t; }}在sort[i]~sort[9]中,最小數(shù)與sort[i]對(duì)換7.7.3多維數(shù)組名作函數(shù)參數(shù)

例7.11有一個(gè)3×4的矩陣,求所有元素中的最大值。#include<stdio.h>intmain(){intmax_value(intarray[][4]);inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf(“Maxvalueis%d\n”,

max_value(a));return0;}可以省略不能省略要與形參數(shù)組第二維大小相同intmax_value(intarray[][4]){inti,j,max;max=array[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(array[i][j]>max)max=array[i][j];return(max);}要與實(shí)參數(shù)組第二維大小相同7.8局部變量和全局變量7.8.1局部變量7.8.2全局變量7.8.1局部變量定義變量可能有三種情況:在函數(shù)的開(kāi)頭定義在函數(shù)內(nèi)的復(fù)合語(yǔ)句內(nèi)定義在函數(shù)的外部定義全局和局部變量charch;doublefun2(charc){ floatb;

…… ch=c;}intx;main(){ intm,n;

……}在函數(shù)內(nèi)部說(shuō)明的變量是局部變量。作用域:自說(shuō)明位置起至函數(shù)結(jié)束止。在函數(shù)外部說(shuō)明的變量是全局部變量。作用域:自說(shuō)明位置起至文件結(jié)束止。cbm,nchx在定義一個(gè)變量時(shí),除了指定其數(shù)據(jù)類型外,還可以指定其存儲(chǔ)類別。C語(yǔ)言中用四個(gè)關(guān)鍵字來(lái)表示存儲(chǔ)類別:auto————自動(dòng)的register———寄存器的static ———靜態(tài)的extern———外部的局部變量全局變量7.8.1局部變量自動(dòng)變量(auto)intf(inta){ autointb,c=3; ……}自動(dòng)變量在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)分配:當(dāng)函數(shù)(或分程序)執(zhí)行時(shí)為自動(dòng)變量分配存儲(chǔ)空間;當(dāng)函數(shù)(或分程序)結(jié)束時(shí)釋放自動(dòng)變量所占的存儲(chǔ)空間。auto關(guān)鍵字可以省略。寄存器變量(register)intf(inta){ registerinti; ……}寄存器變量存在于CPU的寄存器中:當(dāng)函數(shù)(或分程序)執(zhí)行時(shí)為寄存器變量分配寄存器;當(dāng)函數(shù)(或分程序)結(jié)束時(shí)釋放寄存器變量所占用的寄存器。自動(dòng)變量與寄存器變量之間的區(qū)別自動(dòng)變量main(){

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論