Иногда в программе приходится работать не с парой чисел, а с несколькими тысячами или даже миллионами чисел. Например, обычная картинка хранит в себе значения цвета в каждом пикселе, для примера, в картинке в FullHD 1920×1080 = 2073600 пикселей. Раньше для каждого числа мы заводили свою переменную, называя её int a или float x и т.п. Но отдельно объявлять и придумывать переменную под каждое из 2073600 чисел - слишком затратно. Поэтому для таких больших наборов данных придумываются различные способы их объявления, хранения, обработки и передачи. Один из них - массив.
В языке C все элементы одного массива могут иметь только один общий тип данных, который определяется, как и у обычной одиночной переменной - в начале программы.
Массив из ста элементов типа int объявляется в программе так:
int A[100];
Число элементов массива указывается при объявлении в квадратных скобках.
В этом случае мы выделили в памяти место сразу под 100 переменных всего
одной строчкой. По умолчанию, как и в случае одиночной переменной, в выделенной
памяти может лежать какие-то данные(мусор). Чтобы выполнять операции с элементами массива, к
ним обращаются следующим образом : a[1], где в скобках пишется номер элемента, к
которому вы хотите обратиться. То есть у нас есть 100 переменных с именами: a[0],
a[1], a[2], . . . , a[99] - с которыми обращаются так же как и с обычными переменными.
Важно, что нумерация начинается с нуля! Если забыть об этом - это может привести
к ошибке.
Почти всегда для выполнения операций с массивами используют циклы, и чаще всего самый простой - for.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int A[10]; // выделяем в памяти массив из 10 элементов типа int int N, i; scanf("%i", &N); for (i = 0; i < N; i++) { // вводим N элементов и записываем их в массив scanf("%i", &A[i]); } for (i = 0; i < N; i++) { // выводим N элементов массива printf("%i ", A[i]); } return 0; }
Самая частая ошибка при использовании массивов - выход за его пределы. Дело в том, что объявляя массив, например, из 10 элементов, нам выделяется память ровно под 10 переменных: a[0], a[1], . . . , a[9]. Однако, в программе мы можем случайно обратится к элементу с неразрешенным номером, скажем, к a[10]. При этом, при компиляции программы она не сообщит об ошибке и нормально запустится. Но в момент обращения к этому запрещенному элементу a[10] или в конце выполнения программы появится следующее сообщение:
В таком случае нужно нажать "Прервать"и искать ошибку в коде.
Очень часто в массиве нужно найти максимальный или минимальный элемент.
Задача: дан массив из 10 целых чисел(вводятся с консоли через пробел), найти
наибольшее число из них.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int A[10], i, max; for (i = 0; i < 10; i++) { scanf("%i", &A[i]); } max = A[0]; // стартовое значение for (i = 0; i < 10; i++) { if (A[i] > max) { max = A[i]; } } printf("%i", max); return 0; }
Задача: Дан массив из N ≤ 100 элементов, нужно вывести массив, в котором каждый элемент увеличен 10.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int A[100], i, N; scanf("%i", &N); for (i = 0; i < N; i++) { // ввод массива scanf("%i", &A[i]); } for (i = 0; i < N; i++) { A[i] = A[i] + 10; // к каждому элементу прибавляем 10 } for (i = 0; i < N; i++) { // вывод массив printf("%i ", A[i]); } return 0; }
Задача: Дан массив из N ≤ 100 элементов, нужно передвинуть все элементы массива на один вправо, а последний элемент должен встать на первое место.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int A[100], i, N, buf; scanf("%i", &N); for (i = 0; i < N; i++) { // ввод массива scanf("%i", &A[i]); } buf = A[N - 1]; // сохраняем последний элемент в буфер for (i = N - 1; i > 0; i--) { A[i] = A[i - 1]; // передвигаем направо все элементы } A[0] = buf; // присваиваем к первому элементу последний(он сохранен в переменной buf) for (i = 0; i < N; i++) { // вывод массива printf("%i ", A[i]); } return 0; }
Чтобы закрепить материал, можете прорешать 1 уровень задач по массивам.
Code.C
© Copyright Павел Калашников 2021
обратная связь code.c04@mail.ru