版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第六章
數(shù)
組基本問題1.為什么要使用數(shù)組例如:要輸入一個100個學(xué)生的成績。方法1:用簡單變量方法輸入學(xué)生成績int
m1,m2,m3,
……m100;scanf("%d",&m1);scanf("%d",&m2);……scanf("%d",&m100);要用100句輸入語句方法2:使用簡單變量和循環(huán)結(jié)構(gòu)相結(jié)合int
mark,i;for
(i=1;i<=100;i++)scanf("%d",&mark);方法3:使用數(shù)組和循環(huán)結(jié)構(gòu)相結(jié)合int
mark[100],i;for
(i=1;i<=100;i++)scanf("%d",&mark[i]);4.數(shù)組的類型一維數(shù)組:數(shù)組中的變量具有先后順序的邏輯結(jié)構(gòu),則稱其為一維數(shù)組。二維數(shù)組:數(shù)組中的變量具有行列順序的邏輯結(jié)構(gòu),則稱其為二維數(shù)組。6.1
一維數(shù)組一、一維數(shù)組的定義定義格式:數(shù)據(jù)類型符
數(shù)組名[常量表達(dá)式];功能:定義指定“數(shù)據(jù)類型”的一維數(shù)組。說明:數(shù)據(jù)類型符用于說明數(shù)組中存放的數(shù)據(jù)的數(shù)據(jù)類型。它可以是任何基本類型,如int、float等。也可以是以后要介紹的指針類型或結(jié)構(gòu)類型等。數(shù)組名必須是按照“標(biāo)識符”的命名規(guī)則命名,不能與程序中的其他變量名同名。(3)常量表達(dá)式的值為數(shù)組的長度,表示數(shù)組中的元素個數(shù),必須是整數(shù),可以是整型常量或符合常量,但不能是變量。例如:①int
a[10];②#define
N
10float
b[N];③int
i=10;int
c[i];以上①②是正確的,③是錯誤的。(4)當(dāng)定義了某一個一維數(shù)組,則要給其所有的元素分配內(nèi)存單元。單元數(shù)目=數(shù)組長度×每個元素占用的字節(jié)數(shù)據(jù)例如:①int
a[10];定義一個a數(shù)組,10個元素,每個元素占2個字節(jié),整個數(shù)組占20個字節(jié)的內(nèi)存單元。②float
b[10];定義一個b數(shù)組,10個元素,每個元素占4個字節(jié),整個數(shù)組占40個字節(jié)的內(nèi)存單元。二、一維數(shù)組元素的引用C語言規(guī)定不能整體使用數(shù)組,只能使用數(shù)組元素,數(shù)組元素在數(shù)組中的位置稱為下標(biāo)。引用格式:數(shù)組名[下標(biāo)]說明:(1)數(shù)組名表示數(shù)組元素從屬的數(shù)組,該數(shù)組是事先已定義過的數(shù)組。(2)下標(biāo)確定數(shù)組元素在數(shù)組中的位置,下標(biāo)可以是整型常量、整型變量和整型表達(dá)式。其有效取值范圍是:0≤下標(biāo)<數(shù)組的長度如果下標(biāo)的值超出范圍,稱為數(shù)組越界,將導(dǎo)致錯誤的運(yùn)行結(jié)果。例1:一維數(shù)組元素引用舉例。設(shè)有數(shù)組定義語句:int
a[4];數(shù)組a有四個元素,分別是a[0],a[1],a[2],a[3下列方式引用數(shù)組a的元素均為正確的:a[0]=10;scanf("%d,%d",&a[1],&a[3]);a[2]=2*a[0]+a[1]-a[3];例2:一維數(shù)組元素下標(biāo)越界舉例。設(shè)有數(shù)組定義語句:int
y[2];數(shù)組y有兩個元素,分別是y[0],y[1]下列方式引用數(shù)組y的元素語法上均為正確的,但程序可能會出錯。y[2]=10;scanf("%d",&y[3]);y[1]=y[4];(3)定義數(shù)組時方括號的數(shù)字與數(shù)組元素中的數(shù)字意義完全不同,前者的數(shù)字說明數(shù)組的長度,后者的數(shù)字說明該數(shù)組元素在數(shù)組中的位置。(4)數(shù)組名不是變量是常量,而數(shù)組元素是變量如設(shè)有數(shù)組定義語句:int
x[3];x[2]=10;x=6;/*正確*//*非法操作*/三、一維數(shù)組的初始化定義數(shù)組時賦予初值,稱為初始化。格式:數(shù)據(jù)類型符
數(shù)組名[長度]={初值表}方法一:對所有元素賦初值如:int
a[5]={1,2,3,4,5};結(jié)果:a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5方法二:對部分元素賦初值如:int
a[5]={1,2,3};結(jié)果:a[0]=1,a[1]=2,a[2]=3,a[3]=0,a[4]=0方法三:對所有元素賦初值,可省略數(shù)組長度如:int
a[
]={1,2,3,4,5};等價于:
int
a[5]={1,2,3,4,5};但是int
a[
];是錯誤的。四、一維數(shù)組的應(yīng)用在一維數(shù)組的應(yīng)用中,需注意以下幾點:一般具有先后順序的一組數(shù)據(jù)用一維數(shù)組存放。數(shù)組元素的下標(biāo)控制用循環(huán)實現(xiàn)。數(shù)組元素的下標(biāo)從0開始,最后一個元素的下標(biāo)等于數(shù)組長度的大小減1。例1:編寫程序,完成:(1)從鍵盤上任意輸入10個整數(shù);
(2)按反序輸出10個整數(shù);(3)按反序存放10個整數(shù)。例2:編寫一程序,功能是任意輸入10個整數(shù),把這10個數(shù)據(jù)由小到大排序。算法分析:排序的方法很多,如選擇法、冒泡法希爾法、插入法等。1.選擇法排序選擇法排序的基本思想是首先將n個數(shù)中最小的數(shù)找出來,同第一個數(shù)對調(diào),然后再將n-1個數(shù)中最小的數(shù)找出來同第二個數(shù)對調(diào)……依次類推。對n個數(shù)作n-1輪比較,每輪都找出一個未經(jīng)排序的數(shù)中最小的數(shù)。選擇法排序示意圖2.冒泡法排序冒泡法排序的基本思想是將第一個數(shù)與第二個數(shù)作比較,小數(shù)調(diào)到前面,大數(shù)調(diào)到后面;再將第二個數(shù)與第三個數(shù)作同樣的比較與交換……依次類推,當(dāng)完成第一遍的兩兩比較后,最大的數(shù)已跑到了數(shù)列的最后。然后再對第一個數(shù)至倒數(shù)第二個數(shù)執(zhí)行兩兩比較和相應(yīng)的交換操作……依次類推,直至數(shù)列的第一、第二個數(shù)比較結(jié)束。冒泡法排序示意圖6.2
二維數(shù)組一、二維數(shù)組的定義定義格式:數(shù)據(jù)類型符
數(shù)組名[常量表達(dá)式1]
[常量表達(dá)式2];功能:定義指定“數(shù)據(jù)類型”的二維數(shù)組。說明:數(shù)據(jù)類型符用于說明數(shù)組中存放的數(shù)據(jù)的數(shù)據(jù)類型。它可以是任何基本類型,如int、float等。也可以是以后要介紹的指針類型或結(jié)構(gòu)類型等。數(shù)組名必須是按照“標(biāo)識符”的命名規(guī)則命名,不能與程序中的其他變量名同名。(3)常量表達(dá)式1說明二維數(shù)組行數(shù)的大小(即第一維的長度),常量表達(dá)式2說明二維數(shù)組列數(shù)的大小(即第二維的長度)。二維數(shù)組包含的數(shù)組元素個數(shù)=常量表達(dá)式1×常量表達(dá)式2。例如:int
a[4][5];(定義一個二維數(shù)組a,其元素為20個)(4)當(dāng)定義了某一個二維數(shù)組,則要給其所有的元素分配內(nèi)存單元。單元數(shù)目=數(shù)組長度×每個元素占用的字節(jié)數(shù)據(jù)例如:①int
a[4][5];定義一個a數(shù)組,20個元素,每個元素占2個字節(jié),整個數(shù)組占40個字節(jié)的內(nèi)存單元。②float
b[3][4];定義一個b數(shù)組,12個元素,每個元素占4個字節(jié),整個數(shù)組占48個字節(jié)的內(nèi)存單元。(5)C的編譯系統(tǒng)對二維數(shù)組的存儲單元的分配原則是:按行順序存放,即上一行的末元素之后是下一行的首元素。二、二維數(shù)組元素的引用引用格式:數(shù)組名[下標(biāo)1][下標(biāo)2]說明:下標(biāo)1確定數(shù)組元素所在的行,下標(biāo)2確定數(shù)組元素所在的列。下標(biāo)1為任一整型表達(dá)式,滿足:0≤下標(biāo)1<行數(shù)
(3)下標(biāo)2為任一整型表達(dá)式,滿足:0≤下標(biāo)2<列數(shù)和一維數(shù)組一樣,C對二維數(shù)組的下標(biāo)也不作越界檢查。三、二維數(shù)組的初始化方法一:按行給所有元素賦初值如:int
a[3][5]={{1,2,3,4,5},
{6,7,8,9,10},{11,12,13,14,15}};結(jié)果:01122
3
43
4
56789101112131415012方法二:按行對部分元素賦初值如:float
b[3][4]={{1.0},{3.2,4.5}};結(jié)果:01.010.020.030.03.24.50.00.00.00.00.00.0012方法三:給所有元素賦初值,可省略第一維長度如:int
a[
][3]={1,2,5,8,3,7};等價于:
int
a[2][3]={1,2,5,8,3,7};結(jié)果是:125837省略的第一維長度由數(shù)據(jù)總個數(shù)除于第二維的長度確定(6/3=2)。因為二維數(shù)組在內(nèi)存中是按行存放的,所以必須知道每行的元素個數(shù),才能由數(shù)據(jù)總數(shù)確定數(shù)組的行數(shù)。四、二維數(shù)組的應(yīng)用在二維數(shù)組的應(yīng)用中,需要注意以下幾點:(1)一般具有行、列的表格數(shù)據(jù)用二維數(shù)組存放。
(2)定義存放數(shù)據(jù)的二維數(shù)組行與列的大小只能是整型常量或符號常量。(3)行下標(biāo)與列下標(biāo)均成0開始,它們的值惟一確定二維數(shù)組元素在數(shù)組中的位置。(4)二維數(shù)組元素的下標(biāo)控制,一般用兩重循環(huán)實現(xiàn)例3:編寫程序,對一個4行4列的二維數(shù)組,完成以下操作:(1)求對角線上的元素之和與積;
(2)求所有靠邊的元素之和與積;
(3)求所有不靠邊的元素之和與積。算法分析:對于一個行列相同的二維數(shù)組,它有兩條對角線一條稱為主對角線,另一條稱為副對角線。主對角線上的元素下標(biāo)特點是行、列下標(biāo)的值相等,副對角線上的元素下標(biāo)特點是行、列下標(biāo)之和等于(行數(shù)-1)。所有靠邊元素的下標(biāo)特點是行下標(biāo)等于0或者等于(行數(shù)-1),列下標(biāo)等于0或者等于(列數(shù)-1)。所有不靠邊元素的下標(biāo)特點是行下標(biāo)不等于0也不等于(行數(shù)-1),列下標(biāo)不等于0也不等于(列數(shù)-1)
。程序清單:例4:編寫程序,輸出楊輝三角形的前10行11112113311464115101051………………算法分析:算法分析:楊輝三角形數(shù)據(jù)的特點是對角線和第1列上的值為1,其余從第3行起每行第2個數(shù)開始的各個數(shù)等于上一行同一列上的數(shù)與其左側(cè)的數(shù)之和。即滿足
a[i][j]=a[i-1][j]+a[i-1][j-1]。程序清單6.3
字符串與字符數(shù)組一、字符串與字符數(shù)組所謂字符串,就是用雙引號括起來的字符序列。為了便于識別一個字符串的結(jié)尾,C語言約定,字符串的未尾以轉(zhuǎn)義字符“\0”作為結(jié)束標(biāo)志。在C語言中,字符串用字符數(shù)組來存放和處理。字符數(shù)組用于存放字符型數(shù)據(jù),每個數(shù)組元素存放一個字符,存放的是字符的ASCII代碼。不管字符數(shù)組中存放的是字符串,還是若干個字符,每個字符數(shù)組的元素都可以作為一個字符型變量來使用。二、字符數(shù)組定義一維字符數(shù)組定義格式:char
數(shù)組名[常量表達(dá)式];二維字符數(shù)組定義格式:char
數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];3.說明:一維字符數(shù)組用于存放一個字符串,二維字符數(shù)組用于存放多個字符串。在定義字符數(shù)組和存儲字符串時應(yīng)估計要存放的字符串的最大可能長度,使得字符數(shù)組的長度始終大于字符串的實際長度,保證有效字符之后是字符串的結(jié)束標(biāo)志“\0”。例如:要存放字符串“I
am
a student.”,則定義的一維字符數(shù)組長度至少為16(有效字符15個、字符串結(jié)束標(biāo)志1個),即char
str[16];。如要同時存放3個字符串“I
am
a student.”、“You
are
a
worker.”、“He
is
a
teacher.”,則定義的二維字符數(shù)組第二維的長度至少為18(3個字符串中,第二個字符串最長,有效字符17個、字符串結(jié)束標(biāo)記1個),即char
str[3][18];。三、字符數(shù)組的初始化字符數(shù)組的初始化既可以用字符常量也可以用字符串常量來實現(xiàn)。例如:char
str[]={"I","","a","m","","a","","b等價于:char
str[]={"I
am
a
boy"};或者:char
str[]="I
am
a
boy“說明:(1)不管用那一種方法,str數(shù)組都是有11個數(shù)組元素組成。str
0
1
2
3
4
5
6
7
8
9
10I
a
m
a
b
o
y
\0在用字符常量初始化字符數(shù)組時,特別要注意:如存放的是字符串,最后一般要放上字符串結(jié)束標(biāo)志‘\0’,否則,C不將其視為字符串。用字符串常量初始化字符數(shù)組時,系統(tǒng)自動在字符串的末尾加上字符串結(jié)束標(biāo)志‘\0’。顯然,用字符串常量初始化字符數(shù)組比用字符常量要方便,直觀得多。四、字符數(shù)組的輸入與輸出(一)字符數(shù)組輸入的3種方法1.單個字符逐個輸入在scanf函數(shù)中,用格式字符“%c”,表示從鍵盤上輸入單個字符。如:char
c[11];int
i;for
(i=0;i<10;i++)scanf("%c",&c[i]);c[10]="\0";運(yùn)行時輸入:I
am
a
boy結(jié)果數(shù)組c存放的是:I
am
a
boy\0,可以作為數(shù)組使用。2.整個字符串一次輸入在scanf函數(shù)中,用格式字符“%s”,表示從鍵盤上
一次輸入一串字符,輸入項直接寫數(shù)組名。不過要注意:用“%s”輸入字符串時,只能輸入不含有空格符的字符串。因為用“%s”輸入字符串時,不接受空格符(即遇到空格符結(jié)束),并自動補(bǔ)上字符串結(jié)束標(biāo)志‘\0’。如:char
c[14];
scanf("%s",c);運(yùn)行時若輸入:You
are
a
boy結(jié)果數(shù)組c存放的是:You\0。3.用gets函數(shù)一次輸入整個字符串格式:gets(字符數(shù)組名);功能:從鍵盤上輸入一串字符,存放在指定的字符數(shù)組中。說明:gets函數(shù)既可輸入包含空格的字符串,又可輸入不包含空格的字符串。在輸入字符串時,遇到回車符結(jié)束,并將回車符轉(zhuǎn)換成字符串結(jié)束標(biāo)志’\0’。如:char
c[14];
gets(c);運(yùn)行時若輸入:You
are
a
boy結(jié)果數(shù)組c存放的是:You
are
a
boy\0。(二)字符數(shù)組輸出的3種方法1.單個字符逐個輸出在printf函數(shù)中,用格式字符“%c”,輸出一個數(shù)組元素(即一個字符)。如:char
c[11]="I
am
a
boy";int
i;for
(i=0;i<11;i++)printf("%c",c[i]);printf("\n");運(yùn)行結(jié)果為:I
am
a
boy2.一次輸出整個字符串在printf函數(shù)中,用格式字符“%s”,輸出項直接寫數(shù)組名,一次輸出整個數(shù)組。如:char
c[11]="I
am
a
boy";printf("%s",c);printf("\n");運(yùn)行結(jié)果為:I
am
a
boy說明:格式字符“%s”在輸出字符串時,原樣輸出,遇到字符串結(jié)束標(biāo)記"\0"不換行。3.用puts函數(shù)一次輸出整個字符串格式:puts(字符數(shù)組名);功能:在顯示器上輸出存放在指定字符數(shù)組中的整個字符串。如:char
c[11]="I
am
a
boy";puts(c);運(yùn)行結(jié)果為:I
am
a
boy說明:puts函數(shù)輸出字符串時,遇到字符串結(jié)束標(biāo)記"\0"換行。五、字符串處理函數(shù)1.字符串復(fù)制函數(shù)strcpy格式:strcpy(字符型參數(shù)1,字符型參數(shù)2)功能:把參數(shù)2指定的字符串復(fù)制到參數(shù)1指定的字符數(shù)組中。說明:參數(shù)1用于存放復(fù)制的字符串,所以它必須是字符數(shù)組,而且其長度不能小于所復(fù)制字符串的長度。參數(shù)2可以是字符數(shù)組,也可以是字符串常量。復(fù)制時連同字符串結(jié)束標(biāo)記"\0"一起復(fù)制。例如:char
str[20];strcpy(str,
"I
am
a
boy");puts(str);運(yùn)行結(jié)果為:I
am
a
boy例如:char
name[7]
="王大明";
/*正確*/name="王大明";/*非法操作*/strcpy(name,
"王大明");
/*正確*/2.字符串連接函數(shù)strcat格式:strcat(字符型參數(shù)1,字符型參數(shù)2)功能:把參數(shù)2指定的字符串連接到參數(shù)1指定的字符數(shù)組中字符串的后面。說明:(1)參數(shù)1用于存放連接后的字符串,所以它必須是字符數(shù)組,而且其長度要足夠容納兩個字符串
(2)參數(shù)2可以是字符數(shù)組,也可以是字符串常量(3)連接時參數(shù)1指定的字符數(shù)組中原有的字符串結(jié)束標(biāo)記"\0"被參數(shù)2指定的字符串的第一個字符取代,而參數(shù)2指定的字符串的字符串結(jié)束標(biāo)記"\0"作為新字符串的結(jié)束標(biāo)記。例如:char
str1[80]="I
am
a
boy.";char
str2[]="You
are
a
girl.";printf("%s\n",strcat(str1,str2));運(yùn)行結(jié)果為:I
am
a
boy.You
are
a
girl.str2數(shù)組中仍為:"You
are
a
girl."str1數(shù)組中為:"I
am
a
boy.
You
are
a
girl."3.字符串比較函數(shù)strcmp格式:strcmp(字符型參數(shù)1,字符型參數(shù)2)功能:比較參數(shù)1和參數(shù)2
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦血流自體循環(huán)試驗
- 滬科版八年級數(shù)學(xué)上冊第14章全等三角形14-1全等三角形課件
- 魯教版八年級數(shù)學(xué)上冊專項素養(yǎng)綜合練(五)分式方程中的三種新定義型問題課件
- 七年級下冊英語五一勞動節(jié)作文
- 蘇教版八年級生物上冊期末素養(yǎng)綜合測試(一)課件
- 牛津版小學(xué)六年級英語語法課
- 蘇科版八年級數(shù)學(xué)上冊《第五章平面直角坐標(biāo)》單元測試卷帶答案
- 湖南省2024年中考語文真題試卷(含答案)
- 遼寧省鞍山市岫巖縣2024-2025學(xué)年八年級上學(xué)期10月月考英語試卷
- 沙漠之舟課件教學(xué)課件
- 樓板拆除 施工方案
- ui設(shè)計通用外包合同范本:免修版模板范本
- 外幣防偽基礎(chǔ)知識
- 自免肝的實驗室診斷課件
- 【可行性報告】2023年房屋租賃行業(yè)項目可行性分析報告
- (滬教牛津版)深圳市小學(xué)1-6年級英語單詞默寫表(英文+中文+默寫)
- 人教版五年級上冊數(shù)學(xué)《-用字母表示數(shù)》說課課件
- 干部人事檔案轉(zhuǎn)遞單表樣
- 滅火器檢查記錄表
- 267條表情猜成語【動畫版】
- 江蘇省無錫市濱湖區(qū)2022-2023學(xué)年七年級上學(xué)期期中語文試題【含答案解析】
評論
0/150
提交評論