- •1. Знакомство со средой программирования
- •2. Создание проекта
- •3. Простейшая программа на c, функция main()
- •3. Подключение дополнительных библиотек, функция printf
- •4. Переменные, типы переменных, литералы
- •5. Форматированный вывод
- •6. Считывание данных с консоли
- •7. Условный оператор if, условные операции.
- •7.1 Оператор else
- •8. Операторы цикла while, do … while, for
- •8.1 Цикл while
- •8.2 Цикл do … while
- •8.3 Цикл for
- •9. Массивы
- •9.1 Объявление массивов
- •9.2 Инициализация массивов
- •9.3 Многомерные массивы
9. Массивы
Когда необходимо хранить в памяти небольшое количество данных — можно использовать обычные переменные. 3 стороны треугольника, координаты точки на плоскости, для таких случаев достаточно использовать переменные. Однако очень часто количество данных настолько велико, что использовать переменные становится невозможно. 1000 точек на плоскости — в таком случае в переменными уже не возможно справиться. Более того, когда изначально количество данных неизвестно — задача становится нерешимой без использования массивов (с другими структурами данных вы познакомитесь позже).
Массив — набор однотипных значений, к которым можно обратиться по индексу (номеру)
Допустим, есть 10 бутылок газировки. Если поставить их в ряд, то можно сказать: в первой бутылке — 250мл газировки, во второй бутылке — 500мл газировки, в третьей — 100мл, в четвертой — 0, и так далее.
I II III IV V VI VII VIII IX X
Ряд бутылок можно назвать массивом бутылок. Тогда номер бутылки будет её индексом в массиве.
Точно так же можно представить себе массив целочисленных значений:
14 |
43 |
-13 |
0 |
23 |
63 |
87 |
23 |
69 |
34 |
I |
II |
III |
IV |
V |
VI |
VII |
VIII |
IX |
X |
Используя массивы можно удобно хранить любое количество значений и обрабатывать их.
9.1 Объявление массивов
Для того, что бы в C создать массив, нужно при объявлении массива добавить после имени переменной квадратные скобки, в которых написать размер массива:
тип имя_переменной[размер_массива];
Например:
int array[10];
int another_array[11];
double floating_point_arr[1000];
bool bools[1];
int n = 10;
int some[n];
Здесь создаются 5 массивов:
array является массивом из 10 целочисленных значений
another_array – массив из 11 целочисленных значений
floating_point_arr – массив из 1000 значений типа double
bools – массив из одного булевого значения (да, массив может состоять из одного элемента, а почему бы и нет?)
some – массив, размер которого зависит от величины переменной n. Эта переменная равна 10, но так же она могла бы быть считана с клавиатуры.
Количество элементов — положительное целочисленное значение (unsigned int). Если вы случайно напишите в квадратных скобках отрицательную величину — компилятор выдаст ошибку. Если же в пятом примере (int some[n]) перменная n была бы отрицательной — то она была бы приведена к положительному через переполнение, что наверняка вызвало бы ошибку. То же самое произойдет, если переменная n не будет инициализирована.
9.2 Инициализация массивов
Как же инициализировать массив? Изначально в ячейках массива содержится мусор. Существует 2 способа инициализации массива: при объявлении и установкой значений ячеек.
Что бы инициализировать массив при объявлении, надо написать следующую конструкцию:
тип имя_переменной[] = {значение1, значение2, …};
Где в фигурных скобках через запятую перечисляются значения, которыми должен инициализироваться массив. При инициализации во время объявления размер массива можно не указывать. Например:
int integers[] = {1, 2, 3, 4, 5, 6};
int aaa[3] = {1, 2, 3};
int bbb[10] = {1, 2, 3, 4};
В этом примере будет создан массив с именем переменной integers, в котором будет храниться 6 элементов — 1, 2, 3, 4, 5 и 6. Массив aaa будет инициализирован значениями 1, 2, 3. Массив bbb будет содержать значения 1, 2, 3, 4 и 6 ячеек мусора.
При инициализации во время объявления вы не можете создать массив с переменным размером (aaa[n]). Кроме того, если указан размер массива — количество инициализирующих значений не должно быть больше размера массива (int aaa[2] = {1, 2, 3} - ошибка)
Второй способ — установить значение каждой ячейки по отдельности. Что бы получить какую-либо ячейку массива, нужно написать имя переменной, хранящей массив, а после имени — квадратные скобки, в которых нужно указать индекс элемента.
Обратите внимание! В C нумерация ячеек начинается с нуля! Таким образом, что бы получить первую ячейку массива array, необходимо написать
array[0]
Получив ячейку массива, можно работать с ней, как с обычной переменной — присваивать в неё значение, передавать в функции, …
int array[10];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
array[5] = 6;
array[6] = 7;
array[7] = 8;
array[8] = 9;
array[9] = 10;
Как вы видите, последняя ячейка массива имеет индекс, на единицу меньший размера массива (9). Всего же в массиве array – 10 элементов.
Для инициализации массивов (особенно, больших, или таких, в которых заранее не известно количество элементов) очень удобно использовать циклы.
#include <stdio.h>
int main() {
int n; // размер массива
printf("Введите размер массива: ");
scanf("%d", &n);
int arr[n]; // массив создается после инициализации n
for (int i = 0; i < n; ++i) { // i – индекс заполняемого элемента
arr[i] = i + 1; // значение в ячейке больше индекса ячейки на 1
}
}