數(shù)組的練習(xí)
這里我們會(huì)把前面學(xué)習(xí)到的一維數(shù)組和多維數(shù)組進(jìn)行一次練習(xí)。
對(duì)于一維數(shù)組,我們將計(jì)算數(shù)組中所有整數(shù)的和。
二維數(shù)組的例子會(huì)稍微復(fù)雜一點(diǎn),我們交換一個(gè)有 N x N 個(gè)元素二維數(shù)組對(duì)角元素。
1. 一維數(shù)組練習(xí)
首先我們會(huì)初始化一個(gè)數(shù)組,然后我們會(huì)通過(guò)循環(huán)語(yǔ)句遍歷訪(fǎng)問(wèn)數(shù)組中的每一個(gè)數(shù)值,然后求和。
#include <stdio.h>
int main()
{
short sum = 0;
short a[10] = {2, 1, 4, 34, 12, 34, 56, 78, 11, 2};
for (int i = 0; i < 10; i++)
{
sum += a[i]; // 這是一個(gè)簡(jiǎn)寫(xiě),等價(jià)于 sum = sum + a[i];
}
printf("Array Sum: %d\n", sum);
return 0;
}
運(yùn)行結(jié)果:
Array Sum: 234
2. 多維數(shù)組練習(xí)
我們先初始化一個(gè)有 N x N 個(gè)元素的二維矩陣,然后通過(guò)嵌套的循環(huán)語(yǔ)句,來(lái)訪(fǎng)問(wèn)數(shù)組中的元素,并且將對(duì)行列上的元素進(jìn)行互換。如同下面表格中的所示。
原始數(shù)組
數(shù)組索引 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
變化后數(shù)組
數(shù)組索引 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 1 | 5 | 9 | 13 |
1 | 2 | 6 | 10 | 14 |
2 | 3 | 7 | 11 | 15 |
3 | 4 | 8 | 12 | 16 |
請(qǐng)大家注意這個(gè)交換是對(duì)稱(chēng)的,也就是行列的位置發(fā)生了互換。
#include <stdio.h>
int main()
{
short x = 0;
short a[4][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
printf("原始數(shù)組\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
for (int i = 0; i < 4; i++)
{
for (int j = i; j < 4; j++) // 請(qǐng)注意此處是位置交換的關(guān)鍵,我們每次都會(huì)縮小交換的范圍。
{
x = a[i][j];
a[i][j] = a[j][i];
a[j][i] = x;
}
}
printf("交換位置后的數(shù)組\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
return 0;
}
運(yùn)行結(jié)果:
原始數(shù)組
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
交換位置后的數(shù)組
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
3. 小結(jié)
在這個(gè)小結(jié),我們更進(jìn)一步練習(xí)了數(shù)組的使用。對(duì)于一維數(shù)組我們會(huì)用到一層的循環(huán)語(yǔ)句來(lái)遍歷里面的所有元素。在多維數(shù)組中,要想遍歷里面的所有數(shù)據(jù),就要使用多層的嵌套循環(huán)結(jié)構(gòu)。