




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、10001004100810201036第6章數(shù)組6.1怎樣定義和引用一維數(shù)組6.1.1怎樣定義一維數(shù)組一般格式:類型數(shù)組名常量表達(dá)式;如:int a10;說(shuō)明:(1)數(shù)組名的命名規(guī)則遵循C語(yǔ)言的標(biāo)識(shí)符;(2)常量表達(dá)式,用來(lái)指定該數(shù)組中元素的個(gè)數(shù),也就是該數(shù)組的長(zhǎng)度。該長(zhǎng)度必須在這里是一個(gè)常量表達(dá)式(數(shù)字常量、符號(hào)常量),不能是變量。由于前面已經(jīng)指定了類型,指定了元素個(gè)數(shù)后,該數(shù)組一共占用的空間大小就確定 了,口:上例,a是int型,每個(gè)int型在VC中占4字節(jié),而后面又定義了 10 個(gè)元素,所以,a共占用了 4*10=40個(gè)字節(jié)的空間;(3)可以使用sizeof運(yùn)算來(lái)求出某個(gè)數(shù)組占用了多少
2、空間;特別強(qiáng)調(diào),其中常量表達(dá)式不能是變量,如:int n=10;int an;/錯(cuò)誤,因?yàn)閚是變量#defi ne N 10int bN;/正確,因?yàn)镹是符號(hào)常量int cN+3;/正確的,因?yàn)镹+3是常量表達(dá)式對(duì)于以下定義:int a10;那么,系統(tǒng)就會(huì)在內(nèi)存中劃出一片存儲(chǔ)空間,女口右圖:顯然,每個(gè)元素在內(nèi)存中都是連續(xù)的,從而可以 根據(jù)上一個(gè)元素的地址,來(lái)計(jì)算出下一個(gè)元素的地址, 假設(shè)a的第0個(gè)元素存在1000地址上,那么,a5的 地址:Add(a0)+5*4=1020。而對(duì) ai的地址:Add(ai)=Add(a0+i*4)(4)數(shù)組定義后,元素的排列是從a0開(kāi)始的,因此定義的int a1
3、0 中, 只有a0a9,并不存在a10這個(gè)元素。(5)數(shù)組定義后,其中的每個(gè)元素的值都是不確定的(就是不知道值為多 少,也可以說(shuō)是隨機(jī)的),如果想要在定義時(shí)就有初值,可以有兩種方法:方法一:用static來(lái)修飾,那么,該數(shù)組中的每個(gè)元素都會(huì)被初始化為0:static int b10;/數(shù)組b中的10個(gè)元素每個(gè)值都是0int a10;/數(shù)組a中的10個(gè)元素值不確定方法二:在定義時(shí),同時(shí)給出值,如:int c10=1,2,3;/ 給出了 3 個(gè)值如果所給的值比數(shù)組元素少,那么后面的每個(gè)元素都會(huì)自動(dòng)初始化成0,如上面的 c 數(shù)組,后面的 c3c9 都是 0(6)前面第 4 點(diǎn)說(shuō)了,定義的 a10 的
4、元素是從 a0a9 ,沒(méi)有 a10 這 個(gè)元素,如果在程序中引用了 a10,實(shí)際上是一種“越界錯(cuò)誤”,但是在VC中, 一般還發(fā)現(xiàn)不了。6.1.2 怎樣引用一維數(shù)組元素引用一維數(shù)組元素最常用的方法就是: 數(shù)組名 下標(biāo)如上面定義的:int a10=1,2,3; 現(xiàn)在要引用第 2 個(gè)數(shù): a2=123;還可以有別的引用方式:(1)引用時(shí),下標(biāo)可以是變量: for(i=0;i10;i+)ai=2*i;其中的 ai 就是引用;(2) 可以仿照后面的指針進(jìn)行引用,如要引用a5 元素: *(a+5)=345;6.1.3 一維數(shù)組的初始化一維數(shù)組的通常初始化方式:( 1 )在定義數(shù)組時(shí),全部數(shù)組元素賦予初值,
5、如:int a10=1,2,3,4,5,6,7,8,9,10;如果給出了所有的元素的值, 那么, 在定義時(shí)元素的個(gè)數(shù)可以省略, 如上面 的a,后面已經(jīng)給了 10個(gè)元素的值,那么可以省略10:int a =1,2,3,4,5,6,7,8,9,10;(2)可以只給數(shù)組中的一部分元素賦初值,如:int a10=1,2,3;只給了 3 個(gè)元素的值,那么后面所有的元素全部取為 0(3)如果想給數(shù)組每個(gè)元素都取為 0, 可以寫為:int a10=0;6.1.4 一維數(shù)組應(yīng)用舉例Eg6.1 :通常引用一維數(shù)組的方式,就是用一個(gè) for 循環(huán),如:int a10;int i;/ 要對(duì) a 進(jìn)行賦初值,可以用一
6、個(gè) for 循環(huán)進(jìn)行: for(i=0;i10;i+)/i 是從 0 開(kāi)始,到 9 結(jié)束,用的是 10,不能用 =10ai=2*i;/如果要用戶輸入10個(gè)元素進(jìn)行賦初值,可以用scanffor(i=0;i=0;i-)ai=2*i;/要處理數(shù)組a,實(shí)際上只能對(duì)a中的元素一個(gè)一個(gè)進(jìn)行,無(wú)法進(jìn)行整體操 作,如:for(i=0;i10;i+)ai=ai*2;/輸出數(shù)組,也是一個(gè)元素一個(gè)元素進(jìn)行輸出,通常也是用一個(gè) for :for(i=0;i10;i+)printf(%5d,ai);/每個(gè)元素占5個(gè)位置,從而在屏幕上對(duì)齊Eg6.2 :已知有一個(gè)數(shù)組a如下:int a10=1,2,3,4,5,6,7,8
7、,9,10;現(xiàn)在要將a數(shù)組逆置,就是原來(lái)a0的值變成a9的值等。方法一:再定義一個(gè)數(shù)組b,其大小與a相同,將a中的元素反過(guò)來(lái)賦值給 b,從而b就達(dá)到了 a的逆置,再將a拷貝回去即可。如下圖所示:0123456789123456789100123456789b那么b0的值來(lái)自于a9,而b3的值來(lái)自于a6,ai的值來(lái)自 于b9-i,這樣,可以編程如下:for(i=0;i10;i+)bi=a9-i;再將b拷回去:for(i=0;i10;i+)ai=bi;方法二:不需要數(shù)組b,直接在a中進(jìn)行,實(shí)際上只需要讓a0與a9進(jìn) 行交換,a1與a8進(jìn)行交換,ai與a9-i進(jìn)行交換便可,注意這個(gè)交換只能交換一次,
8、不能重復(fù)交換,也就是說(shuō),要控制循環(huán)的次數(shù),對(duì)于10個(gè)元素來(lái)說(shuō),只要交換5對(duì)元素,對(duì)于有n個(gè)元素來(lái)說(shuō),要交換n/2對(duì)元素:int t;for(i=0;i=5;j-) aj+1=aj;用變量表示,n表示原來(lái)數(shù)組a中的元素個(gè)數(shù),k表示要插入的元素位置, 可得:for(j=n-1;j=k;j-) aj+1=aj;最后一步,就是將元素x插入到ak位置上去:ak=x;完整的代碼如下:void mai n()int a20=49,27,36,58,64,19,72,86,31;int n=9;/數(shù)組a中原來(lái)有9個(gè)數(shù)int k=5;/向第k個(gè)位置中插入元素xint x=99;/欲插入的元素值int i,j;p
9、rintf(n插入前,數(shù)組 a:);for(i=0;i =k;j-)/從ak這個(gè)元素開(kāi)始,每個(gè)元素向后挪動(dòng)一個(gè)位置,注意要從后往前開(kāi)始挪動(dòng)aj+1=aj;ak=x;/元素x插入到ak中。n+;/元素個(gè)數(shù)加1printf(n插入手,數(shù)組 a:);for(i=0;i n ;i+)prin tf(%5d,ai);putchar(n);Eg6.4 :刪除:從數(shù)組中指定位置刪除一個(gè)元素,如,原來(lái)的數(shù)組a:int a20=49,27,36,58,64,19,72,86,31;現(xiàn)在要?jiǎng)h除a中的第5個(gè)位置的元素19,效果如下:a20=49,27,36,58,64,19,72,86,31;01234567891
10、9492736586419728631012345678919492736586472863131顯然,需要挪動(dòng)的元素個(gè)數(shù)為:9-5-1 (原來(lái)數(shù)組中元素個(gè)數(shù)-要插入的位置 -1 ),這些元素應(yīng)該是:a6、a7、a8這3個(gè)元素,就是先將a6移動(dòng)到a5, 再將a7移動(dòng)到a6上,以此類推,aj應(yīng)該移動(dòng)到aj-1個(gè)位置上去,可得 如下的程序段:for(j=k+1;j n ;j+)aj-1=aj;n-;Eg6.5 :用數(shù)組求Fibonacci數(shù)列問(wèn)題,打印出前20個(gè)元素,并求和Fibonacci 數(shù)列是:1,1,2,3,5,8,顯然,可以讓a0=1,a1=1,從a2開(kāi)始,每個(gè)元素都為前面兩個(gè)元素的和,
11、也就是說(shuō),ai=ai-1+ai-2; 這個(gè)i應(yīng)該從2開(kāi)始到19結(jié)束??删幊倘缦拢篿nt a30;int i,sum=0;a0=1;a1=1;sum+=a0+a1;for(i=2;i20;i+) ai=ai-1+ai-2; sum+=ai;printf(”前 20 個(gè) Fibonacci 數(shù)列為:n);for(i=0;ia10-a20-a30-a40-a11-a21-a39-a49那么在這種存放方式下,a27的地址=1000+(7*5+2)*4 也就是說(shuō), aij 的地址 Add(aij)=1000+(j*5+i)*46.1.2 怎樣引用二維數(shù)組引用二維數(shù)組需要給出行下標(biāo)和列下標(biāo)來(lái),如:a23=
12、123;6.1.3 二維數(shù)組的初始化(1 )在定義時(shí)進(jìn)行:int a35=1,2,3,4,5, 6,7,8,9,10, 11,12,13,14,15;(2)在定義時(shí),也可以只用一個(gè)大括號(hào):int a35=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15(3)也可以在定義時(shí),只給某些元素賦初值,如:int a35=1,2,6,11,12,13,14;那么,像 a02 、a13 等元素的初值系統(tǒng)會(huì)自動(dòng)取為 0(4)還可以在定義時(shí),只給某些行取初值:int a35=1,2,11,12,13,14;則第 1 行中的所有元素全部取為 0(5)如果給初值時(shí),已經(jīng)明確給出了幾行,那么定
13、義時(shí)行號(hào)可以省略,如: int a 5=1,2,6, 11,12,13,14;已經(jīng)明確給了 3行的值,那么行數(shù) 3可以省略(6) 如果將所有的元素全部給了值,且不是用若干個(gè) 來(lái)表示行,也可以 省略行號(hào),如:int a 5=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15因?yàn)橐呀?jīng)給了 15 個(gè)元素,且每行有 5 個(gè)元素,那么系統(tǒng)會(huì)自動(dòng)取 3 行,但 是,如果給的不是 15個(gè)元素,而是 17個(gè)元素,那么系統(tǒng)知道,應(yīng)該取 4 行,且 后面的 3 個(gè)元素自動(dòng)取為 0.(7) 如果在定義時(shí),沒(méi)有取初值,那么可以在程序用一般用一個(gè)二重循環(huán) 進(jìn)行賦值,如:int a510;int i,
14、j;for(i=0;i5;i+)/04 行for(j=0;j10;j+)/09 列aij=i+j;(8) 在輸出一個(gè)二維數(shù)組時(shí),通常會(huì)每行占一行,就是說(shuō),需要控制輸出 格式:for(i=0;i5;i+)/04 行for(j=0;j10;j+)/09 列printf(%5d,aij);putchar(n); / 換行6.1.4 二維數(shù)組應(yīng)用舉例Eg6.8 用二維數(shù)組輸出楊輝三角,所謂楊輝三角,就是每個(gè)元素都等于其 上一行的對(duì)應(yīng)元素及其前一元素的和:111121133 1146 4 11510 10 5 1可以用二維數(shù)組實(shí)現(xiàn),第0行不用,且每行的第 0列也不用,從第 1行開(kāi)始, 第 1 列取為 1
15、 ,然后后面每個(gè)元素均為前一行的對(duì)應(yīng)元素的和,如:aij=ai-1j+ai-1j-1且第 i 行應(yīng)該有 i 個(gè)元素,可得下圖:int a2020=0; / 全部初始化為 0int i,j;a11=1;for(i=2;i=10;i+)for(j=1;j=i;j+)/第i行,只需要計(jì)算i個(gè)元素aij=ai-1j+ai-1j-1;/下面開(kāi)始打印這個(gè)楊輝三角for(i=1;i=10;i+)for(j=1;j=i;j+)prin tf(%7d,aij);putchar(n);8000000000010011001210013310000012364570123456789Eg 6.9用二維數(shù)組計(jì)算矩陣:
16、(1)矩陣的查找(2)矩陣的和(3)矩陣的積(4)行列互換先看查找,從一個(gè)二維數(shù)組中,查找一個(gè)指定的值(最大值、最小值、指定 的元素值等),如有如下的二維數(shù)組:int a34=49,56,23,64,78,61,19,41,23,38,88,97;則最大值為97,其位置為:第2行的第3個(gè)最小值為19,位置為第1行的第2個(gè)仍然可以使用二維數(shù)組,先假定 a00是最大值maxint max,l_max_i,l_max_j;/ 分別表示最大值及其位置max=a00;l_max_i=0;l_max_j=0;for(i=0;i3;i+)for(j=0;jmax) max=aij; l_max_i=i; l
17、_max_j=j;如果要找 x=78:int l_x_i,l_x_j;int x=78;int flag=0;/ 先假定沒(méi)找到for(i=0;i3;i+)for(j=0;j4;j+)if(aij=x)l_x_i=i;l_x_j=j;flag=1;break;if(flag=1)break; / 已經(jīng)找到,直接退出該循環(huán)if(flag=1)/ 找到了,輸出相應(yīng)的信息else/ 沒(méi)找到,此時(shí)的 l_x_i 和 l_x_j 沒(méi)有意義6.3 字符數(shù)組在定義一維數(shù)組時(shí),如果類型為 char 型,那么這個(gè)一維數(shù)組就是是字符數(shù) 組,如:int a10;char s10;字符數(shù)組與int型數(shù)組沒(méi)有本質(zhì)的區(qū)別,
18、與int型數(shù)組類似,可以進(jìn)行上面 的操作。但是,字符數(shù)組如果在末尾加一個(gè)0之后,該字符數(shù)組就有更多的應(yīng)用。如:char s120=Chi nese;char s220=C,h,i, n,e,s,e;char s3 = C,h,i, n,e,s,e;char s47= C,h,i, n,e,s,e;char s58= C,h,i, n,e,s,e;char s6 =Chi nese;其中s3沒(méi)有指定數(shù)組的大小,系統(tǒng)會(huì)自動(dòng)去數(shù)后面的數(shù)(7個(gè)),那么,S3 就取成7個(gè)char型大小,所以s3與s4是等價(jià)的。對(duì)于s5來(lái)說(shuō),后面只有7個(gè)字符,但是前面大小為8,則有一個(gè)a7沒(méi)有 初值,系統(tǒng)會(huì)自動(dòng)取為0,所以s5相當(dāng)于:char s58= C,h,i, n,e,s,e,0;對(duì)于s2來(lái)說(shuō),大小為20個(gè)元素,顯然,后面有13個(gè)0:chars220=C,h,i, n,e,s,e,0,0,0,0,0,0,0,0,0
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 風(fēng)力發(fā)電機(jī)組偏航系統(tǒng)運(yùn)行特性分析和故障分析研究
- 飲水有益健康室內(nèi)體育課
- 激發(fā)性益生元對(duì)肉雞生長(zhǎng)性能和腸道健康的影響
- 黏膜相關(guān)淋巴組織(MALT)的診斷和治療
- 創(chuàng)業(yè)教育實(shí)踐體系構(gòu)建
- 音樂(lè)教學(xué)之路
- 幼兒園常規(guī)區(qū)域環(huán)境創(chuàng)設(shè)
- 初中勞動(dòng)技術(shù)課說(shuō)課課件
- VSLRGDTRG-acetate-生命科學(xué)試劑-MCE
- 交通設(shè)備制造業(yè)數(shù)字化轉(zhuǎn)型中的智能制造系統(tǒng)應(yīng)用案例分析
- 文創(chuàng)產(chǎn)品銷售合同
- 小學(xué)安全工作臺(tái)帳范本
- 纖維繩索 有關(guān)物理和機(jī)械性能的測(cè)定
- 碳中和技術(shù)概論全套教學(xué)課件
- 廣西保險(xiǎn)銷售從業(yè)人員銷售資質(zhì)分級(jí)測(cè)試題庫(kù)(含答案)
- 【人教版】八年級(jí)化學(xué)上冊(cè)期末測(cè)試卷(含答案)
- 基礎(chǔ)護(hù)理學(xué)第七版題附有答案
- 2024中汽中心校園招聘筆試參考題庫(kù)含答案解析
- 監(jiān)理業(yè)務(wù)手冊(cè)范本
- 精神活性物質(zhì)所致精神障礙病人的護(hù)理查房
- 消防工程消防器材供應(yīng)方案
評(píng)論
0/150
提交評(píng)論