




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
算法與數(shù)據(jù)結(jié)構(gòu)任課教師:戴韡
1一維數(shù)組的定義和引用
問題:有如下幾組數(shù)據(jù),它們分別該如何存儲(chǔ)呢?
是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合。
數(shù)組一個(gè)班學(xué)生的學(xué)習(xí)成績一行文字一個(gè)矩陣這些數(shù)據(jù)的特點(diǎn)是:1、具有相同的數(shù)據(jù)類型2、使用過程中需要保存原始數(shù)據(jù)C語言為這些數(shù)據(jù),提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)組。
1、一維數(shù)組的定義格式為:類型說明符數(shù)組名[常量表達(dá)式];例如:inta[10];
它表示定義了一個(gè)整形數(shù)組,數(shù)組名為a,此數(shù)組有10個(gè)元素。一維數(shù)組的定義2、說明:〔1〕數(shù)組名定名規(guī)那么和變量名相同,遵循標(biāo)識(shí)符定名規(guī)那么?!?〕在定義數(shù)組時(shí),需要指定數(shù)組中元素的個(gè)數(shù),方括弧中的常量表達(dá)式用來表示元素的個(gè)數(shù),即數(shù)組長度。例如,指定a[10],表示a數(shù)組有10個(gè)元素,注意下標(biāo)是從0開始的,這10個(gè)元素是,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。請持別注意,按上面的定義,不存在數(shù)組元素a[10]?!?〕常量表達(dá)式中可以包括常量和符號(hào)常量,但不能包含變量。也就是說,C語言不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義,即數(shù)組的大小不依賴于程序運(yùn)行過程中變量的值。例如,下面這樣定義數(shù)組是不行的:寶寶數(shù)學(xué)很好,2歲就可以從1數(shù)到10了。后來,我告訴他0比1還小。
今天吃餃子,我說:“寶寶,你數(shù)數(shù)你想吃幾個(gè)餃子?〞
“0,1,2,3。〞一邊說著一邊拿起一個(gè)餃子,“這是第0個(gè)。〞
老婆怒吼:“下一代還是做程序員的命!〞舉例:
intn;scanf(“%d″,&n);/*在程序中臨時(shí)輸入數(shù)組的大小*/inta[n];
①floata[0]; /*數(shù)組大小為0沒有意義*/
②intb(2)(3);/*不能使用圓括號(hào)*/
③intk,a[k];/*不能用變量說明數(shù)組大小*/
數(shù)組說明中其他常見的錯(cuò)誤3、一維數(shù)組在內(nèi)存中的存放每個(gè)數(shù)據(jù)元素占用的字節(jié)數(shù),就是基類型的字節(jié)數(shù)一個(gè)元素占4個(gè)字節(jié)一維數(shù)組:float
mark[100];mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.07552.0...94.0低地址
高地址數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式。例如:a[0]=a[5]+a[7]-a[2*3]定義數(shù)組時(shí)用到的“數(shù)組名[常量表達(dá)式]”和引用數(shù)組元素時(shí)用到的“數(shù)組名[下標(biāo)]”是有區(qū)別的。例如∶inta[10];/*定義數(shù)組長度為10*/t=a[6];/*引用a數(shù)組中序號(hào)為6的元素。此時(shí)6不代表數(shù)組長度*/注意2一維數(shù)組元素的引用1、數(shù)組元素的引用方式:2、一維數(shù)組元素引用的程序?qū)嵗?include<stdio.h>voidmain()
{inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d″,a[i]);printf("\n″);}
運(yùn)行結(jié)果如下:9876543210
程序使a[0]到a[9]的值為0~9,然后按逆序輸出。
1、對(duì)數(shù)組元素初始化的實(shí)現(xiàn)方法:〔1〕在定義數(shù)組時(shí)對(duì)數(shù)組元素賦以初值。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};將數(shù)組元素的初值依次放在一對(duì)花括弧內(nèi)。經(jīng)過上面的定義和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。3一維數(shù)組的初始化〔3〕如果想使一個(gè)數(shù)組中全部元素值為0,可以寫成inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};不能寫成:inta[10]={0*10};這是與FORTRAN語言不同的,不能給數(shù)組整體賦初值。2〕可以只給一局部元素賦值。例如:inta[10]={0,1,2,3,4};定義a數(shù)組有10個(gè)元素,但花括弧內(nèi)只提供5個(gè)初值,這表示只給前面5個(gè)元素賦初值,后5個(gè)元素值為0。4〕在對(duì)全部數(shù)組元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。例如:inta[5]={1,2,3,4,5};也可以寫成inta[]={1,2,3,4,5};在第二種寫法中,花括弧中有5個(gè)數(shù),系統(tǒng)就會(huì)據(jù)此自動(dòng)定義a數(shù)組的長度為5。但假設(shè)數(shù)組長度與提供初值的個(gè)數(shù)不相同,那么數(shù)組長度不能省略。例如,想定義數(shù)組長度為10,就不能省略數(shù)組長度的定義,而必須寫成inta[10]={1,2,3,4,5};只初始化前5個(gè)元素,后5個(gè)元素為0。程序舉例1:用數(shù)組來處理,求解Fibonacci數(shù)列。程序?qū)嵗?include<stdio.h>voidmain(){inti;intf[20]={1,1};Fibonacci數(shù)列公式::a1=a2=1 an=an-1+an-2即:1,1,2,3,5,8,134一維數(shù)組程序舉例for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(″\n″);printf(″%12d″,f[i])}/*For循環(huán)結(jié)束*/}/*程序結(jié)束*/運(yùn)行結(jié)果如下:
11235813213455891442333776109871597258441816765if語句用來控制換行,每行輸出5個(gè)數(shù)據(jù)。程序舉例2:用冒泡法對(duì)10個(gè)數(shù)排序(由小到大)。
起泡法的思路是:將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前頭。第一趟比較
經(jīng)過第一趟(共5次比較與交換)后,最大的數(shù)9已“沉底”。然后進(jìn)行對(duì)余下的前面5個(gè)數(shù)第二趟比較,注第二趟比較如果有n個(gè)數(shù),那么要進(jìn)行n-1趟比較。在第1趟比較中要進(jìn)行n-1次兩兩比較,在第j趟比較中要進(jìn)行n-j次兩兩比較。
經(jīng)過第二趟(共4次比較與交換)后,得到次大的數(shù)8。注程序流程圖如下:程序?qū)嵗?:#include<stdio.h>voidmain(){inta[10];inti,j,t;printf(″input10numbers:\n″);
for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");
for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(″thesortednumbers:\n″);for(i=0;i<10;i++)printf(″%d″,a[i]);printf(″\n″);}/*程序結(jié)束*/程序運(yùn)行結(jié)果如下:input10numbers:10481265-76100-45123↙
thesortednumbers:-76-4501481265100123二維數(shù)組的定義和引用
1二維數(shù)組的定義二維數(shù)組定義的一般形式為類型說明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];例如:定義a為3×4(3行4列)的數(shù)組,b為5×10(5行10列)的數(shù)組。如下:floata[3][4],b[5][10];不能寫成
floata[3,4],b[5,10];注意我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例如,可以把a(bǔ)看作是一個(gè)一維數(shù)組,它有3個(gè)元素:a[0]、a[1]、a[2],每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組。1二維數(shù)組的定義
二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素…
一維數(shù)組在內(nèi)存中的存放以下圖表示對(duì)a[3][4]數(shù)組存放的順序地址
值
數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3002H3004H3006H3008H300AH300CH300EH3010H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};123456789問題:有了二維數(shù)組的根底,那么多維數(shù)組如何定義呢?定義三維數(shù)組:
floata[2][3][4];多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標(biāo)變化最慢,最右邊的下標(biāo)變化最快。1二維數(shù)組的定義
a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→
a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]→三維數(shù)組的元素排列順序二維數(shù)組元素的表示形式為:數(shù)組名[下標(biāo)][下標(biāo)]
例如:a[2][3]下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1]數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值,例如:b[1][2]=a[2][3]/2注意不要寫成a[2,3],a[2-1,2*2-1]形式2二維數(shù)組的引用常出現(xiàn)的錯(cuò)誤有:
inta[3][4];
/*定義a為3×4的數(shù)組*/
┆a[3][4]=3;
在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)??梢杂孟旅?種方法對(duì)二維數(shù)組初始化數(shù)據(jù)類型
數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={初始化數(shù)據(jù)};(1)
分行給二維數(shù)組賦初值。如:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)
可以將所有數(shù)據(jù)寫在一個(gè)花括弧內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};3二維數(shù)組的引用(3)可以對(duì)局部元素賦初值。如inta[3][4]={{1},{5},{9}};100050009000也可以對(duì)各行中的某一元素賦初值,如inta[3][4]={{1},{0,6},{0,0,11}};100006000
0011
100056000000也可以只對(duì)某幾行元素賦初值。如:inta[3][4]={{1},{5,6}};
(4)如果對(duì)全部元素都賦初值,那么定義數(shù)組時(shí)對(duì)第一維的長度可以不指定,但第二維的長度不能省。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等價(jià)于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};在定義時(shí)也可以只對(duì)局部元素賦初值而省略第一維的長度,但應(yīng)分行賦初值。如:inta[][4]={{0,0,3},{},{0,10}};00300000010003二維數(shù)組的引用4二維數(shù)組程序舉例例4將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(″arraya:\n″);for(i=0;i<=1;i++){for(j=0;j<=2;j++){例如:a=12314456b=2536printf(″%5d″,a[i][j]);b[j][i]=a[i][j];}printf(″\n″);}printf(″arrayb:\n″);for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于閱讀策略的檔案袋評(píng)價(jià)在高中英語閱讀教學(xué)中的應(yīng)用研究
- 清代宜陽縣聚落地理研究
- 兒科疾病健康教育
- 課堂如何組織管理學(xué)生
- 剪切音樂教案小班健康
- 領(lǐng)土安全課件教學(xué)
- 預(yù)防氣象災(zāi)害班會(huì)課件
- 森林防火安全培訓(xùn)
- 項(xiàng)目采購管理課件教學(xué)
- 汽車配套產(chǎn)業(yè)基地項(xiàng)目安全管理方案
- 腦卒中溶栓護(hù)理課件
- 2025年城建技師考試題庫及答案
- 2025年中國LTCC技術(shù)行業(yè)市場現(xiàn)狀、前景分析研究報(bào)告(智研咨詢發(fā)布)
- 租賃住房培訓(xùn)課件下載
- 房管員試題資料
- 2025至2030中國扭蛋機(jī)行業(yè)市場發(fā)展現(xiàn)狀及商業(yè)模式與投融資戰(zhàn)略報(bào)告
- 2024年蘇州昆山國創(chuàng)投資集團(tuán)有限公司招聘筆試真題
- 商場吸煙區(qū)管理制度
- 2025年四川省成都市中考地理真題(原卷版)
- 糖尿病足截肢術(shù)后護(hù)理
- 廣東省東莞市2022-2023學(xué)年高二下學(xué)期期末物理試題(含答案)
評(píng)論
0/150
提交評(píng)論