Введение в 2-D массивы в C
Массив - это группа элементов с одинаковым (однородным) типом данных. Он также называется производным типом данных. Если мы рассмотрим примитивный тип данных и назначим значение, как показано ниже,
И теперь, если мы хотим сохранить новое значение в переменной a, новое значение заменяет старое значение. Используя одну примитивную переменную, мы можем хранить только одно значение за раз, мы не можем хранить несколько значений.
Для хранения более одного элемента в одной переменной, таких как оценки учащихся, идентификаторы сотрудников, номера мобильных телефонов с большим объемом данных, нам необходимо создать сотни уникальных переменных, что является очень сложной задачей. Вот почему концепция массива была введена.
Концепции в 2-D массивах в C
Мы можем определить массивы в
- Одномерный
- Дважды Dimensional
И так далее, вплоть до N-мерных, исходя из требований. Но здесь мы будем иметь дело с 2-мерными массивами. Как следует из названия, двумерные массивы могут представлять собой матричное представление данных, которые создаются для реализации структуры данных, похожей на реляционную базу данных, и могут храниться в табличных формах. Это обеспечивает простоту хранения объемных данных, которые могут быть переданы в любое количество функций в зависимости от требований. Доступ к данным в этих массивах можно получить через идентификаторы строк и столбцов.
Как мы можем определить и реализовать их? Где мы можем их использовать? Идем дальше, давайте разберемся с этими понятиями.
В C размерные массивы могут быть объявлены следующим образом:
Синтаксис
Таким же образом, мы можем объявить 2-D массив как:
Смысл вышеприведенного представления можно понимать как:
- Память, выделенная для переменной b, имеет тип данных int.
- Данные представляются в виде 2 строк и 3 столбцов.
К данным внутри массива можно получить доступ через представленное выше представление. В представлении двумерных массивов первая квадратная скобка представляет количество строк, а вторая - количество столбцов. Индексное представление массива для первого элемента всегда начинается с нуля и заканчивается размером 1. Переменная массива (здесь b) всегда содержит базовый адрес блока памяти и называется внутренней переменной указателя.
Так, например, если число строк равно 3, то индексное представление для доступа к данным в строках будет 0, 1 и 2. Та же логика применима и к индексам столбцов. Для вышеприведенного представления, чтобы получить данные 2- го ряда 3- го столбца, мы можем получить доступ с помощью b (1) (2).
Инициализация массивов
У нас есть два разных метода инициализации значений в C. Методы отличаются только синтаксически.
Ниже один из них.
Другой способ инициализации заключается в следующем:
Как правило, первый метод инициализации является предпочтительным, поскольку мы можем четко понимать и визуализировать строки и столбцы двумерных массивов в C.
Ниже приведен пример графического представления элементов и их адреса для массива b.
Элементы массива обычно хранятся в последовательных ячейках памяти на основе типа данных элементов.
Вставка элементов в двумерные массивы
Для вставки элементов в двумерные массивы нам необходимо вставить данные как в строки, так и в столбцы. Итак, для этого мы используем концепцию циклов. В приведенном выше процессе инициализации данных в массиве мы предварительно определили значения.
Здесь элементы могут быть динамически вставлены пользователем в соответствии с требованиями. Ниже приведен пример кода для вставки элементов.
#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
)
Как отмечено в коде:
- Сначала мы объявляем переменную массива и размеры массива с количеством строк и столбцов.
- Затем мы объявляем две переменные для перебора элементов в массиве.
- Затем для петли используются. Внешний цикл for предназначен для итерации строк, а внутренний цикл предназначен для столбцов.
- Функция Scanf используется для чтения данных при вводе, а затем для помещения значения, вставленного в эти позиции i и j.
В приведенном выше примере мы вставили данные в матрицу, имеющую 2 строки и 3 столбца. Вывод следующего может быть получен, как показано ниже:
Поскольку мы не использовали функцию printf для отображения выходных данных, написанная программа считывала только введенные пользователем значения. После написания функции печати (используя для циклов) вывод будет отображаться как:
Обновление элементов в двумерных массивах
Обновление элементов в массиве может быть выполнено либо путем указания конкретного элемента, подлежащего замене, либо путем определения позиции, в которой должна быть выполнена замена. Для обновления нам обычно требуются следующие данные.
- Элементы массива
- Позиция / элемент, где он должен быть вставлен
- Значение для вставки.
Для обновления данных в массиве с помощью сведений об элементе сначала нам нужно найти этот элемент в массиве, понять его положение, а затем заменить старый элемент новым элементом.
Ниже мы приводим два примера обновления элемента двумерного массива.
Во-первых, давайте рассмотрим пример, в котором положение обновляемого элемента уже известно.
#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
b(0)(2)=10;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)
В вышеприведенной программе выбран элемент в 1- й строке и 3- м столбце, и значение данных в этой позиции было обновлено.
Вывод для выше выглядит следующим образом:
Во втором примере мы собираемся показать, как положение элемента может динамически приниматься как введенное пользователем значение, и обновить значение элемента в этой конкретной позиции.
#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row and coulmn number :");
scanf("%d %d", &i, &j);
printf("Enter the number you want to update with: ");
scanf("%d", &num);
b(i)(j)=num;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)
Здесь мы использовали функцию scanf для считывания значения, заданного пользователем в соответствии с его выбором позиции элемента на основе номеров строк и столбцов.
Вывод следующий:
В качестве упражнения вы можете попробовать написать программу для обновления всей строки матрицы введенными пользователем значениями?
Теперь, как мы знаем, в двумерном массиве мы объявляем размер массива в самом начале. Мы знаем о размере массива, но что если пользователь задает случайный номер строки и столбца за пределами нашего размера массива?
Обратите внимание, что поскольку мы не написали ни одного условия if / else или блоков try / catch, вывод матрицы не изменится. Однако мы можем написать код с использованием вышеупомянутых условий для отображения ошибок в таких случаях.
Удаление элементов в двумерных массивах
После концепции вставки и обновления данных внутри массива, давайте теперь посмотрим, как мы можем удалить всю строку из массива.
Мы написали программу в простом формате, чтобы можно было легко понять концепцию различных операций в двумерном массиве.
#include
int main()
(
int b(2)(3), i, j, num, x;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row number :");
scanf("%d", &x);
for(i=0;i<2;i++)
(
if(i==x)
(
for(j=0;j<3;j++)
(
if((i+1)<2)
(
printf("\t%d", b(i+1)(j));
)
)
i++;)
else
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
)
printf("\n");
)
)
Следующие шаги:
- Взял значения массива динамически
- Попросил пользователя ввести номер (индекс) строки, которую нужно удалить.
- Используя для итерации цикла, мы сравниваем, совпадают ли номер строки и номер пользовательского ввода.
- Если они совпадают и номер строки меньше размера массива, мы печатаем следующую строку. Иначе, мы печатаем строку как есть.
Вывод следующий:
Что если я дам номер строки за пределами массива?
Он не найдет строку для удаления и выхода из программы, напечатав весь массив.
Как уже известно, мы можем даже объявить значения для номеров строк и столбцов динамически и написать программу соответствующим образом.
Разве это не выглядит простым и легким для изучения?
В качестве упражнения вы можете попробовать удалить конкретный элемент для 2-го массива сейчас?
Вывод
В этом разделе мы изучили основные операции над 2-мерными массивами. Эти двумерные массивы полезны в режиме реального времени с матричными операциями и многими математическими вычислениями.
Массивы могут даже использоваться для отображения календарей, размещения парковки, и мы можем даже сыграть в шахматы.
Многие другие структуры данных, такие как связанные списки, очереди, графики, деревья, должны использовать эту концепцию двумерных массивов в качестве основного требования при хранении и доступе к расположению различных элементов. Попробуйте решить основные операции с 2d массивами и получите удовольствие от изучения C.
Рекомендуемые статьи
Это руководство по 2-мерным массивам в C. Здесь мы обсуждаем введение, инициализацию массивов, вставку, обновление, удаление элементов в 2-мерных массивах. Вы также можете посмотреть следующие статьи, чтобы узнать больше -
- Массивы в R
- Преимущества массива
- Массивы в C ++
- Массивы в JavaScript
- Примеры массивов в C #
- Массивы в PHP