Многомерные массивы фиксированного размера задаются указанием каждого измерения в квадратных скобках, например, оператор
int Mas [6][8];
задает описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс.
Все многомерные массивы в C++ имеют индексы, которые начинаются с нуля.
Другие варианты объявления многомерных массивов:
const int Nmax = 5, Mmax = 5;
int Mas1[Nmax][Mmax];
int Mas2[Nmax][Mmax] = { {0} }; // все элементы равны 0
int Mas3[Nmax][Mmax] = { {1, 2}, {3, 4}, {5, 6} };
// проинициализированы по 2 элемента в 3 строках, остальные элементы равны 0
int Mas4[Nmax+10][Mmax];
int Mas5[3][2] = {1, 1, 0, 2, 1, 0}; // число строк – 3, столбцов – 2
int Mas6[ ][2] = {1, 1, 0, 2, 1, 0}; // число строк – 3
Для многомерного массива может быть опущена только первая размерность.
Для доступа к элементу многомерного массива указываются все его индексы, например, Mas[i][j], где
В следующем примере приведены блоки ввода и вывода двумерного массива:
|
|
#include <stdio.h>
void main()
{
const int Nmax = 5, Mmax = 5; // максимальная размерность
int Mas[Nmax][Mmax];
int N, M; // реальное число строк и столбцов
printf("\n N = "); // ввод реальной размерности матрицы
scanf("%d", &N);
printf(" M = ");
scanf("%d", &M);
for (int i = 0; i < N; i++) // блок ввода матрицы
for (int j = 0; j < M; j++)
{
printf(" Mas[%d][%d] = ", i + 1, j + 1);
scanf("%d", &Mas[i][j]);
}
printf("\n\n Massiv\n");
for (int i = 0; i < N; i++) // блок вывода матрицы
{
for (int j = 0; j < M; j++)
printf("%5d", Mas[i][j]);
printf("\n");
}
}
Вид экрана во время выполнения программы:
N = 3
M = 2
Mas[1][1] = 1
Mas[1][2] = 2
Mas[2][1] = 3
Mas[2][2] = 4
Mas[3][1] = 5
Mas[3][2] = 6
Massiv
1 2
3 44
5 6
Задавая начальное, конечное значение и шаг для номера строки и столбца, можно перемещаться по матрице в любом направлении и обрабатывать любую ее часть.
Пример 1. Заполнить нулями выделенную часть матрицы, перемещаясь по строкам слева направо и сверху вниз.
for (int i = 0; i < N-1; i++) for (int j = i+1; j < N; j++) Mas[i][j] = 0; |
Пример 2. Заполнить нулями выделенную часть матрицы, перемещаясь по строкам сверху вниз и справа налево.
for (int j = N-1; j >=0; j--) for (int i = 0; i <= j; i++) Mas[i][j] = 0; |
Пример 3. Поменять местами верхнюю и нижнюю половины матрицы, перемещаясь по строкам слева направо и сверху вниз.
for (int i = 0; i < N / 2; i++) for (int j = 0; j < M; j++) { temp =Mas[i][j]; Mas[i][j] = Mas[N/2 + i][j]; Mas[N/2 + i][j] = temp; } | |
Исходная матрица 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 | Матрица после перестановки 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 |