老鐵們,大家好,相信還有很多朋友對于c語言定義二維數(shù)組和c語言定義二維數(shù)組要啥要求的相關(guān)問題不太懂,沒關(guān)系,今天就由我來為大家分享分享c語言定義二維數(shù)組以及c語言定義二維數(shù)組要啥要求的問題,文章篇幅可能偏長,希望可以幫助到大家,下面一起來看看吧!
C語言二維數(shù)組,怎么理解
相信題主應(yīng)該明白C語言中基本數(shù)據(jù)類型的變量,例如定義一個float型變量:
floata=3.14;變量a能表示一個數(shù)值,但是現(xiàn)實生活中,僅僅使用一個單數(shù)值常常是不能完成任務(wù)的。更多情況下,需要解決的問題數(shù)據(jù)類型都是比較復(fù)雜的。
一維數(shù)組小明班級有40名同學(xué),現(xiàn)在考試成績出來了,要求我們使用C語言把它們的成績從高到低排出來。要用C語言解決這個問題,首先要用C語言把40名同學(xué)的成績表示出來。但是總不可能定義40個變量來存儲各位同學(xué)的成績吧?
好在C語言提供了數(shù)組語法,我們定義一個score數(shù)組用于解決這個問題是非常合適的:
floatscore[40];score有40個元素,可以表示40個同學(xué)的成績。C語言在內(nèi)存中開辟一塊連續(xù)的內(nèi)存,供score使用,這塊內(nèi)存的大小等于40*sizeof(float)字節(jié)。
二維數(shù)組要是現(xiàn)實生活中,所有問題都這么簡單就好了,那我只要利用C語言的一維數(shù)組,就能走遍天下都不怕了。但是事與愿違,哪怕只是一個9宮格,一維數(shù)組已經(jīng)不方便描述它了。
難道要定義3個一維數(shù)組來描述這個9宮格?就算可以,要是這個表再大點呢?比如1000行,1000列呢?更進(jìn)一步的,要是希望我們使用C語言描述笛卡爾二維坐標(biāo)系,使用一維數(shù)組豈不是麻煩死了?
二維坐標(biāo)系里的坐標(biāo)怎樣表示方便呢?數(shù)學(xué)中的表示方法就不錯,橫坐標(biāo)為a,縱坐標(biāo)為b的點,寫作(a,b)。
為了表述方便,使用P表示9宮格。如果在P中畫上坐標(biāo)軸,那每個格子描述起來就方便了,P(0,0)=0,P(0,1)=1,...
那要是C語言也能這么用,表示9宮格就太方便了,對不?實際上,還真可以。請看:
floatpos[9][9];pos[0][0]=0;pos[0][1]=1;幾乎與用坐標(biāo)描述一模一樣,這可比用一維數(shù)組描述方便多了。類似的,三維數(shù)組,四維數(shù)組,都有適合使用它們的時候,理解方法也同二維數(shù)組相似。
二維數(shù)組的內(nèi)存分配對于人類來說方便的,死板的計算機不一定也這么認(rèn)為。實際上,C語言希望“規(guī)則”越少越好,它不怕麻煩,就怕“靈活”。
C語言對內(nèi)存的分配方式,可不會隨著人類認(rèn)為的“維度”變化而變化。它就一種分配內(nèi)存的方式,不管你是幾維數(shù)組,分配內(nèi)存統(tǒng)一按照線性劃分。
對于P[1][2],C語言會將其解釋為P[1*3+2]。計算機最恨的就是“動腦”了,能用一維解決,就絕對不用二維。
而我們?nèi)祟悾钕矚g的就是,怎樣方便怎樣來。這也算是人與機器的區(qū)別吧。
歡迎在評論區(qū)一起討論,質(zhì)疑。文章都是手打原創(chuàng),每天最淺顯的介紹C語言、linux等嵌入式開發(fā),喜歡我的文章就關(guān)注一波吧,可以看到最新更新和之前的文章哦。
C語言二維數(shù)組的定義和引用
一維數(shù)組只有一個下標(biāo),稱為一維數(shù)組,其數(shù)組元素也稱為單下標(biāo)變量。在實際問題中有很多量是二維的或多維的,因此C語言允許構(gòu)造多維數(shù)組。多維數(shù)組元素有多個下標(biāo),以標(biāo)識它在數(shù)組中的位置,所以也稱為多下標(biāo)變量。本節(jié)只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推而得到。
二維數(shù)組的定義
二維數(shù)組定義的一般形式是:類型說明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]其中常量表達(dá)式1表示第一維下標(biāo)的長度,常量表達(dá)式2表示第二維下標(biāo)的長度。例如:
inta[3][4];
說明了一個三行四列的數(shù)組,數(shù)組名為a,其下標(biāo)變量的類型為整型。該數(shù)組的下標(biāo)變量共有3×4個,即:
二維數(shù)組在概念上是二維的,即是說其下標(biāo)在兩個方向上變化,下標(biāo)變量在數(shù)組中的位置也處于一個平面之中,而不是象一維數(shù)組只是一個向量。但是,實際的硬件存儲器卻是連續(xù)編址的,也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數(shù)組,可有兩種方式:一種是按行排列,即放完一行之后順次放入第二行。另一種是按列排列,即放完一列之后再順次放入第二列。在C語言中,二維數(shù)組是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四個元素也是依次存放。由于數(shù)組a說明為int類型,該類型占兩個字節(jié)的內(nèi)存空間,所以每個元素均占有兩個字節(jié)。二維數(shù)組元素的引用
二維數(shù)組的元素也稱為雙下標(biāo)變量,其表示的形式為:數(shù)組名[下標(biāo)][下標(biāo)]其中下標(biāo)應(yīng)為整型常量或整型表達(dá)式。例如:a[3][4]表示a數(shù)組三行四列的元素。下標(biāo)變量和數(shù)組說明在形式中有些相似,但這兩者具有完全不同的含義。數(shù)組說明的方括號中給出的是某一維的長度,即可取下標(biāo)的最大值;而數(shù)組元素中的下標(biāo)是該元素在數(shù)組中的位置標(biāo)識。前者只能是常量,后者可以是常量,變量或表達(dá)式。【例7-6】一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。
可設(shè)一個二維數(shù)組a[5][3]存放五個人三門課的成績。再設(shè)一個一維數(shù)組v[3]存放所求得各分科平均成績,設(shè)變量average為全組各科總平均成績。編程如下:
#include<stdio.h>
intmain(void){
inti,j,s=0,average,v[3],a[5][3];
printf("inputscore\n");
for(i=0;i<3;i++){
for(j=0;j<5;j++){
scanf("%d",&a[j][i]);
s=s+a[j][i];
}
v[i]=s/5;
s=0;
}
average=(v[0]+v[1]+v[2])/3;
printf("math:%d\nclanguag:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",average);
return0;
}
程序中首先用了一個雙重循環(huán)。在內(nèi)循環(huán)中依次讀入某一門課程的各個學(xué)生的成績,并把這些成績累加起來,退出內(nèi)循環(huán)后再把該累加成績除以5送入v[i]之中,這就是該門課程的平均成績。外循環(huán)共循環(huán)三次,分別求出三門課各自的平均成績并存放在v數(shù)組之中。退出外循環(huán)之后,把v[0]、v[1]、v[2]相加除以3即得到各科總平均成績。最后按題意輸出各個成績。
二維數(shù)組的初始化
二維數(shù)組初始化也是在類型說明時給各下標(biāo)變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。例如對數(shù)組a[5][3]:
按行分段賦值可寫為:
inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
按行連續(xù)賦值可寫為:
inta[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};這兩種賦初值的結(jié)果是完全相同的。【例7-7】求各科平局分和總成績平均分。
#include<stdio.h>
intmain(void){
inti,j,s=0,average,v[3];
inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
for(i=0;i<3;i++){
for(j=0;j<5;j++)
s=s+a[j][i];
v[i]=s/5;
s=0;
}
average=(v[0]+v[1]+v[2])/3;
printf("math:%d\nclanguag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",average);
return0;
}
對于二維數(shù)組初始化賦值還有以下說明:1)可以只對部分元素賦初值,未賦初值的元素自動取0值。例如:
inta[3][3]={{1},{2},{3}};
是對每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:100200300
inta[3][3]={{0,1},{0,0,2},{3}};
賦值后的元素值為:0100023002)如對全部元素賦初值,則第一維的長度可以不給出。例如:
inta[3][3]={1,2,3,4,5,6,7,8,9};
可以寫為:
inta[][3]={1,2,3,4,5,6,7,8,9};
3)數(shù)組是一種構(gòu)造類型的數(shù)據(jù)。二維數(shù)組可以看作是由一維數(shù)組的嵌套而構(gòu)成的。設(shè)一維數(shù)組的每個元素都又是一個數(shù)組,就組成了二維數(shù)組。當(dāng)然,前提是各元素類型必須相同。根據(jù)這樣的分析,一個二維數(shù)組也可以分解為多個一維數(shù)組。C語言允許這種分解。如二維數(shù)組a[3][4],可分解為三個一維數(shù)組,其數(shù)組名分別為:a[0]a[1]a[2]對這三個一維數(shù)組不需另作說明即可使用。這三個一維數(shù)組都有4個元素,例如:一維數(shù)組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。必須強調(diào)的是,a[0],a[1],a[2]不能當(dāng)作下標(biāo)變量使用,它們是數(shù)組名,不是一個單純的下標(biāo)變量。
c語言定義二維數(shù)組要啥要求
定義二維數(shù)組要指定二維數(shù)組的規(guī)模,并做初始化
c語言初學(xué)二維數(shù)組問題
定義方法
數(shù)組類型數(shù)組名稱[一維長度][二維長度]
使用方法
循環(huán)嵌套常用for循環(huán)雙層嵌套循環(huán)對數(shù)組進(jìn)行遍歷
C語言中一個二維數(shù)組,它的數(shù)組名是a那a和*a有什么區(qū)別
當(dāng)定義二維數(shù)組a[M][N]時,數(shù)組名可以認(rèn)為是二維指針,其指向二維數(shù)組的首地址。于是a的值就是首地址的值。而*a,就是a[0],a[0]是第一行的標(biāo)記,代表第一行的首地址。在二維數(shù)組中,所有元素都是緊密排列的,這樣整個數(shù)組的首地址,第一行的首地址,和第一個元素的首地址,即a,a[0],&a[0][0]都是相同的。于是a和*a的值是相同的。
關(guān)于c語言定義二維數(shù)組和c語言定義二維數(shù)組要啥要求的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。