




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章數(shù)組本章要點(diǎn)
一維數(shù)組
二維數(shù)組字符數(shù)組數(shù)組元素作函數(shù)實(shí)參
數(shù)組是同類型數(shù)據(jù)的集合,集合中的每個(gè)數(shù)據(jù)稱為數(shù)組元素或下標(biāo)變量,數(shù)組元素的類型相同、個(gè)數(shù)確定。下標(biāo)變量中如果只用一個(gè)下標(biāo),則稱為一維數(shù)組,用兩個(gè)下標(biāo)則稱之為二維數(shù)組,用三個(gè)下標(biāo)稱之為三維數(shù)組,依此類推?;靖拍?.1一維數(shù)組8.1.1一維數(shù)組的定義定義形式為:
[存儲(chǔ)類別]類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式],…;例如:inta[6]; floatx[100],y[100];說(shuō)明:類型標(biāo)識(shí)符”表明了數(shù)組元素的數(shù)據(jù)類型常量表達(dá)式是由常量、符號(hào)常量和運(yùn)算符組成的表達(dá)式,它的值規(guī)定了數(shù)組中數(shù)組元素的個(gè)數(shù)(數(shù)組的長(zhǎng)度)常量表達(dá)式中不能含有變量。intn;scanf("%d",&n);inta[n];數(shù)組在內(nèi)存中占據(jù)一片連續(xù)的存儲(chǔ)單元,數(shù)組中的每個(gè)數(shù)組元素在這片連續(xù)的存儲(chǔ)單元中按序存儲(chǔ)。C語(yǔ)言規(guī)定數(shù)組名表示該連續(xù)存儲(chǔ)單元的首地址(首字節(jié)編號(hào))。a
a[0]a[1]a[2]a[3]a[4] a[5]
圖8.1數(shù)組的存儲(chǔ)結(jié)構(gòu)
數(shù)組的定義語(yǔ)句給每個(gè)數(shù)組元素分配了一定的存儲(chǔ)單元,和簡(jiǎn)單變量一樣它們的值是不確定的、是隨機(jī)的,只有通過賦值或賦初值才能得到確定的值。同類型的數(shù)組的定義和普通變量的定義可以出現(xiàn)在同一個(gè)定義語(yǔ)句中。如: inta[6],b[20],i,j;數(shù)組初始化的一般形式為:
[存儲(chǔ)類別]類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式]={初值表};在編譯過程中完成的,不占程序運(yùn)行時(shí)間。數(shù)組初始化常見的幾種形式:對(duì)所有數(shù)組元素賦初值,此時(shí)數(shù)組定義中表示數(shù)組長(zhǎng)度的常量表達(dá)式可以省略。
inta[6]={0,1,2,3,4,5};可以只給一部分?jǐn)?shù)組元素賦初值,此時(shí)數(shù)組長(zhǎng)度一般不省略。后面3個(gè)元素由C編譯系統(tǒng)自動(dòng)賦值為0。
inta[6]={0,1,2};
8.1.2一維數(shù)組的初始化引用形式為:
數(shù)組名[下標(biāo)表達(dá)式]
例如:
a[0]=123;
scanf(“%d”,&a[3]);
printf(“%d”,a[5]);
a[i++]=2*a[i+j];8.1.3一維數(shù)組元素的引用【例8.1】輸入100個(gè)整型數(shù)據(jù),然后分別按順序和逆序的方式輸出。main(){inti,a[100];
for(i=0;i<100;i++)
scanf("%d",&a[i]);/*順序輸入*/
for(i=0;i<100;i++)
printf("%d",a[i]);/*順序輸出*/for(i=99;i>=0;i--)
printf("%d",a[i]);/*逆序輸出*/}在引用數(shù)組元素時(shí)應(yīng)注意: ①引用數(shù)組元素時(shí),下標(biāo)表達(dá)式的值是確定的。 ②數(shù)組元素本身可以看作是一個(gè)普通變量,代表內(nèi)存中的一個(gè)存儲(chǔ)單元。因此數(shù)組元素可以在任何相同類型簡(jiǎn)單變量允許使用的位置引用。 ③數(shù)組引用時(shí),下標(biāo)值應(yīng)該在已定義的數(shù)組大小范圍內(nèi)。常出現(xiàn)的錯(cuò)誤是:
inta[100];
a[100]=4;8.1.4一維數(shù)組應(yīng)用【例8.2】從鍵盤輸入10個(gè)整數(shù)存放在數(shù)組中,輸出其中最大的一個(gè)數(shù)和它在數(shù)組中的位序。main(){inta[10],i,max,id;printf("Enterdata:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);max=a[0];id=0;for(i=1;i<10;i++)if(a[i]>max) {max=a[i];id=i;}printf(“最大數(shù)是%d,位序?yàn)椋?d\n",max,id);}【例8.4】已知一個(gè)一維數(shù)組中的各個(gè)元素值均不相同,編寫程序查找數(shù)組中是否有值為x的數(shù)組元素。如果有,輸出相應(yīng)的下標(biāo);如果沒有,輸出“該值在數(shù)組中不存在”字樣信息。main(){intnum[10]={1,32,14,56,74,3,56,6,9,12},x,i,j;printf(“inputx:”);scanf("%d",&x);for(i=0;i<10;i++)if(num[i]==x)break;if(i==10)printf(“該數(shù)在數(shù)組中不存在");elseprintf(“該數(shù)在數(shù)組中的下標(biāo)是%d”,i);}【例8.5】編寫程序,利用選擇法對(duì)10個(gè)整數(shù)進(jìn)行遞增排序,并輸出排序后的結(jié)果。選擇法排序的思路是:先從全體待排序的n個(gè)數(shù)據(jù)中找出最大的數(shù),把它放到數(shù)組的第0個(gè)位置上,完成第1趟選擇排序;接著再在剩余的n-1個(gè)數(shù)據(jù)中找出最大的數(shù)放到數(shù)組的第1個(gè)位置上,完成第2趟選擇排序,……,如此反復(fù),經(jīng)過n-1趟選擇排序后,原始數(shù)組已經(jīng)有序。main(){inti,j,k,temp,a[10];for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++){k=i;
for(j=k+1;j<10;j++)if(a[k]<a[j])k=j;
temp=a[i];a[i]=a[k];
a[k]=temp;}for(i=0;i<10;i++)printf(“%4d”,a[i]);}交換:199763第4趟查找:19976
3交換:1997
63第3趟查找:199673交換:199673第2趟查找:193679交換:19
3679第1趟查找:736199排序前:736199【例8.6】編寫程序,利用冒泡法對(duì)10個(gè)整數(shù)進(jìn)行遞增排序?!谝惶?/p>
124156
341215634
121563412
615341263
15第二趟
463
12第三趟
43
6main(){inta[10],i,j,temp;
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]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}printf("thesortednumbers:\n");for(i=0;i<10;i++)printf("%d",a[i]);}8.2二維數(shù)組例:求一個(gè)矩陣的轉(zhuǎn)置矩陣356768292456245668293567定義二維數(shù)組的一般形式為:[存儲(chǔ)類別]類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2],…;例如:inta[2][3];說(shuō)明:①二維數(shù)組定義中的第1個(gè)下標(biāo)表示該數(shù)組具有的行數(shù),第2個(gè)下標(biāo)表示該數(shù)組具有的列數(shù),兩個(gè)下標(biāo)之積是組成該數(shù)組的元素的個(gè)數(shù),即二維數(shù)組的長(zhǎng)度。②二維數(shù)組在內(nèi)存中占據(jù)一片連續(xù)的存儲(chǔ)單元。aa[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]8.2.1二維數(shù)組的定義③在C語(yǔ)言中,一個(gè)二維數(shù)組可以看作是一個(gè)特殊的一維數(shù)組,其中一維數(shù)組中的每個(gè)元素又是一個(gè)一維數(shù)組,即二維數(shù)組是由元素類型為數(shù)組類型的一維數(shù)組構(gòu)成的一維數(shù)組。因此C系統(tǒng)就把a(bǔ)[0]、a[1]看作是一維數(shù)組的數(shù)組名。a[0]a[1]aa[0][0]a[0][2]a[0][1]a[1][1]a[1][2]a[1][0]inta[2][3];二維數(shù)組初始化的幾種常見形式:
(1)按行給二維數(shù)組元素賦初值。如:
inta[2][3]={{1,2,3},{6,7,8}};
(2)將所有數(shù)據(jù)寫在一個(gè)花括弧內(nèi),按數(shù)組在內(nèi)存中的排列順序?qū)Ω鲾?shù)組元素賦初值。如:
inta[2][3]={1,2,3,6,7,8};
(3)給二維數(shù)組所有元素賦初值,二維數(shù)組第一維的長(zhǎng)度可以省略。如:inta[2][3]={1,2,3,6,7,8};等價(jià)于:
inta[][3]={1,2,3,6,7,8};
(4)在定義時(shí)也可以只對(duì)部分元素賦初值而省略第一維的長(zhǎng)度,但應(yīng)按行賦初值。如:
inta[][3]={{0,2},{6}};8.2.2二維數(shù)組的初始化二維數(shù)組元素的引用形式為:
數(shù)組名[下標(biāo)表達(dá)式1][下標(biāo)表達(dá)式2]數(shù)組元素的行列下標(biāo)都從0開始??梢詫?duì)二維數(shù)組元素進(jìn)行與普通變量相同的操作,因?yàn)樗鼈兊谋举|(zhì)就是一個(gè)普通變量,如運(yùn)算、賦值等。如:a[0][0]=a[0][2]/3-30;
printf(“%d”,a[1][1]);區(qū)分在定義數(shù)組時(shí)使用的維數(shù)和各維大小與引用數(shù)組元素時(shí)下標(biāo)值的不同。如:
inta[3][5];
a[3][5]=6;8.2.3二維數(shù)組元素的引用【例8.8】輸入12個(gè)整型數(shù)據(jù)形成一個(gè)具有3行4列的二維數(shù)組,然后按數(shù)組的邏輯排列形式輸出。main(){inti,j,a[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)scanf("%d",&a[i][j]);/*按行順序輸入*/for(i=0;i<2;i++)
{for(j=0;j<3;j++) printf("%2d",a[i][j]);/*按行順序輸出*/printf(“\n”);/*一行輸出完后,要換行*/}}#defineM2#defineN3main(){inta[M][N]={{1,2,3},{4,5,6}},b[N][M],i,j;for(i=0;i<M;i++){for(j=0;j<N;j++){b[j][i]=a[i][j];}
}for(i=0;i<N;i++){for(j=0;j<M;j++)printf(“%5d”,b[i][j]);}}8.2.4二維數(shù)組應(yīng)用舉例【例8.10】將一個(gè)二維數(shù)組的行和列元素互換,存到另一個(gè)二維數(shù)組中。a=b=【例8.11】已知一個(gè)小組5個(gè)學(xué)生的4門課成績(jī),要求分別求每門課的平均成績(jī)和每個(gè)學(xué)生的平均成績(jī)。
cour1cour2cour3cour4stud187699862stud259926877stud378884560stud489629794stud572997564main(){inti,j;
floatscore[6][5]={{87,69,98,62},{59,92,68,77},
{78,88,45,60},{89,62,97,94},{72,99,75,64}}for(i=0;i<5;i++)/*統(tǒng)計(jì)每個(gè)學(xué)生的平均成績(jī)*/{for(j=0;j<4;j++)
score[i][4]+=score[i][j];
score[i][4]=score[i][4]/4;
}}for(j=0;j<4;j++)/*統(tǒng)計(jì)每門課程的平均成績(jī)*/{for(i=0;i<5;i++)score[5][j]+=score[i][j];
score[5][j]=score[5][j]/5;}求一個(gè)矩陣所有靠外側(cè)的元素的和#defineM3#defineN4main(){inta[3][4]={{3,5,6,7},{6,8,2,9},{2,4,5,6}};intk,j,sum=0;
for(j=0;j<N;j++)sum+=a[0][j]+a[M-1][j]
for(i=1;i<M-1;i++)sum+=a[i][0]+a[i][N-1];printf(“%d”,sum);} 3567682924568.3字符數(shù)組字符數(shù)組是存放字符型數(shù)據(jù)的數(shù)組。其中每個(gè)數(shù)組元素的值都是字符型數(shù)據(jù)(單個(gè)字符或轉(zhuǎn)義字符)。常用的字符數(shù)組為一維字符數(shù)組和二維字符數(shù)組。8.3.1字符數(shù)組的定義charstr1[5];charstr2[3][10];用賦值語(yǔ)句可以對(duì)字符數(shù)組元素逐個(gè)賦初值。例如:
str1[0]='C';str1[1]='h';str1[2]='i';
str1[3]='n';str1[4]='a';China字符數(shù)組的存儲(chǔ)狀態(tài)
字符串常量在內(nèi)存中占用一串連續(xù)的空間,相當(dāng)于字符數(shù)組,可以按照字符數(shù)組的方式訪問字符串。對(duì)字符串的處理常常采用一維字符數(shù)組實(shí)現(xiàn)。不能通過賦值語(yǔ)句把字符串常量或其它字符數(shù)組中的字符串直接賦給字符數(shù)組8.3.2字符串與字符數(shù)組hello\0逐個(gè)字符對(duì)字符數(shù)組初始化(不會(huì)自動(dòng)在最后一個(gè)字符后加’\0’)
例如:
charstr1[5]={‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’};
charstr2[2][3]={‘W’,‘i’,‘n’,‘d’,‘o’,‘w’};如果初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,C編譯系統(tǒng)將其余的元素自動(dòng)定為空字符(即‘\0’)用字符串常量對(duì)字符數(shù)組初始化(系統(tǒng)會(huì)自動(dòng)在最后一個(gè)字符后加’\0’)例如:
charc1[13]={"Goodmorning"};
charc2[2][10]={"Hello","World"};8.3.3字符數(shù)組的初始化不可以用賦值語(yǔ)句給字符數(shù)組整體賦一串字符如:charc1[13];c1=“Goodmorning”;逐個(gè)字符輸入輸出scanf()和printf()函數(shù)中用格式符“%c”,循環(huán)8.3.4字符數(shù)組的輸入輸出charstr[5];for(i=0;i<5;i++)scanf(“%c”,&str[i]);for(i=4;i>=0;i--)printf(“%c”,str[i]);
必須在接受到“回車”時(shí),scanf()才開始讀取數(shù)據(jù)。如果按“回車”時(shí),輸入的字符少于scanf()循環(huán)讀取的字符,scanf()繼續(xù)等待用戶將剩下字符輸入;否則,scanf()循環(huán)只將前面的字符讀入。逐個(gè)讀入字符結(jié)束后,不會(huì)自動(dòng)在末尾加’\0’。字符串整體輸入輸出scanf()函數(shù)中用格式符“%s”整體輸入例如:從鍵盤上讀入5個(gè)字符并輸出:charstr[6];scanf("%s",str);printf("%s",str);①用“%s”輸入輸出字符串,以上函數(shù)的第二個(gè)參數(shù)都要求是字符數(shù)組的首地址,如字符數(shù)組名。②按照“%s”格式輸入字符串時(shí),輸入的字符串中不能有空格(由空格鍵或Tab鍵產(chǎn)生,空格或是輸入數(shù)據(jù)的結(jié)束標(biāo)志),否則空格后面的字符不能讀入,這時(shí)scanf()函數(shù)認(rèn)為輸入的是兩個(gè)字符串。
如輸入:Iamhappy
則輸出:Iprintf()函數(shù)中用格式符“%s”整體輸出printf("%s",str);
輸出項(xiàng)是一個(gè)地址值。可以是字符數(shù)組名、字符指針或字符數(shù)組元素的地址。函數(shù)從這一地址開始依次輸出,直至遇到第一個(gè)’\0’。
‘\0’是結(jié)束標(biāo)志,不在輸出字符之列,輸出結(jié)束后不自動(dòng)換行。1.字符串輸入和輸出函數(shù) (1)字符串輸出函數(shù)puts()函數(shù)的調(diào)用形式為:
puts(str);功能:從str指定的地址開始,一次將存儲(chǔ)單元中的各個(gè)字符輸出到顯示器,直到遇到'\0'。例如下列程序段:
charstr[]=“China”;puts(str);注意:在輸出時(shí)將字符串結(jié)束標(biāo)志轉(zhuǎn)換成'\n',即輸出完字符串后換行。8.3.5字符串(字符數(shù)組)處理函數(shù)(2)字符串輸入函數(shù)gets()函數(shù)的調(diào)用形式:
gets(str);功能:從鍵盤輸入一個(gè)字符串(可包含空格),直到遇到回車符,并將字符串存放到由str指定的字符數(shù)組(或內(nèi)存區(qū)域)中。換行符讀入后,不作為字符串的內(nèi)容,系統(tǒng)自動(dòng)用’\0’代替。函數(shù)調(diào)用完成后,輸入的字符串存放在str開始的內(nèi)存空間中。2.字符串連接函數(shù)strcat()函數(shù)調(diào)用形式為:
strcat(str1,str2)功能:將以str2為首地址的字符串連接到str1字符串的后面。從str1原來(lái)的字符串結(jié)束標(biāo)志’\0’處開始連接。例如:
charstrl[13]={“Ilove”};
charstr2[]={“China”};
printf("%s",strcat(str1,str2)); 輸出結(jié)果為:
IloveChinastr1必須足夠大格式:strcpy(字符數(shù)組1,字符數(shù)組2);功能:將字符數(shù)組2拷貝到字符數(shù)組1中;
例如:charstr1[10],str2[]={“Computer”}; strcpy(str1,str2);
執(zhí)行后str1中的內(nèi)容為:Computer;注意:字符數(shù)組1的長(zhǎng)度應(yīng)大到足夠容納字符串2.
字符數(shù)組2的形式可以是字符數(shù)組名也可以是字符串常量. 如:strcpy(str1,“Computer”);3.字符串拷貝函數(shù)strcpy()
格式:strcmp(字符串1,字符串2);功能:對(duì)兩個(gè)字符串從左到右逐個(gè)字符進(jìn)行比較,直到相應(yīng)位置上的字符不一樣或遇到‘\0’,比較結(jié)果由函數(shù)返回
(1)如果字符串1=字符串2,函數(shù)返回值為0(2)如果字符串1>字符串2,函數(shù)返回值為正整數(shù)
(3)如果字符串1<字符串2,函數(shù)返回值為負(fù)整數(shù)4、字符串比較函數(shù)strcmp()格式:strlen(字符串);功能:測(cè)試字符串的實(shí)際長(zhǎng)度(不包括‘\0’)
如:charstr[15]={“Ilovechina”}; printf(“%d”,strlen(str));
結(jié)果:125、測(cè)字符串長(zhǎng)度函數(shù)strlen()8.3.6字符數(shù)組應(yīng)用【例8.13】編寫程序求一個(gè)字符串的逆串。如:字符串”abcdefg”的逆串為:”gfedcba”。main(){charstr[50];intc,i,j,n;
printf("Pleaseinputthestring:\n");
scanf("%s",str);
for(n=0;str[n]!=‘\0’;n++);
for(i=0,j=n-1;i<j;i++,j--){c=str[i];str[i]=str[j];str[j]=c;}printf("Reversedstring:\n%s",str);}gets(str);n=strlen(str);【例8.14】編寫程序?qū)⑤斎氲膬蓚€(gè)字符串連接起來(lái),以實(shí)現(xiàn)strcat()函數(shù)的功能。#include"string.h"main(){charstr1[50],str2[20];
inti,j=0;
printf("PleaseinputthestringNo.1:\n");
gets(str1);
printf("Pleaseinpu
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省南京市棲霞區(qū)、雨花區(qū)、江寧區(qū)2025屆中考最后沖刺模擬(一)物理試題文試題含解析
- 畢節(jié)職業(yè)技術(shù)學(xué)院《高級(jí)英語(yǔ)Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢大學(xué)《工程倫理學(xué)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南城建職業(yè)技術(shù)學(xué)院《食品無(wú)損檢測(cè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025屆浙江省金華市金東區(qū)初三下學(xué)期定時(shí)訓(xùn)練化學(xué)試題含解析
- 長(zhǎng)沙南方職業(yè)學(xué)院《打印技術(shù)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 安徽省蕪湖市2024-2025學(xué)年數(shù)學(xué)四下期末考試試題含解析
- 湖南省十四校聯(lián)考2024-2025學(xué)年高三下學(xué)期期末聯(lián)考化學(xué)試題含解析
- 浙江工業(yè)大學(xué)《生態(tài)工程學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆能源職業(yè)技術(shù)學(xué)院《早教機(jī)構(gòu)環(huán)境創(chuàng)設(shè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 《檢驗(yàn)檢測(cè)機(jī)構(gòu)監(jiān)督管理辦法》培訓(xùn)結(jié)業(yè)考核試題附答案
- DB13(J)∕T 105-2017 預(yù)應(yīng)力混凝土管樁基礎(chǔ)技術(shù)規(guī)程
- 加壓氣化操作規(guī)程(共115頁(yè))
- 標(biāo)準(zhǔn)魯班尺尺寸對(duì)比表
- 初中綜合實(shí)踐課程標(biāo)準(zhǔn)
- 基于STC89C52單片機(jī)-紅外智能循跡小車
- PackingList外貿(mào)裝箱單模板
- 談文旅融合發(fā)展的深層意義
- 自考勞動(dòng)法名詞解釋和論述歷年真題重要考點(diǎn)必須掌握
- 第三章-件雜貨裝卸工藝
- 數(shù)據(jù)中心項(xiàng)目運(yùn)營(yíng)方案-范文參考
評(píng)論
0/150
提交評(píng)論