柚子快報(bào)激活碼778899分享:算法 【C語(yǔ)言】二維數(shù)組
柚子快報(bào)激活碼778899分享:算法 【C語(yǔ)言】二維數(shù)組
文章目錄
一、前言二、二維數(shù)組的創(chuàng)建和初始化1.創(chuàng)建2.初始化
三、二維數(shù)組的使用四、二維數(shù)組的存儲(chǔ)五、總結(jié)
一、前言
前面學(xué)習(xí)的數(shù)組被稱為一維數(shù)組,數(shù)組的元素都是內(nèi)置類型的,如果我們把一維數(shù)組做為數(shù)組的元 素,這時(shí)候就是二維數(shù)組,二維數(shù)組作為數(shù)組元素的數(shù)組被稱為三維數(shù)組,二維數(shù)組以上的數(shù)組統(tǒng)稱為多維數(shù)組。在我們?nèi)粘J褂弥?,多維數(shù)組中也就二維數(shù)組使用頻率最高,因此我們著重講解二維數(shù)組。
接下來(lái),我們按照學(xué)習(xí)一維數(shù)組的順序,來(lái)學(xué)習(xí)二維數(shù)組。
二、二維數(shù)組的創(chuàng)建和初始化
1.創(chuàng)建
type arr_name[常量值1][常量值2];
例如:
int arr[3][5];
double data[2][8];
3表示數(shù)組有3行5表示每一行有5個(gè)元素int 表示數(shù)組的每個(gè)元素是整型類型arr 是數(shù)組名,可以根據(jù)自己的需要指定
2.初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
int arr4[3][5] = {{1,2},{3,4},{5,6}};
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
由上面的示例能夠看出,初始化時(shí)可以省略?,但是不能省略列
三、二維數(shù)組的使用
當(dāng)我們掌握了二維數(shù)組的創(chuàng)建和初始化,那我們?cè)趺词褂枚S數(shù)組呢? 其實(shí)二維數(shù)組訪問(wèn)也是使用下標(biāo)的形式的,二維數(shù)組是有行和列的,只要鎖定了行和列就能唯一鎖定數(shù)組中的一個(gè)元素。C語(yǔ)言規(guī)定,二維數(shù)組的行是從0開始的,列也是從0開始的,如下所示 有了行列,我們說(shuō):第2行,第4列,快速就能定位出數(shù)字7
訪問(wèn)二維數(shù)組的單個(gè)元素我們知道了,那如何訪問(wèn)整個(gè)二維數(shù)組呢? 其實(shí)我們只要能夠按照?定的規(guī)律產(chǎn)生所有的行和列的數(shù)字就行;以上一段代碼中的arr數(shù)組為例,行的選擇范圍是0 ~ 2,列的取值范圍是0 ~ 4,所以我們可以借助循環(huán)實(shí)現(xiàn)生成所有的下標(biāo)。 實(shí)現(xiàn)對(duì)二維數(shù)組的輸入和輸出:
int main()
{
int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
int i = 0;//遍歷?
//輸?
for (i = 0; i < 3; i++) //產(chǎn)??號(hào)
{
int j = 0;
for (j = 0; j < 5; j++) //產(chǎn)?列號(hào)
{
scanf("%d", &arr[i][j]); //輸?數(shù)據(jù)
}
}
//輸出
for (i = 0; i < 3; i++) //產(chǎn)??號(hào)
{
int j = 0;
for (j = 0; j < 5; j++) //產(chǎn)?列號(hào)
{
printf("%d ", arr[i][j]); //輸出數(shù)據(jù)
}
printf("\n");
}
return 0;
}
四、二維數(shù)組的存儲(chǔ)
為了研究存儲(chǔ)的規(guī)律,我們一樣可以像在一維數(shù)組部分所學(xué)的方法進(jìn)行探究
#include
int main()
{
int arr[3][5] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
輸出結(jié)果:
從輸出的結(jié)果來(lái)看,每一行內(nèi)部的每個(gè)元素都是相鄰的,地址之間相差4個(gè)字節(jié),跨行位置處的兩個(gè)元素(如:arr[0][4]和arr[1][0])之間也是差4個(gè)字節(jié),所以二維數(shù)組中的每個(gè)元素都是連續(xù)存放的。
如下圖所示:
五、總結(jié)
在學(xué)習(xí)了一維數(shù)組和二維數(shù)組之后,我們就有能力做許多關(guān)于數(shù)組的小題目了,所以我為大家布置一道課后題:
A:編寫代碼,演示多個(gè)字符從兩端移動(dòng),向中間匯聚,例如:給出兩段字符串,實(shí)現(xiàn)這樣的效果: char arr1[] = “Happy to learn C.”; char arr2[] = “#################”; ################# H############### Ha#############C Hap########### C Happ#########n C Happy#######rn C Happy #####arn C Happy t###earn C Happy to#learn C Happy to learn C
答案:
int main()
{
char arr1[] = "Happy to learn C.";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1) - 1;
printf("%s\n", arr2);
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
return 0;
}
當(dāng)然,大家為了觀看動(dòng)態(tài)效果,可以使用Sleep函數(shù)休眠 先加入頭文件#include
Sleep(1000);
表示休眠1000毫秒,即1秒
#include
#include
int main()
{
char arr1[] = "Happy to learn C.";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1) - 1;
printf("%s\n", arr2);
while (left <= right)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
return 0;
}
本期就到這里了,關(guān)注我,帶你繼續(xù)學(xué)習(xí)C語(yǔ)言!(。???)ノBye~?
完
柚子快報(bào)激活碼778899分享:算法 【C語(yǔ)言】二維數(shù)組
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。