Электронная библиотека

  • Для связи с нами пишите на admin@kursak.net
    • Обратная связь
  • меню
    • Автореферат (88)
    • Архитектура (159)
    • Астрономия (99)
    • Биология (768)
    • Ветеринарная медицина (59)
    • География (346)
    • Геодезия, геология (240)
    • Законодательство и право (712)
    • Искусство, Культура,Религия (668)
    • История (1 078)
    • Компьютеры, Программирование (413)
    • Литература (408)
    • Математика (177)
    • Медицина (921)
    • Охрана природы, Экология (272)
    • Педагогика (497)
    • Пищевые продукты (82)
    • Политология, Политистория (258)
    • Промышленность и Производство (373)
    • Психология, Общение, Человек (677)
    • Радиоэлектроника (71)
    • Разное (1 245)
    • Сельское хозяйство (428)
    • Социология (321)
    • Таможня, Налоги (174)
    • Физика (182)
    • Философия (411)
    • Химия (413)
    • Экономика и Финансы (839)
    • Экскурсии и туризм (29)

Двумерные массивы (массивы массивов)

Элементом массива может быть в свою очередь тоже массив. Таким образом,  мы приходим к понятию двумерного массива или матрицы. Описание двумерного массива строится из описания одномерного путем добавления второй размерности:

int a[4][3];

Анализ подобного описания необходимо проводить в направлении выполнения операций [], то есть слева направо. Таким образом, переменная a является массивом из четырех элементов, что следует из первой части описания a[4]. Каждый  элемент a[i] этого массива в свою очередь является массивом из трех элементов типа int, что следует из второй части описания.

Имя двумерного массива с двумя индексными выражениями в квадратных  скобках за ним обозначает соответствующий элемент двумерного массива и имеет тот же тип. Например, a[2][1] является величиной типа int, а именно ячейкой, в которой находится число 8, и может использоваться везде, где допускается использование величины типа int.

Для наглядности двумерный массив можно представить в виде таблицы с числом строк, равным первому размеру массива, и числом столбцов, равным второму размеру массива:

Массив а Столбец 0 Столбец 1 Столбец 2
Строка 0

1

2

3

Строка 1

4

5

6

Строка 2

7

8

9

Строка 3

10

11

12

Но память компьютера, одномерна, в ней нет ничего кроме идущих подряд ячеек памяти, поэтому компилятор вынужден будет «вытянуть» двухмерный массив в линейку по строкам: сначала в памяти разместится первая строка, потом – вторая, за ней третья и т.д.

В соответствии с интерпретацией описания двумерного массива (слева-на­право) элементы двумерного массива располагаются в памяти компьютера по строкам, одна строка за другой. Для массива int a[2][3] (2 строки, 3 столбца) расположение в памяти будет таким:

 

Инициализация двумерного массива также проводится по строкам.

int a[4][3] = { { 18, 21,  5 },  // внутренние {} можно опустить

{  6,  7, 11 },

{ 30, 52, 34 },

{ 24,  4, 67 }

};

int a[][3] = {  { 18, 21,  5 },

{  6,  7, 11 },

{ 30, 52, 34 },

{ 24,  4, 67 }

};

int a[4][3] = { { 18 },       // пропущенные элементы будут = 0

{  6,  7 },   //  внутренние {} нельзя опустить

{ 30, 52 },

{ 24,  4, 67 }

};

Во втором случае первый размер массива будет определен компилятором. Следует отметить, что второй размер массива должен быть всегда указан. Это необходимо для того, чтобы сообщить компилятору размер строки массива, без которого он не может правильно разместить двумерный массив в памяти компьютера.

Ввод двумерного массива осуществляется поэлементно с помощью двух вложенных циклов. Следующий фрагмент программы предназначен для ввода по строкам двумерного массива размером n строк на m столбцов.

int a[5][10], n = 5, m = 10;

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

for (j = 0; j < m; j++) {

printf(“a[%d][%d] = “, i, j);

scanf (“%d”, &a[i][j]);

}

Вывод такого же двумерного массива  также осуществляется с помощью двух вложенных циклов (после вывода очередной строки массива осуществляется переход на следующую строку).

for (i = 0; i < n; i++) {

for (j = 0; j < m; j++)

printf (“%5d “, a[i][j]);

printf(“\n”);

}

Задача.   Найти сумму элементов массива A[n][m]. В заданной строке найти максимальный элемент.                

void main() {

int a[10][20], n, m, i, j, k, s = 0, max;

printf(“Введите размерность массива n и m\n”);

scanf(“%d %d”, &n, &m);

printf(“Введите элементы массива\n”);

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

for (j = 0; j < m; j++)

scanf(“%d”, &a[i][j]);

printf(“Вы ввели массив\n”);

for (i = 0; i < n; i++) {

for (j = 0; j < m; j++)

printf (“%5d “, a[i][j]);

printf(“\n”);

}

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

for (j = 0; j < m; j++)

s += a[i][j];

printf(“Сумма элементов массива = %d\n”, s);

printf(“Введите номер строки k = “);

scanf(“%d”, &k);

max = a[k][0];

for (j = 1; j < m; j++)

if (a[k][j] > max)

max = a[k][j];

  printf(“Максимальный элемент в %d строке = %d\n”, k, max);

}

Обратить внимание! В двумерном массиве строка, столбец и диагонали являются по своей сути одномерными массивами. Поэтому при обработке строки, столбца или диагоналей достаточно использовать один цикл, а не два вложенных.

В языке С допускается использовать не только двумерные, но и трехмерные,  четырехмерные и т. д. массивы. Их использование ничем принципиально не отличается от использования двумерных массивов, однако на практике они применяются  значительно реже.

Автор: Александр, 18.03.2013
Рубрики: Компьютеры, Программирование
Предыдущие записи: Теория обработки металлов давлением учебник
Следующие записи: Документальное оформление и аналитический учет материалов

Последние статьи

  • ТОП -5 Лучших машинок для стрижки животных
  • Лучшие модели телескопов стоимостью до 100 долларов
  • ПРЕДУПРЕЖДЕНИЕ ОТКЛОНЕНИЙ РЕЧЕВОГО РАЗВИТИЯ У ДЕТЕЙ РАННЕГО ВОЗРАСТА
  • КОНЦЕПЦИИ РАЗВИТИЯ И ПОЗИЦИОНИРОВАНИЯ СИБИРИ: ГЕОПОЛИТИЧЕСКИЕИ ГЕОЭКОНОМИЧЕСКИЕ АСПЕКТЫ ОЦЕНКИ
  • «РЕАЛИЗМ В ВЫСШЕМ СМЫСЛЕ» КАК ТВОРЧЕСКИЙ МЕТОД Ф.М. ДОСТОЕВСКОГО
  • Как написать автореферат
  • Реферат по теории организации
  • Анализ проблем сельского хозяйства и животноводства
  • 3.5 Развитие биогазовых технологий в России
  • Биологическая природа образования биогаза
Все права защищены © 2013 Kursak.NET. Электронная библиотека : Если вы автор и считаете, что размещённая книга, нарушает ваши права, напишите нам: admin@kursak.net