




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七章數(shù)組引言7.1一維數(shù)組的定義和引用7.2二維數(shù)組的定義和引用7.3字符數(shù)組經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第1頁!引言一、數(shù)組的引入為了便于處理一批類型相同的數(shù)據(jù),引入了數(shù)組類型假設(shè)現(xiàn)在要求保存每個學(xué)生的成績,那就不能只使用一個變量s了,而需要40個變量,但這樣一來輸入、輸出、計算都會變得繁瑣.在這種情況下,我們可以使用數(shù)組類型,說明一個含有40個元素的數(shù)組,每個數(shù)組元素存放一個成績,成績的輸入、輸出、計算都可通過循環(huán)來實(shí)現(xiàn)例:某班有40名學(xué)生,求該班成績的平均分#include<stdio.h>main(){intj,sum,s;floatave;sum=0;for(j=1;j<=40;j++){scanf(“%d”,&s);sum=sum+s;}ave=sum/40;printf(“ave=%f”,ave);}經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第2頁!二、數(shù)組的概念1.數(shù)組:由具有相同類型的固定數(shù)量的元素組成的結(jié)構(gòu)2.數(shù)組元素:每一個數(shù)組元素都是一個變量,為了與一般的變量相區(qū)別,我們稱數(shù)組元素為下標(biāo)變量3.下標(biāo)變量在數(shù)組中的位置序號稱下標(biāo)
#include<stdio.h>main(){intj,sum,s[40];floatave;sum=0;for(j=0;j<=39;j++){scanf(“%d”,&s[j]);sum=sum+s[j];}ave=sum/40;printf(“ave=%f”,ave);}經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第3頁!7.1一維數(shù)組的定義和引用
一、一維數(shù)組的定義
1.格式:類型標(biāo)識符數(shù)組名[常量表達(dá)式];
例:inta[10];2.說明
(1)數(shù)組名是用戶定義的標(biāo)識符,
數(shù)組名表示了一個存儲區(qū)的首地址
(即個數(shù)組元素的地址)(2)數(shù)組長度:指數(shù)組中元素的個數(shù)
(3)數(shù)組元素的下標(biāo)由零開始數(shù)組a有10個元素:a[0],a[1]…a[9](4)常量表達(dá)式中不能包含變量,
常量表達(dá)式的值不能是實(shí)數(shù)84:668095101010121014:1028a[0]a[1]a[2]:a[9]經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第4頁!三、一維數(shù)組的初始化1.概念:在定義一維數(shù)組時對各元素指定初始值稱為數(shù)組的初始化如:inta[5]={1,3,5,7,9};2.說明對數(shù)組的全體元素指定初值,初值用{}括起來,數(shù)據(jù)之間用逗號分開.在這種情況下,可以不指明數(shù)組的長度,系統(tǒng)會根據(jù){}內(nèi)數(shù)據(jù)的個數(shù)確定數(shù)組的長度
如:inta[]={1,3,5,7,9};(2)對數(shù)組中部分元素指定初值(這時不能省略數(shù)組長度)
如:inta[5]={1,3,5};(3)使數(shù)組中的全部元素初始值都為0
如:inta[5]={0,0,0,0,0};更簡單的寫法:inta[5]={0};經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第5頁!例2:用數(shù)組求fibonacci(斐波納契)數(shù)列的前20個數(shù)main(){inti,f[20]={1,1};for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%4==0)printf(“\n”);printf(“%6d”,f[i]);}}110000:0f[0]f[1]f[2]f[3]f[4]f[5]:f[19]23586765i=2f[2]=f[0]+f[1]i=3f[3]=f[1]+f[2]i=4f[4]=f[2]+f[3]經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第6頁!#include<stdio.h>main(){inta[6],i,j,t;for(i=0;i<6;i++)scanf(“%d”,&a[i]);for(i=0;i<5;i++)
for(j=0;
j<5-i
;j++)
if(a[j]>a[j+1]){
t=a[j];a[j]=a[j+1];a[j+1]=t;
}for(i=0;i<6;i++)printf(“%3d”,a[i]);}輸入6個數(shù)據(jù)用嵌套的for循環(huán)實(shí)現(xiàn)排序外層循環(huán)控制進(jìn)行幾輪比較內(nèi)層循環(huán)控制每一輪的比較次數(shù)如果前面的數(shù)大于后面的數(shù),則進(jìn)行交換輸出排序后的6個數(shù)據(jù)經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第7頁!為了解決問題,我們在程序中設(shè)置一個變量flag,用它記錄在一輪比較中是否進(jìn)行了交換在每輪比較開始前flag=0,如果在此輪比較中進(jìn)行了交換,則flag=1,在一輪比較結(jié)束后,判斷flag的值是否為1,如果值為0,說明在此輪比較中沒有進(jìn)行交換(即已經(jīng)完成排序了),此時可以終止循環(huán)(即結(jié)束排序)如果flag的值為1,則要繼續(xù)進(jìn)行排序#include<stdio.h>main(){inta[6],i,j,t,
flag;
for(i=0;i<6;i++)scanf(“%d”,&a[i]);
i=0;
do
{
flag=0;
for(j=0;
j<5-i
;j++)
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;
flag=1;
}
i++;
}
while(flag);
for(i=0;i<6;i++)printf(“%3d”,a[i]);}經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第8頁!3.存儲形式:數(shù)組的元素在內(nèi)存中是連續(xù)存放的
inta[3][3];的存放形式如下:a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[0][0]a[0][1]a[0][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]101010121014101610181020102210241026
二、二維數(shù)組的引用數(shù)組元素的表示形式:
數(shù)組名[下標(biāo)][下標(biāo)]
注意:(1)每個下標(biāo)都要用[]括起來如a[2][1]不能寫成a[2,1](2)下標(biāo)不要超過定義的范圍經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第9頁!3.對數(shù)組的部分元素賦初值
inta[3][4]={{1,2},{3},{0,4}};inta[3][4]={1,2,3,4,5,6};1200300004001234560000004.對數(shù)組的全部元素賦初值時可以省略維的長度系統(tǒng)會根據(jù)數(shù)據(jù)的個數(shù)和第二維的長度自動求出維的長度
inta[][4]={{1,2},{0,3,4},{5}};intb[][2]={1,2,3,4,5,6,7,8};數(shù)組a維長度為3數(shù)組b維長度為4
四、二維數(shù)組程序舉例經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第10頁!37126104185209例6:將一個矩陣進(jìn)行轉(zhuǎn)置(即原來的行變?yōu)榱?52093712610418#include<stdio.h>main(){inta[3][4],b[4][3],i,j;for(i=0;i<3;i++)
for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);
for(i=0;i<3;i++)for(j=0;j<4;j++)
b[j][i]=a[i][j];
for(i=0;i<4;i++){for(j=0;j<3;j++)printf(“%5d”,b[i][j]);printf(“\n”);}}輸入數(shù)組a進(jìn)行矩陣轉(zhuǎn)置輸出數(shù)組ba[0][2]b[2][0]a[2][1]b[1][2]7.3字符數(shù)組經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第11頁!
main(){inty[10][10],i,j;for(i=0;i<10;i++){y[i][0]=1;y[i][i]=1;}for(i=2;i<10;i++)for(j=1;j<=i-1;j++)y[i][j]=y[i-1][j]+y[i-1][j-1];for(i=0;i<10;i++){for(j=0;j<=i;j++)printf(“%5d”,y[i][j]);printf(“\n”);}}經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第12頁!7.3字符數(shù)組一、字符數(shù)組和字符串
1.字符數(shù)組定義:charc[10];2.字符串:由若干個有效字符組成的序列有效字符包括字母,數(shù)字,專用字符,轉(zhuǎn)義字符
如:“bfer”“a45-7”“m\tk\n”3.字符串的存儲
C語言中沒有專門的字符串變量,因此字符串存放在字符數(shù)組中,字符串以“\0”作為結(jié)束標(biāo)志例:charc[5];①c[0]=‘O’;c[1]=‘K’;c[2]=‘!’;OK!OK!\0②c[0]=‘O’;c[1]=‘K’;c[2]=‘!’;c[3]=‘\0’;注意:字符數(shù)組與字符串并不相同經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第13頁!三、字符串的輸入1.輸入單個字符
charc[8];inti;scanf(“%c%c%c”,&c[0],&c[1],&c[2]);
for(i=0;i<8;i++)scanf(“%c”,&c[i]);2.輸入一個字符串
scanf(“%s”,c);
說明:用格式字符%s
輸入字符串,字符數(shù)組變量c不需要加地址運(yùn)算符&,因數(shù)組名本身代表數(shù)組的首地址注意:(1)從鍵盤輸入字符串時不加“”
(2)用scanf輸入字符串時,空格和回車符都會作為字符串的分隔符,即scanf不能用來輸入包含有空格的字符串
經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第14頁!四、字符串的輸出1.輸出單個字符charc[8];inti;printf(“%c%c”,c[0],c[1]);for(i=0;i<8;i++)printf(“%c”,c[i]);2.輸出字符串printf(“%s”,c);注意:輸出時不包括字符‘\0’,如果一個字符串中有多個‘\0’
則輸出時遇到個‘\0’即認(rèn)為字符串結(jié)束3.字符串輸出函數(shù)puts(字符數(shù)組)
一次輸出一個字符串,輸出時將‘\0’自動轉(zhuǎn)換成換行符經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第15頁!五、字符串處理函數(shù)(使用字符串函數(shù)時要寫#include<string.h>)1.字符串拷貝函數(shù)注意:C語言不允許用賦值表達(dá)式對字符數(shù)組賦值
chars1[5]=“abc”,s2[3],s3[8];s2=“abc”;s3=s1;/*賦值與初始化不同*//*對s2,s3的賦值都是非法的*/希望字符數(shù)組s2或s3中也存放字符串“abc”不能用賦值而要用字符串拷貝函數(shù)格式:strcpy(字符數(shù)組變量1,字符串2)作用:將字符串2中的字符復(fù)制到字符數(shù)組1中(3)說明:①字符數(shù)組1必須足夠大②字符串可以是字符串常量,也可以是字符數(shù)組變量③拷貝時‘\0’也一起拷貝經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第16頁!2.字符串連接函數(shù)(1)格式:strcat(字符數(shù)組變量1,字符串2)(2)作用:將字符串2中的字符連接到字符串1的后面,產(chǎn)生的新字符串仍存放在字符數(shù)組1中(3)說明:連接時將字符串1末尾的‘\0’將去掉,而在連接后的新字符串末尾添加‘\0’注意:字符數(shù)組1要足夠大例:chars1[10]=“abc”,s2[]=“def”;strcat(s1,s2);strcat(s1,“gh”);abc\0def\0s1s2def\0gh\0經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第17頁!例:intn1,n2,n3;chars1[5],s2[5];n1=strcmp(“abc”,“def”);
strcpy(s1,“dfg”);
strcpy(s2,“you”);n2=strcmp(s1,“def”);n3=strcmp(s1,s2);字符‘a(chǎn)’與‘d’比較n1==-3(97-100)先‘d’與‘d’比較,相同,然后‘f’與‘e’比較n2==1(102-101)字符‘d’與‘y’比較n3==-21(100-121)dfg\0you\0s1s2經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第18頁!作業(yè):7.37.47.57.11上機(jī):7.67.10經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第19頁!二、數(shù)組元素的引用
1.引用形式:數(shù)組名[下標(biāo)]
注意:如果出現(xiàn)a[5]=72;編譯時不會指出錯誤,系統(tǒng)會將a[4]后下一個存儲單元賦值為72,但這樣可能會破壞數(shù)組以外其他變量的值847566809510101012101410161018a[0]a[1]a[2]a[3]a[4]72a[5]1020假設(shè)這個存儲空間是變量x的,實(shí)際上a[5]是不存在的,如果執(zhí)行了a[5]=72,會將x原有的正確數(shù)據(jù)覆蓋掉2.說明(1)下標(biāo)可以是整型常量或整型表達(dá)式
如:a[1],a[2*3](2)數(shù)組定義為inta[5],數(shù)組長度為5
而下標(biāo)在0----4之內(nèi),即a[0]----a[4]經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第20頁!例1:輸入一個數(shù)據(jù),在已知數(shù)組中查找是否有該數(shù)據(jù)5801926374x9a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
main(){inti,x;inta[10]={5,8,0,1,9,2,6,3,7,4};scanf(“%d”,&x);for(i=0;i<10;i++)if(x==a[i]){printf(“find!\n”);
break;}if(i==10)printf(“nofind!\n”);}經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第21頁!例3:用冒泡排序法對6個數(shù)進(jìn)行排序(從小到大)972541a[0]a[1]a[2]a[3]a[4]a[5]725419277547125417945152415792145791412冒泡排序方法:依次比較相鄰的兩個數(shù),將小數(shù)放前面,大數(shù)放后面.n個數(shù)排序需要進(jìn)行n-1輪比較,從第1輪到第n-1輪,各輪的比較次數(shù)依次為:n-1次、n-2次…1次9725419999972541初始狀態(tài)第1輪第2輪第3輪第4輪第5輪7經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第22頁!971245a[0]a[1]a[2]a[3]a[4]a[5]712459124579124579124579第1輪第2輪第3輪第4輪第5輪124579從這道例題中我們發(fā)現(xiàn),在進(jìn)行完第二輪比較后,實(shí)際上排序已經(jīng)完成了,從第三輪開始,后面的比較都是多余的,在這種情況下我們希望可以終止比較.初始狀態(tài)經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第23頁!7.2二維數(shù)組的定義和使用
一、二維數(shù)組的定義
1.概念:一個一維數(shù)組,它的每一個元素都是類型相同的一維數(shù)組,就形成一個二維數(shù)組2.定義形式:
類型標(biāo)識符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]
如:inta[3][4];a[0]a[1]a[2]a[0][0]a[0][1]a[0][2]a[0][3]經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第24頁!
三、二維數(shù)組的初始化
1.分行初始化
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
此方法較直觀,對{}內(nèi)的數(shù)據(jù)賦給行數(shù)組元素,以此類推2.按數(shù)據(jù)的排列順序?qū)?shù)組元素賦初值
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
將數(shù)據(jù)依次賦給元素a[0][0],a[0][1]……a[2][3]123456789101112注意:此方法數(shù)據(jù)沒有明顯的界限,當(dāng)數(shù)據(jù)較多時容易出錯經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第25頁!例5:找出矩陣中最大的數(shù),并輸出其行號和列號52093712610418max0row0col59301212#include<stdio.h>main(){inti,j,row=0,col=0,max;inta[3][4]={{5,2,0,9},{3,7,12,6},{10,4,1,8}};max=a[0][0];
for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i;col=j;}printf(“max=%d\n”,max);printf(“max=a[%d][%d]\n”,row,col);}輸出:max=12max=a[1][2]經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第26頁!例7打印以下的楊輝三角形。(要求打印出10行)11112113311464115101051…….經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第27頁!
main(){inty[11][11],i,j;for(i=1;i<=10;i++){y[i][1]=1;y[i][i]=1;}for(i=3;i<=10;i++)for(j=2;j<=i-1;j++)y[i][j]=y[i-1][j]+y[i-1][j-1];for(i=1;i<=10;i++){for(j=1;j<=i;j++)printf(“%5d”,y[i][j]);printf(“\n”);}}經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第28頁!
二、字符數(shù)組的初始化
1.為數(shù)組中的元素指定初值
charc[8]={‘H’,‘e’,‘l’,‘l’,‘o’};
如果對數(shù)組全部元素指定初值,則可以省略數(shù)組的長度charc[]={‘H’,‘e’,‘l’,‘l’,‘o’};Hello\0\0\0Hello2.對字符數(shù)組指定字符串初值charc[8]={“Hello”};charc[8]=“Hello”;charc[8]={‘H’,‘e’,‘l’,‘l’,‘o’,‘\0’};三種形式等價charc[]=“Hello”;charc[6]=“Hello”;
charc[5]=“Hello”;Hello\0Hello\0錯誤的初始化注意:初始化時數(shù)組的長度應(yīng)足夠大,
確保可以容納所有字符和結(jié)束標(biāo)志‘\0’經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第29頁!3.字符串輸入函數(shù)gets(字符數(shù)組)
如:gets(c);
說明:輸入有空格的字符串時應(yīng)使用函數(shù)gets,
它會讀入全部字符直到遇到回車符為止例:inti;charc[8];①for(i=0;i<8;i++)scanf(“%c”,&c[i]);②scanf(“%s”,c);③gets(c);假設(shè)輸入為:abcdefgh↙abcdefgabcd\0abcdefgh\0注意:用gets輸入字符串時,若輸入字符數(shù)目大于字符數(shù)組的長度,多出的字符則會存放在數(shù)組的合法存儲空間之外經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第30頁!例:chars1[5]=“abc”,s2[10]=“defg”;printf(“%s%s\n”,s1,s2);puts(s1);puts(s2);輸出結(jié)果:abcdefgabcdefg例:inti;charc[8];gets(c);for(i=0;i<8;i++)printf(“%c”,c[i]);printf(“\n”)puts(c);printf(“%s”,c);假設(shè)輸入為:abcdefgh↙abcdefgh\0輸出結(jié)果:abcdefgabcdefghabcdefgh經(jīng)典C語言譚浩強(qiáng)版第七章數(shù)組共35頁,您現(xiàn)在瀏覽的是第31頁!例:c
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度競業(yè)禁止補(bǔ)償金及員工離職補(bǔ)償方案協(xié)議
- 二零二五外貿(mào)公司專利技術(shù)保密協(xié)議書
- 家具定制環(huán)保責(zé)任協(xié)議
- 2025年度泔水處理項(xiàng)目環(huán)境影響評價合同
- 工業(yè)管道設(shè)備采購合同
- 2025在線教育平臺校長述職報告
- 高中家長會 家校攜手共奔赴繽紛暑假共成長課件-高二下學(xué)期暑假家長會
- 高峰時段交通保通措施
- 七年級歷史下冊教學(xué)計劃與實(shí)施策略
- 慢性病護(hù)理中的并發(fā)癥預(yù)防措施分析
- GB/T 41-20161型六角螺母C級
- GB/T 3811-2008起重機(jī)設(shè)計規(guī)范
- CB/T 615-1995船底吸入格柵
- 11471勞動爭議處理(第10章)
- 2022年河南省對口升學(xué)計算機(jī)類專業(yè)課考試真題卷
- 人工智能賦能教育教學(xué)變革的研究
- 經(jīng)營性公墓建設(shè)標(biāo)準(zhǔn)
- 患教-頸動脈斑塊課件
- 新蘇教版科學(xué)五年級下冊全套教學(xué)課件
- 審計部組織架構(gòu)及崗位設(shè)置
- 流行性乙型腦炎PPT課件
評論
0/150
提交評論