《C語(yǔ)言程序設(shè)計(jì)及應(yīng)用》課件第8章數(shù)組_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)及應(yīng)用》課件第8章數(shù)組_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)及應(yīng)用》課件第8章數(shù)組_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)及應(yīng)用》課件第8章數(shù)組_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)及應(yīng)用》課件第8章數(shù)組_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第8章 數(shù) 組 8.1 一維數(shù)組8.2 二維數(shù)組8.3 字符數(shù)組8.4 一維數(shù)組和指針8.5 二維數(shù)組和指針8.6 字符串和指針8.7 向函數(shù)傳遞數(shù)組8.8 指針數(shù)組及帶參main函數(shù)8.9 應(yīng)用舉例8.1 一維數(shù)組8.1.1 一維數(shù)組的定義8.1.2 一維數(shù)組元素的引用8.1.3 一維數(shù)組的初始化8.1.1 一維數(shù)組的定義數(shù)組是一組相關(guān)的存儲(chǔ)單元,這些存儲(chǔ)單元具有相同的名字和數(shù)據(jù)類型。要引用數(shù)組的某個(gè)特定的存儲(chǔ)單元(元素)需要說明數(shù)組名和該特定元素在數(shù)組中的序號(hào)。在數(shù)組名后用方括號(hào)括起特定元素的序號(hào)。此序號(hào)一般稱為“下標(biāo)”,下標(biāo)必須是一個(gè)整型數(shù)或整型表達(dá)式。8.1.1 一維數(shù)組的定義數(shù)組的第

2、一個(gè)元素都是第0號(hào)元素,一般地說,Ci-1引用了數(shù)組C的第i個(gè)元素。數(shù)組C的數(shù)據(jù)結(jié)構(gòu)如右圖所示。 8.1.1 一維數(shù)組的定義在C語(yǔ)言中使用數(shù)組必須先進(jìn)行定義。 一維數(shù)組的定義方式為:類型說明符 數(shù)組名 常量表達(dá)式;其中:“類型說明符”是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型?!皵?shù)組名”是用戶定義的數(shù)組標(biāo)識(shí)符。方括號(hào)中的“常量表達(dá)式”表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長(zhǎng)度。8.1.1 一維數(shù)組的定義對(duì)于數(shù)組類型說明應(yīng)注意以下幾點(diǎn): (1)數(shù)組的類型實(shí)際上是指數(shù)組元素的取值類型。 (2)數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定.(3)數(shù)組名不能與其他變量名相同。(4)方括號(hào)中常量表達(dá)式表示數(shù)組元素的個(gè)數(shù).

3、(5)不能在方括號(hào)中用變量來(lái)表示元素的個(gè)數(shù),但是可以是符號(hào)常量或常量表達(dá)式。(6)允許在同一個(gè)類型說明中,說明多個(gè)數(shù)組和多個(gè)變量。8.1.2 一維數(shù)組元素的引用 數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素的一般形式為:數(shù)組名下標(biāo) 其中下標(biāo)只能為整型常量或整型表達(dá)式。如為小數(shù)時(shí),C編譯將自動(dòng)取整。數(shù)組元素通常也稱為下標(biāo)變量。必須先定義數(shù)組,才能使用下標(biāo)變量。 在C語(yǔ)言中只能逐個(gè)地使用下標(biāo)變量,而不能一次引用整個(gè)數(shù)組。8.1.2 一維數(shù)組元素的引用 【例8-1】main() int i,a10; /*定義一維數(shù)組*/ for(i=0;i=0;i-) printf(%d ,ai); /*打印出一維數(shù)組*

4、/【例8-1】程序運(yùn)行結(jié)果如下圖所示。8.1.2 一維數(shù)組元素的引用 【例8-2】main() int i,a10; /*定義一維數(shù)組*/ for(i=0;i=0;i-) printf(%d,ai); /*打印出一維數(shù)組*/ 【例8-2】程序運(yùn)行結(jié)果如下圖所示。8.1.2 一維數(shù)組元素的引用 【例8-3】main() int i,a10; /*定義一維數(shù)組*/ for(i=0;i10;) ai+=2*i+1; /*給一維數(shù)組賦值*/ for(i=0;i=9;i+)printf(%d ,ai); /*打印出一維數(shù)組*/ printf(n%d %dn,a5.2,a5.8);8.1.2 一維數(shù)組元素

5、的引用 【例8-3】程序運(yùn)行結(jié)果如下圖所示。8.1.3 一維數(shù)組的初始化 數(shù)組初始化賦值是指在數(shù)組定義時(shí)給數(shù)組元素賦予初值。數(shù)組初始化是在編譯階段進(jìn)行的。初始化賦值的一般形式為:類型說明符 數(shù)組名常量表達(dá)式=值,值值; 其中在 中的各數(shù)據(jù)值即為各元素的初值,各值之間用逗號(hào)間隔。8.1.3 一維數(shù)組的初始化 C語(yǔ)言對(duì)數(shù)組的初始化賦值還有以下幾點(diǎn)規(guī)定:(1)可以只給部分元素賦初值。 當(dāng) 中值的個(gè)數(shù)少于元素個(gè)數(shù)時(shí),只給前面部分元素賦值。(2)只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。(3)如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個(gè)數(shù)。8.1.3 一維數(shù)組的初始化 【例8-4】main()

6、 int i,max,a10; printf(input 10 numbers:n); for(i=0;i10;i+) scanf(“%d”,&ai); /*逐個(gè)輸入10個(gè)數(shù)到數(shù)組a中*/ max=a0; for(i=1;imax) max=ai; /*比較最大值*/ printf(maxmum=%dn,max); /*輸出最大值*/8.1.3 一維數(shù)組的初始化 【例8-4】程序運(yùn)行結(jié)果如下圖所示。8.1.3 一維數(shù)組的初始化 【例8-5】main() int i,j,p,q,s,a10; printf(n input 10 numbers:n); for(i=0;i10;i+) scanf(

7、“%d”,&ai); /*輸入10個(gè) 元素的初值*/ for(i=0;i10;i+) /*開始排序*/ p=i;q=ai; for(j=i+1;j10;j+) if(qaj) p=j;q=aj; /*一次循環(huán)結(jié)束后,p即為最大元素的下標(biāo)*/ if(i!=p)8.2 二維數(shù)組 8.2.1 二維數(shù)組的定義8.2.2 二維數(shù)組元素的引用8.2.3 二維數(shù)組的初始化8.2.1 二維數(shù)組的定義多維數(shù)組元素有多個(gè)下標(biāo),以標(biāo)識(shí)它在數(shù)組中的位置,所以也稱為多下標(biāo)變量。 二維數(shù)組定義的一般形式是: 類型說明符 數(shù)組名常量表達(dá)式1常量表達(dá)式2 其中常量表達(dá)式1表示第一維下標(biāo)的長(zhǎng)度,常量表達(dá)式2表示第二維下標(biāo)的長(zhǎng)度

8、。 二維數(shù)組在概念上是二維的。在C語(yǔ)言中,二維數(shù)組是按行排列的。 8.2.2 二維數(shù)組元素的引用 二維數(shù)組的元素也稱為雙下標(biāo)變量,其表示的形式為:數(shù)組名下標(biāo)下標(biāo) 其中下標(biāo)應(yīng)為整型常量或整型表達(dá)式?!纠?-6】一個(gè)學(xué)習(xí)小組有5個(gè)人,每個(gè)人有三門課的考試成績(jī),如下頁(yè)的表所示。求全組分科的平均成績(jī)和各科總平均成績(jī)。8.2.2 二維數(shù)組元素的引用 編程如下:main() int i,j,s=0,average,v3,a53; /*定義數(shù)組*/ printf(input scoren); for(i=0;i3;i+) for(j=0;j5;j+) scanf(“%d”,&aji); /*依次讀入某一門課

9、程的各個(gè)學(xué)生的成績(jī)*/ s=s+aji; /*累加成績(jī)*/ vi=s/5; s=0; 8.2.2 二維數(shù)組元素的引用 average =(v0+v1+v2)/3; /*計(jì)算平均分*/ printf(math:%dnc languag:%dndbase:%dn,v0,v1,v2); printf(total:%dn, average );【例8-6】程序運(yùn)行結(jié)果如下圖所示。8.2.3 二維數(shù)組的初始化 二維數(shù)組初始化也是在類型說明時(shí)給各下標(biāo)變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。 例如對(duì)數(shù)組a53:(1)按行分段賦值可寫為:int a53= 80,75,92,61,65,71,5

10、9,63,70,85,87,90,76,77,85 ;(2)按行連續(xù)賦值可寫為:int a53= 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;這兩種賦初值的結(jié)果是完全相同的。8.2.3 二維數(shù)組的初始化 【例8-7】main() int i,j,s=0, average,v3; int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;/*定義二維數(shù)組,并賦值*/ for(i=0;i3;i+) for(j=0;j5;j+) s=s+aji; /*累加成績(jī)*/ vi=s/5; s=0; 8.2.3 二維

11、數(shù)組的初始化 average=(v0+v1+v2)/3; /*計(jì)算平均分*/ printf(math:%dnc languag:%dndbase:%dn,v0,v1,v2); printf(total:%dn, average); 【例8-7】程序運(yùn)行結(jié)果如下圖所示。8.2.3 二維數(shù)組的初始化 對(duì)于二維數(shù)組初始化賦值還有以下說明:(1)可以只對(duì)部分元素賦初值,未賦初值的元素自動(dòng)取0值。(2)如對(duì)全部元素賦初值,則第一維的長(zhǎng)度可以不給出。(3)數(shù)組是一種構(gòu)造類型的數(shù)據(jù)。二維數(shù)組可以看作是由一維數(shù)組的嵌套而構(gòu)成的。 8.3.1 字符數(shù)組的定義和使用1. 字符數(shù)組的定義 用來(lái)存放字符量的數(shù)組稱為字

12、符數(shù)組。2. 字符數(shù)組的初始化 字符數(shù)組也允許在定義時(shí)作初始化賦值。3. 字符數(shù)組的引用 可以引用字符數(shù)組中的一個(gè)元素,得到一個(gè)字符。8.3.1 字符數(shù)組的定義和使用 printf(n); 【例8-8】程序運(yùn)行結(jié)果如下圖所示。8.3.2 字符串和字符數(shù)組 1. 字符串和字符串結(jié)束標(biāo)志 在C語(yǔ)言中沒有專門的字符串變量,通常用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串。已說明過字符串總是以“0”作為串的結(jié)束符。 C語(yǔ)言允許用字符串的方式對(duì)數(shù)組作初始化賦值。 結(jié)束標(biāo)志 “0”是由C編譯系統(tǒng)自動(dòng)加上的。2. 字符串?dāng)?shù)組的輸入輸出 除了上述用字符串賦初值的辦法外,還可用printf函數(shù)和scanf函數(shù)一次性輸出輸入一

13、個(gè)字符數(shù)組中的字符串。8.3.2 字符串和字符數(shù)組 【例8-9】main() char c=BASICndBASE; printf(%sn,c); 【例8-9】程序運(yùn)行結(jié)果如下圖所示。8.3.2 字符串和字符數(shù)組 【例8-10】main() char st15; printf(input string:n); scanf(%s,st); printf(%sn,st);【例8-10】程序運(yùn)行結(jié)果如圖8-15所示。8.3.3 常用字符串處理函數(shù) 3. 字符串連接函數(shù)strcat格式:strcat (字符數(shù)組名1,字符數(shù)組名2)功能:把“字符數(shù)組2”中的字符串連接到“字符數(shù)組1”中字符串的后面,并刪

14、去字符串1后的串標(biāo)志“0”。本函數(shù)返回值是字符數(shù)組1的首地址。8.3.3 常用字符串處理函數(shù) 4. 字符串拷貝函數(shù)strcpy格式:strcpy (字符數(shù)組名1,字符數(shù)組名2)功能:把“字符數(shù)組2”中的字符串拷貝到“字符數(shù)組1”中。串結(jié)束標(biāo)志“0”也一同拷貝。“字符數(shù)組2”也可以是一個(gè)字符串常量。 8.3.3 常用字符串處理函數(shù) 5. 字符串比較函數(shù)strcmp格式:strcmp(字符數(shù)組名1,字符數(shù)組名2)功能:按照ASCII碼順序比較兩個(gè)數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。字符串1字符串2,返回值0。字符串1字符串2,返回值0。字符串1字符串2,返回值0。本函數(shù)也可用于比較兩個(gè)字符

15、串常量,或比較數(shù)組和字符串常量。8.3.3 常用字符串處理函數(shù) 6. 測(cè)字符串長(zhǎng)度函數(shù)strlen格式: strlen(字符數(shù)組名)功能:測(cè)字符串的實(shí)際長(zhǎng)度(不含字符串結(jié)束標(biāo)志“0”)并作為函數(shù)返回值。8.4 一維數(shù)組和指針 8.4.1 指向一維數(shù)組的指針變量8.4.2 通過指針引用數(shù)組元素8.4.1 指向一維數(shù)組的指針變量一個(gè)數(shù)組是由連續(xù)的一塊內(nèi)存單元組成的。數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址。每個(gè)數(shù)組元素按其類型不同占有幾個(gè)連續(xù)的內(nèi)存單元。一個(gè)數(shù)組元素的首地址也是指它所占有的幾個(gè)內(nèi)存單元的首地址。所謂數(shù)組的指針是指數(shù)組的起始地址,數(shù)組元素的指針是數(shù)組元素的地址。數(shù)組指針變量說明的一般形式為

16、:類型說明符 *指針變量名; 其中類型說明符表示所指數(shù)組的類型。 8.4.1 指向一維數(shù)組的指針變量例如:int a10; /*定義a為包含10個(gè)整型數(shù)據(jù)的數(shù)組*/int *p; /*定義p為指向整型變量的指針*/下面是對(duì)指針變量賦值: p=&a0; 把a(bǔ)0元素的地址賦給指針變量p。如下圖所示。8.4.2 通過指針引用數(shù)組元素 C語(yǔ)言規(guī)定:如果指針變量p已指向數(shù)組中的一個(gè)元素,則p+1指向同一數(shù)組中的下一個(gè)元素。引用一個(gè)數(shù)組元素可以用:(1)下標(biāo)法,即用ai形式訪問數(shù)組元素。(2)指針法,即采用*(a+i)或*(p+i)形式,用間接訪問的方法來(lái)訪問數(shù)組元素,其中a是數(shù)組名,p是指向數(shù)組的指針變

17、量,其值為p=a。8.4.2 通過指針引用數(shù)組元素 【例8-18】輸出數(shù)組中的全部元素(下標(biāo)法)。main() int a10,i; for(i=0;i10;i+) ai=i; /*給數(shù)組元素賦值*/ for(i=0;i10;i+) printf(“a%d=%dn”,i,ai); /*輸出數(shù) 組中的元素*/8.4.2 通過指針引用數(shù)組元素 【例8-18】程序運(yùn)行結(jié)果如下圖所示。 8.4.2 通過指針引用數(shù)組元素 【例8-19】輸出數(shù)組中的全部元素(通過數(shù)組名計(jì)算元素的地址,找出元素的值)。main() int a10,i; for(i=0;i10;i+) *(a+i)=i; /*給數(shù)組元素賦值

18、*/ for(i=0;i10;i+) printf(“a%d=%dn”,i,*(a+i); /*輸出數(shù) 組中的元素*/8.4.2 通過指針引用數(shù)組元素 【例8-19】程序運(yùn)行結(jié)果如下圖所示。8.4.2 通過指針引用數(shù)組元素 【例8-20】輸出數(shù)組中的全部元素。(用指針變量指向元素)main() int a10,i,*p; p=a; for(i=0;i10;i+) *(p+i)=i; /*給數(shù)組元素賦值*/ for(i=0;i10;i+) printf(“a%d=%dn”,i,*(p+i); /*輸出數(shù) 組中的元素*/8.4.2 通過指針引用數(shù)組元素 【例8-20】程序運(yùn)行結(jié)果如下圖所示。8.4

19、.2 通過指針引用數(shù)組元素 【例8-21】main() int a10,i,*p=a; for(i=0;i10;) *p=i; /*給數(shù)組元素賦值*/ printf(a%d=%dn,i+,*p+); /*輸出數(shù)組中的元素*/ 8.4.2 通過指針引用數(shù)組元素 【例8-21】程序運(yùn)行結(jié)果如下圖所示。8.4.2 通過指針引用數(shù)組元素 幾個(gè)注意的問題:(1)指針變量可以實(shí)現(xiàn)本身的值的改。(2)要注意指針變量的當(dāng)前值。 (3)指針變量可以指到數(shù)組以后的內(nèi)存單元,系統(tǒng)并不認(rèn)為非法。(4)*p+,由于+和*同優(yōu)先級(jí),結(jié)合方向自右而左,等價(jià)于*(p+)。(5)*(p+)與*(+p)作用不同。若p的初值為a,

20、則*(p+)等價(jià)a0,*(+p)等價(jià)a1。(6)(*p)+表示p所指向的元素值加1。(7)如果p當(dāng)前指向a數(shù)組中的第i個(gè)元素,則:*(p-)相當(dāng)于ai-。*(+p)相當(dāng)于a+i。*(-p)相當(dāng)于a-i。8.5 二維數(shù)組和指針 8.5.1 二維數(shù)組元素的地址8.5.2 指向二維數(shù)組元素的指針變量8.5.1 二維數(shù)組元素的地址設(shè)有整型二維數(shù)組a34如下:0 1 2 34 5 6 78 9 10 11 它的定義為: int a34=0,1,2,3,4,5,6,7,8,9,10,118.5.1 二維數(shù)組元素的地址 設(shè)數(shù)組a的首地址為1000,各下標(biāo)變量的首地址及其值如下圖所示。8.5.1 二維數(shù)組元素

21、的地址C語(yǔ)言允許把一個(gè)二維數(shù)組分解為多個(gè)一維數(shù)組來(lái)處理。因此數(shù)組a可分解為三個(gè)一維數(shù)組,即a0、a1、a2。每一個(gè)一維數(shù)組又含有四個(gè)元素。如下圖所示。例如a0數(shù)組,含有a00、a01、a02、a03四個(gè)元素。8.5.1 二維數(shù)組元素的地址ai、&ai、*(a+i)和a+i都是等同的。 另外,如下圖所示。還可得出ai+j則是一維數(shù)組ai的j號(hào)元素首地址,它等于&aij,8.5.2 指向二維數(shù)組元素的指針變量 二維數(shù)組指針變量說明的一般形式為: 類型說明符 (*指針變量名)長(zhǎng)度 其中:“類型說明符”為所指數(shù)組的數(shù)據(jù)類型?!?”表示其后的變量是指針類型?!伴L(zhǎng)度”表示二維數(shù)組分解為多個(gè)一維數(shù)組時(shí),一維

22、數(shù)組的長(zhǎng)度,也就是二維數(shù)組的列數(shù)。 8.5.2 指向二維數(shù)組元素的指針變量 【例8-25】main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int(*p)4; /*指向二維數(shù)組元素的指針變量*/ int i,j; p=a; for(i=0;i3;i+)for(j=0;j4;j+)printf(%2d,*(*(p+i)+j);/*通過指針變量讀取二維數(shù)組元素*/printf(n);8.5.2 指向二維數(shù)組元素的指針變量 【例8-25】程序運(yùn)行結(jié)果如下圖所示。 8.6 字符串和指針 8.6.1 指向字符串常量的指針變量8.6.2 字符串常量指針變量與字符數(shù)組的區(qū)別

23、8.6.1 指向字符串常量的指針變量 在C語(yǔ)言中,可以用兩種方法訪問一個(gè)字符串。1. 用字符數(shù)組存放一個(gè)字符串,然后輸出該字符串。【例8-26】main() char string=“I love China! ”;/*用字符數(shù)組存放一個(gè)字符串*/ printf(%sn,string);8.6.1 指向字符串常量的指針變量【例8-26】程序運(yùn)行結(jié)果如下田間所示。 string是數(shù)組名,它代表字符數(shù)組的首地址,如下頁(yè)的圖示。8.6.1 指向字符串常量的指針變量8.6.1 指向字符串常量的指針變量【例8-27】main() char *string=“I love China! ”;/*用字符串指

24、針指向一個(gè)字符串*/ printf(%sn,string);【例8-27】程序運(yùn)行結(jié)果如下圖所示。2. 用字符串指針指向一個(gè)字符串8.6.1 指向字符串常量的指針變量對(duì)指向字符變量的指針變量應(yīng)賦予該字符變量的地址。例如: char c,*p=&c;表示p是一個(gè)指向字符變量c的指針變量。而: char *s=C Language; 則表示s是一個(gè)指向字符串的指針變量。把字符串的首地址賦予s。8.6.1 指向字符串常量的指針變量【例8-28】輸出字符串中n個(gè)字符后的所有字符。main() char *ps=“this is a book”; /*用字符串指針指向一個(gè)字符串*/ int n=10;

25、ps=ps+n;/*跳過前n個(gè)字符*/ printf(%sn,ps);【例8-28】程序運(yùn)行結(jié)果如下圖所示。8.6.2 字符串常量指針變量與字符數(shù)組的區(qū)別 (1)字符串指針變量本身是一個(gè)變量,用于存放字符串的首地址。 字符串本身是存放在以該首地址為首的一塊連續(xù)的內(nèi)存空間中并以“0”作為串的結(jié)束。 字符數(shù)組是由若干個(gè)數(shù)組元素組成的,它可用來(lái)存放整個(gè)字符串。8.6.2 字符串常量指針變量與字符數(shù)組的區(qū)別 (2)對(duì)字符串指針方式:char *ps=C Language;可以寫為:char *ps;ps=C Language;而對(duì)數(shù)組方式:static char st =C Language;不能寫為

26、:char st20;st=C Language;而只能對(duì)字符數(shù)組的各元素逐個(gè)賦值。同時(shí)也可看出使用指針變量更加方便。 8.7 向函數(shù)傳遞數(shù)組 8.7.1 值傳遞方式與地址傳遞方式8.7.2 數(shù)組名做函數(shù)參數(shù)8.7.1 值傳遞方式與地址傳遞方式在值傳遞方式中,要在數(shù)組參數(shù)的尾部加上一對(duì)方括號(hào),調(diào)用函數(shù)時(shí)只需將數(shù)組的地址(即數(shù)組名)傳遞給函數(shù)。在值傳遞方式中,數(shù)組將被復(fù)制一份。在地址傳遞方法中,傳遞給函數(shù)的是指向初始數(shù)組的指針。在地址傳遞過程中,只需在函數(shù)原形中將函數(shù)的參數(shù)說明為指向數(shù)組元素?cái)?shù)據(jù)類型的一個(gè)指針。8.7.1 值傳遞方式與地址傳遞方式【例8-34】 #include void con

27、st_func(const int*); void main(void); void main(void) int x10; int y; for(y=0;y10;y+) xy=y; const_func(x); /*將數(shù)組的地址傳遞給函數(shù)*/ void const_func(const int*i) /*參數(shù)const int*告訴編譯程序const_funt()函數(shù)只有一個(gè)參數(shù)*/8.7.1 值傳遞方式與地址傳遞方式 int y; for(y=0;y10;y+) printf(%dn,*(i+y); /*輸出數(shù)組元素值*/ 【例8-34】程序運(yùn)行結(jié)果如下圖所示。8.7.2 數(shù)組名做函數(shù)參數(shù)

28、 數(shù)組名可以作函數(shù)的實(shí)參和形參。如:main()int array10; f(array,10); f(int arr,int n); 8.7.2 數(shù)組名做函數(shù)參數(shù) array為實(shí)參數(shù)組名,arr為形參數(shù)組名。數(shù)組名就是數(shù)組的首地址,實(shí)參向形參傳送數(shù)組名實(shí)際上就是傳送數(shù)組的地址,形參得到該地址后也指向同一數(shù)組。如右圖所示為數(shù)組名和數(shù)組首地址示意圖。8.7.2 數(shù)組名做函數(shù)參數(shù) 歸納起來(lái),如果有一個(gè)實(shí)參數(shù)組,想在函數(shù)中改變此數(shù)組的元素的值,實(shí)參與形參的對(duì)應(yīng)關(guān)系有以下種:(1)形參和實(shí)參都是數(shù)組名。(2)實(shí)參用數(shù)組,形參用指針變量。(3)實(shí)參、形參都用指針變量。(4)實(shí)參為指針變量,形參為數(shù)組名。

29、8.8 指針數(shù)組及帶參main函數(shù) 8.8.1 指針數(shù)組的定義和作用8.8.2 main函數(shù)的參數(shù)8.8.1 指針數(shù)組的定義和作用一個(gè)數(shù)組的元素值為指針則是指針數(shù)組。指針數(shù)組是一組有序的指針的集合。指針數(shù)組的所有元素都必須是具有相同存儲(chǔ)類型和指向相同數(shù)據(jù)類型的指針變量。 指針數(shù)組說明的一般形式為:類型說明符 *數(shù)組名數(shù)組長(zhǎng)度 其中類型說明符為指針值所指向的變量的類型。8.8.1 指針數(shù)組的定義和作用【例8-42】main()int a33=1,2,3,4,5,6,7,8,9;int *p=a0; int i; for(i=0;i3;i+) /*用循環(huán)語(yǔ)句輸出指定的數(shù)組元素*/ printf(%

30、d,%d,%dn,ai2-i,*ai,*(*(a+i)+i); for(i=0;i1) printf(“%sn”,*+argv); /*顯示命令行中輸入的參數(shù)*/ 本例是顯示命令行中輸入的參數(shù)。如果上例的可執(zhí)行文件名為e24.exe,存放在A驅(qū)動(dòng)器的盤內(nèi)。因此輸入的命令行為:C:a:e24 BASIC foxpro FORTRAN 8.8.2 main函數(shù)的參數(shù) 則【例8-47】運(yùn)行結(jié)果為:BASICfoxproFORTRAN8.9 應(yīng)用舉例 【例8-48】設(shè)有N個(gè)雜亂無(wú)序的整數(shù),要求將這N個(gè)數(shù)從小到大排序后輸出(利用冒泡排序?qū)崿F(xiàn))。編程思路: 設(shè)有N個(gè)雜亂無(wú)序的整數(shù),要求將這N個(gè)數(shù)從小到大排

31、序后輸出。假設(shè)N=5: 冒泡排序的基本思想是:(1)將5個(gè)雜序無(wú)章的數(shù)放入一數(shù)組a中。(2)從a0到a4,將相鄰的兩個(gè)數(shù)依次兩兩進(jìn)行比較。 8.9 應(yīng)用舉例 (3)在第(2)步中每次比較過程中,如果前一個(gè)數(shù)比后一個(gè)數(shù)大,則兩個(gè)數(shù)進(jìn)行交換;否則,保持原來(lái)的順序。 (4)重復(fù)算法的第(2)(3)步,將a0至a3各數(shù)依次兩兩進(jìn)行比較,其中最大的數(shù)調(diào)到a3中;下圖給出了各趟的比較結(jié)果和最后排序結(jié)果,如下圖所示。8.9 應(yīng)用舉例 源程序:#include stdio.h #define N 5void main() int i,j,t,aN; for(i=0;iN;i+) printf(Enter No

32、.%2d:,i+1); /*輸入n個(gè)整數(shù)*/ scanf(%d,&ai); 8.9 應(yīng)用舉例 for(i=0;iN-1;i+) /*進(jìn)行冒泡排序*/ for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; 8.9 應(yīng)用舉例 for(i=0;iN;i+) printf(%d,ai); printf( ); 【例8-48】程序運(yùn)行結(jié)果如下圖所示。8.9 應(yīng)用舉例 【例8-49】瑟夫問題 M個(gè)人圍成一圈,從第一個(gè)人開始依次從1至N循環(huán)報(bào)數(shù),每當(dāng)報(bào)數(shù)為N時(shí)此人出圈,直到圈中只剩下一個(gè)人為止。請(qǐng)按退出次序輸出出圈人原來(lái)的編號(hào)以及留在圈中的最后一個(gè)人原來(lái)的編號(hào)(用遞歸方法實(shí)現(xiàn))。下圖是個(gè)實(shí)例:其中M=10、N=2。8.9 應(yīng)用舉例 編程思路:例8-49流程圖如右圖所示。8.9 應(yīng)用舉例 eliminate()函數(shù)結(jié)構(gòu)解析:(1)函數(shù)參數(shù):

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論