電子科學(xué)與技術(shù)計(jì)算機(jī)知識(shí)點(diǎn)第7章數(shù)組_第1頁(yè)
電子科學(xué)與技術(shù)計(jì)算機(jī)知識(shí)點(diǎn)第7章數(shù)組_第2頁(yè)
電子科學(xué)與技術(shù)計(jì)算機(jī)知識(shí)點(diǎn)第7章數(shù)組_第3頁(yè)
電子科學(xué)與技術(shù)計(jì)算機(jī)知識(shí)點(diǎn)第7章數(shù)組_第4頁(yè)
電子科學(xué)與技術(shù)計(jì)算機(jī)知識(shí)點(diǎn)第7章數(shù)組_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第七章多維數(shù)組數(shù)組具有的特點(diǎn)1、數(shù)組元素的個(gè)數(shù)必須在定義時(shí)確定2、同一數(shù)組中的數(shù)組元素的類(lèi)型是相同的3、數(shù)組元素的作用相當(dāng)于簡(jiǎn)單變量4、同一數(shù)組中的數(shù)組元素占連續(xù)的地址空間7.1

一維數(shù)組7.1.1一維數(shù)組的定義形式:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式];例:inta[20];floatx[100];其中a和x都是數(shù)組名。代表數(shù)組元素的個(gè)數(shù)1.數(shù)組名的確定方法同變量名。2.C語(yǔ)言用方括號(hào)[]表示數(shù)組元素個(gè)數(shù)。對(duì)于inta[5];表示有5個(gè)元素,元素的下標(biāo)從0開(kāi)始.數(shù)組a的元素分別為:a[0],a[1],a[2],a[3],a[4]數(shù)組a在內(nèi)存中的存放順序:a[0]的值a[1]的值a[2]的值a[3]的值a[4]的值注意:在沒(méi)有給數(shù)組元素賦值以前,沒(méi)有確定的值。3.常量表達(dá)式為常量和符號(hào)常量。不允許有變量,其表達(dá)式的值代表了元素的個(gè)數(shù)。例:inta[20];

表示有20個(gè)元素且元素從0開(kāi)始編排:a[0],a[1]…,a[19]7.1.2一維數(shù)組的初始化1.對(duì)全部元素賦初值。如:inta[10]={10,11,12,13,14,15,16,17,18,19}表示數(shù)組元素的值為:a[0]=10;a[1]=11;a[9]=19;2.對(duì)部分元素賦初值(前面的連續(xù)元素)。如:在此,只有前5個(gè)元素初值確定。intb[10]={0,1,2,3,4};表示數(shù)組元素的值為:b[0]=0;b[1]=1;b[2]=2;b[3]=3;b[4]=4;注意:不能只對(duì)不連續(xù)部分元素或后面的連續(xù)元素賦初值。語(yǔ)句:

inta[10]={,,,,,1,2,3,4,5};inta[10]={1,,3,,5,,7,,9,,};是錯(cuò)誤的。3.如對(duì)數(shù)組元素賦同一初值,必須一一寫(xiě)出:staticinta[10]={2,2,2,2,2,2,2,2,2,2};不可寫(xiě)成任何其他形式。如:不可寫(xiě)成:staticinta[{10*2}];4.若賦全部元素的初值,可省略常量表達(dá)式

inta[]={0,1,2,3};

表示a[4],即只有4個(gè)元素。2.引用方式:數(shù)組名[下標(biāo)]

代表了一個(gè)元素,等價(jià)一個(gè)同類(lèi)型的變量。3.一般地,一維數(shù)組各元素分配在連續(xù)的內(nèi)存單元之中。1.須象使用變量那樣,先定義,后使用例:a[0]5+a[1]6為正確的算術(shù)表達(dá)式7.2一維數(shù)組使用7.2.1一維數(shù)組引用方式/*exam7_1.c一維數(shù)組在程序中的使用*/#include<stdio.h>voidmain(){ inti,a[5]={1,2,3,4,5};/*初始化數(shù)組*/ printf("輸出數(shù)組元素的正確值:\n"); for(i=0;i<5;i++) printf("%d\t",a[i]); printf("\n輸出超出下標(biāo)的元素的值:\n"); for(i=5;i<10;i++)/*使用超出下標(biāo)的元素*/ printf("%d\t",a[i]); printf("\n改變數(shù)組元素的值:\n"); a[0]=(a[1]+a[2])*(a[3]+a[4]); printf("a[0]=%d\n",a[0]); getchar();}/*exam7_2.cFibonaci數(shù)列的前20項(xiàng)*/#include<stdio.h>#include<conio.h>main(){ inti,FBNC[20]; FBNC[0]=0; FBNC[1]=1; for(i=1;i,i<=19;i++) FBNC[i+1]=FBNC[i]+FBNC[i-1]; printf("FBNCNumberis:\n"); for(i=1;i<=20;i++) { if(i==6||i==11||i==16) printf("\n"); printf("%7d",FBNC[i]); } getch();}7.2.2數(shù)組作為函數(shù)參數(shù)分為兩種情況:1.

數(shù)組元素作為實(shí)參2.

數(shù)組名同時(shí)為形、實(shí)參一、數(shù)組元素作為函數(shù)的參數(shù)使用方法:把數(shù)組元素作為函數(shù)的實(shí)參。由于數(shù)組元素的性質(zhì)與相同類(lèi)型的簡(jiǎn)單變量的性質(zhì)完全相同,因此,把數(shù)組元素作為函數(shù)的參數(shù)也和簡(jiǎn)單變量一樣。作用:傳值。intx,a[10];如:

xa[5]即a[5]為一元素,與x完全一樣。例:設(shè)有兩個(gè)同樣大小的一維數(shù)組a[10]、b[10],將相應(yīng)元素比較,統(tǒng)計(jì)a中大于b中對(duì)應(yīng)元素的個(gè)數(shù),小于的個(gè)數(shù),相等時(shí)的個(gè)數(shù)。#include<stdio.h>main(){ inta[10],b[10],i,n=0,m=0,k=0; printf("enterarraya(10number):\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); printf("enterarrayb(10number):\n"); for(i=0;i<10;i++) scanf("%d",&b[i]); printf("\n"); for(i=0;i<10;i++) { if(large(a[i],b[i])==1) n=n+1; elseif(large(a[i],b[i])==0) m=m+1; elsek=k+1; }

printf("a[i]>b[i]%dtimes\na[i]=b[i]%dtimes\na[i]<b[i]%dtimes\n",n,m,k); if(n>k) printf("arrayaislargerthanarrayb\n"); elseif(n<k) printf("arrayaissmallerthanarrayb\n"); elseprintf("arrayaisequaltoarrayb\n");}intlarge(x,y)intx,y;{ intflag; if(x>y) flag=1; elseif(x<y) flag=-1; elseflag=0; return(flag);}運(yùn)行情況如下:enterarraya:1357986420enterarrayb:5389–1–35604a[i]>b[i]4timesa[i]=b[i]1timesa[i]<b[i]5timesarrayaissmallerthanarrayb二、數(shù)組名作為函數(shù)參數(shù)1.數(shù)組名的作用數(shù)組名代表的是數(shù)組的起始地址;也就是第1個(gè)元素的地址。使用數(shù)組名作為函數(shù)的參數(shù)時(shí),形參和實(shí)參必須是同一類(lèi)型的數(shù)組名,系統(tǒng)采用地址傳送方式進(jìn)行數(shù)據(jù)傳遞,即實(shí)參的首地址傳遞給形參的首地址,實(shí)參與形參共享相同的數(shù)據(jù)單元。使用方法:函數(shù)的實(shí)參和形參都必須是數(shù)組名。作用:傳址。2.把數(shù)組名作為函數(shù)參數(shù)的規(guī)則(可以在函數(shù)中修改數(shù)組元素的值)#include<stdio.h>main(){ voidswap(intx[]); inta[2]={2,7}; printf("a[0]:%d,a[1]:%d\n",a[0],a[1]); swap(a); printf("a[0]:%d,a[1]:%d\n",a[0],a[1]);}voidswap(intx[2]){ intt; t=x[0]; x[0]=x[1]; x[1]=t;}運(yùn)行情況如下:a[0]:2,a[1]:7a[0]:7,a[1]:27.2.3一維數(shù)組的應(yīng)用例:40個(gè)學(xué)生被邀請(qǐng)來(lái)給餐廳的食品打分,分?jǐn)?shù)為1~10的10個(gè)等級(jí)(1意味著最低分,10表示最高分)。在整數(shù)數(shù)組中設(shè)置這40個(gè)值,然后統(tǒng)計(jì)調(diào)查結(jié)果。

這是一個(gè)典型的數(shù)組應(yīng)用問(wèn)題。我們要統(tǒng)計(jì)每一個(gè)等級(jí)分?jǐn)?shù)(1~10)的出現(xiàn)次數(shù)。#include<stdio.h>#defineRESPONSE_SIZE40#defineFREQUENCY_SIZE11main(){ intanswer,rating; intresponses[RESPONSE_SIZE]={1,2,6,4,8,5,9,7,8, 10,1,6,3,8,6,10,3,8,2,7,6,5,7,6,8,6,7, 5,6,6,5,6,7,5,6,4,8,6,8,10}; intfrequency[FREQUENCY_SIZE]={0}; printf("%6s%17s\n","Rating","Frequency"); for(answer=0;answer<=RESPONSE_SIZE-1;answer++) ++frequency[responses[answer]]; for(rating=1;rating<=FREQUENCY_SIZE-1;rating++) printf("%-6d%17d\n",rating,frequency[rating]);}執(zhí)行結(jié)果:RatingFrequency1222324255611758791103例:

排序問(wèn)題–––計(jì)算機(jī)處理數(shù)據(jù)的一個(gè)重要問(wèn)題排序算法較多,一種最簡(jiǎn)單的算法–––一般排序法用得較多?;舅悸?設(shè)有n個(gè)數(shù),需將它們從小到大順序排列。則:2.在剩下的n–1個(gè)元素中,找出第二小的元素并把它放在第二個(gè)位置上。3.對(duì)上述過(guò)程重復(fù),直至剩下一個(gè)元素。1.從n個(gè)元素中,通過(guò)比較,找出最小元素,放在第一個(gè)位置上。例4:8,4,20,100,28,1,兩次交換第2次:1,4,20,100,28,8–––一次交換第3次:1,4,8,100,28,20–––一次交換第4次:1,4,8,28,100,20,1,4,8,20,100,28兩次交換第5次:1,4,8,20,28,100–––

一次交換第1次:4,8,20,100,28,11,8,20,100,28,4

從以上例子可以看到:用到兩層循環(huán),外層循環(huán)––找第i小的元素,內(nèi)層循環(huán)––對(duì)其后的元素的一一比較。流程圖:初始化輸入n個(gè)元素a數(shù)組i1ji+1a[i]>a[j]交換a[i]

a[j]BANoYesjj+1j>nii+1i>n–1打印結(jié)果結(jié)束內(nèi)循環(huán)外循環(huán)BANoYesYesNo程序:#include<stdio.h> main(){inta[11];inti,j,t;printf("pleaseinput10n~:\n");for(i=1;i<=n;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<=9;i++)for(j=i+1;j<=10;j++)if(a[i]>a[j])k=i;{t=a[i];a[i]=a[j];a[j]=t;}printf("thesorted:\n");for(i=1;i<=10;i++)printf("%d",a[i];}k=j;if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}printf("thesorted:\n");for(i=1;i<=10;i++)printf("%d",a[i];}7.3多維數(shù)組7.3.1二維數(shù)組的定義形式:例:inta[4][10];floatx[8][20];類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];2.可將二維數(shù)組的元素看成為若干個(gè)特殊的一維數(shù)組??煽闯桑河腥齻€(gè)特殊的一維數(shù)組b[0],b[1],b[2],每一個(gè)又有四個(gè)元素:1.不可將定義寫(xiě)為inta[4,10]。注意:b[0][0],b[0][1],b[0][2],b[0][3],b[1][0],b[1][1],b[1][2],b[1][3],b[2][0],b[2][1],b[2][2],b[2][3],如:

intb[3][4];3.二維數(shù)組的存放方式為:按行優(yōu)先。由此可推廣至三維、n維數(shù)組的定義和存放。4.初始化:即:最右邊的下標(biāo)變化最快。(1)

按行給二維數(shù)組賦初值:staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};或:staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

(2)

可以對(duì)部分元素賦初值,但需表達(dá)清楚。則相當(dāng)于若:

staticinta[3][4]={1,2,3,8}則相當(dāng)于如:staticinta[3][4]={{1,2},{3},{8}}。(3)可通過(guò)賦初值決定數(shù)組大小。如為二維,則只可省略第一維的大小。staticinta[][4]={1,2,3,…,12};二、二維數(shù)組元素的引用形式:其中的下標(biāo)為整型表達(dá)式,但不得越界。與一維數(shù)組元素一樣,二維數(shù)組元素相當(dāng)于同類(lèi)型的簡(jiǎn)單變量。數(shù)組名[下標(biāo)1][下標(biāo)2]三、多維數(shù)組的定義形式:例:introom[3][2][3];floatvic[7][12][6][9];類(lèi)型說(shuō)明符數(shù)組名[表達(dá)式1][表達(dá)式2]…...[表達(dá)式n];四、程序舉例a=123456b=142536例1:

將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。例如:#include<stdio.h>main(){ staticinta[2][3]={{1,2,3},{4,5,6}}; staticintb[3][2],i,j; printf("arraya:\n"); for(i=0;i<=1;i++){ for(j=0;j<=2;j++){ printf("%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("%5d",b[i][j]); printf("\n"); }}執(zhí)行結(jié)果:arraya:123456arrayb:142536注意:(1)數(shù)組元素?cái)?shù)據(jù)的輸入必須以循環(huán)方式進(jìn)行或者定義時(shí)置初值。(2)二維數(shù)組一般用二重循環(huán)對(duì)每個(gè)元素賦值。例.有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及所在的行號(hào)和列號(hào)。先用N-S流程圖表示算法max=a[0][0]fori=0to2forj=0to3a[i][j]>maxmax=a[i][j]row=icolum=j輸出:max和row,colum真假程序如下:#include<stdio.h>main(){inti,j,row=0,colum=0,max;staticinta[3][4]={{1,2,3,4},{9,8,7,6},{–10,10,–5,2}};max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}printf("max=%d,row=%d,colum=%d\n",max,row,colum);}輸出結(jié)果為:

max=10,row=2,colum=1注意:要將二維數(shù)組作為函

數(shù)組的參數(shù),可以把

二維數(shù)組看成一維數(shù)

組,然后進(jìn)行參數(shù)傳

遞。注意:

二維數(shù)組的元素在內(nèi)存中是按先行后列的順序存放的,因此可以將二維數(shù)組當(dāng)作是一維數(shù)組。例:

有一個(gè)34的矩陣如下:要求:(1)打印出所有元素的和;(2)打印出所有大于平均值的元素。#include<stdio.h>#include<conio.h>intadd_ave(intm,intn,intarr[]);voidprt_up(intm,intn,floataverage,intarr[]);main(){intA[3][4]={{6,4,9,13},{1,3,8,7},{3,4,10,2}};inti=3,j=4,sum;floatave;sum=add_ave(i,j,A[0]);printf("Thenumberorsum=%d\n",sum);ave=(float)((sum)/(ij));printf("Thenumberoraverage=%5.2f\n",ave);prt_up(i,j,ave,A[0]);}intadd_ave(intm,intn,intarr[]);{inti;inttotal=0;for(i=0;i<mn;i++)total=total+arr[i];return(total);}voidprt_up(intm,intn,floataverage,intarr[]){inti,j;printf("ThenumberofBiggerthenaverageare:");for(i=0;i<m;i++){for(j=0;j<n;j++)if(arr[in+j]>average)printf("arr[%d][%d]=%d\t",i,j,arr[in+j]);}}運(yùn)行結(jié)果:Thenumberofsum=42Thenumberofaverage=3.00ThenumberofBiggerthenaverageare:arr[0][0]=6arr[0][1]=4arr[0][2]=9arr[1][2]=8arr[1][3]=7arr[2][1]=4arr[2][2]=10二維數(shù)組與一維數(shù)組的對(duì)應(yīng)關(guān)系:6A[0][0]A[0][1]A[0][2]A[0][3]A[1][0]A[1][1]A[1][2]A[1][3]A[2][0]A[2][1]A[2][2]A[2][3]4913138734122A[0]A[1]A[2]A[3]A[4]A[5]A[6]A[7]A[8]A[9]A[10]A[11]7.4字符串和字符數(shù)組一、字符數(shù)組的定義類(lèi)型名數(shù)組名大小charc[10];1.初始化:

(1)直接給出字符串中的各字符

staticchara[4]={'G','o','o','d'};若字符多于元素個(gè)數(shù),則語(yǔ)法錯(cuò),反之,后面補(bǔ)"\0"存放字符數(shù)據(jù)。字符串–––用字符數(shù)組存放。(2)可以去掉定義時(shí)的大小設(shè)置,而通過(guò)自動(dòng)賦值決定 長(zhǎng)度(大小)staticcharx[]={'I','','a','m','','a','','s','t','u','d','e','n','t'};(3)前面說(shuō)過(guò),字符串常量用“”表示,且由‘\0’結(jié)尾.staticcharx[]={"Iamastudent."};

則長(zhǎng)度為15+1=16,其中x[15]存放‘\0’,其中{}亦可省略。二、字符數(shù)組的特點(diǎn)用于存放字符或字符串。如:charw[7]={'s','t','u','d','e','n','t'};w是一個(gè)可以存放7個(gè)字符的數(shù)組而:charu[8]={"student"};(或?qū)懗桑篶haru[]="student";)u是一個(gè)可存放8個(gè)字符的數(shù)組對(duì)上面兩種數(shù)組定義,有:w[0]=u[0]=sw[1]=u[1]=tw[2]=u[2]=uw[3]=u[3]=dw[4]=u[4]=ew[5]=u[5]=nw[6]=u[6]=tu[7]=\0三、字符串的特點(diǎn)(1)字符串用雙引號(hào)""括起來(lái)。(2)字符串的結(jié)束標(biāo)志為'\0',由系統(tǒng)提供。例:charbn[]="computer";則:數(shù)組bn的長(zhǎng)度為9bn[0]='c'bn[3]='p'bn[6]='e'bn[1]='o'bn[4]='u'bn[7]='r'bn[2]='m'bn[5]='t'bn[8]='\0'格式符:

%c–––逐個(gè)輸入/輸出字符。

%s–––整個(gè)串一次輸入/輸出。1.輸出(用%s)

(2)

在printf中須直接寫(xiě)數(shù)組名.

staticcharc[]={"Iamastudent"};printf("%s",c);四、字符數(shù)組的輸入輸出(1)用%s輸出時(shí),不輸出‘\0’.(3)

若數(shù)組長(zhǎng)度大于字符串長(zhǎng)度,則遇到‘\0’即停止輸出

staticcharc[10]="china";printf("%s",c);(4)

輸出時(shí)遇到第一個(gè)‘\0’即結(jié)束。2.輸入(用%s)(2)輸入多個(gè)字符串,可用空格隔開(kāi)。

staticcharstr1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);(1)輸入字符串時(shí),系統(tǒng)自動(dòng)加上‘\0’則:輸入Howareyoustr1:Howstr2:arestr3:you輸入:Howareyou則只會(huì)將How輸入,且存為str:How\0……

但若:staticcharstr[13]scanf("%s",str);注:

scanf中須用地址量,數(shù)組名表示地址量。#include<stdio.h>

main()

{charname[13];

inti;

for(i=0;i<=12;i++)

scanf(“%c”,&name[i]);

for(i=0;i<=12;i++)

printf(“%c”,name[i]);

scanf(“%s”,name);

printf(“%s”,name);

}例:采用不同的方式輸入輸出字符串運(yùn)行結(jié)果:

Pear&ApplePear&ApplePear&ApplePear#include<stdio.h>#include<conio.h>main(){inti;charname[7][4]={"sun","mon","tue","wed","thu","wen","sat"};printf("Resultis:\n");name[0][3]='&';name[2][3]='&';name[5][3]='&';for(i=0;i<

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論