Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа4.docx
Скачиваний:
8
Добавлен:
16.09.2019
Размер:
53.31 Кб
Скачать

Лабораторная работа № 4 Массивы

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

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

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

В повседневной жизни работа с массивами – обычное дело. Книга, тетрадь, тарелка пельменей, стадо овец или шарики в подшипнике – все это массивы. Элементы массива автоматически нумеруются, причем нумерация в С++ всегда начинается с нуля.

Номер (индекс) элемента ставится в квадратных скобках после имени массива. Массив всегда можно узнать по этим квадратным скобкам, как функцию – по круглым. В качестве индекса массива может выступать любое выражение, дающее результат целочисленного типа.

Число, определяющее, сколько элементов может быть в массиве, называется размерностью.

Массивы, как и переменные, должны быть объявлены перед использованием.

Элементы массива нумеруются с нуля. При описании массива используются те же модификаторы (класс памяти, const и инициализатор), что и для простых переменных. Инициализирующие значения для массивов записываются в фигурных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, обнуляются.

Размерность массива вместе с типом его элементов определяет объём памяти, необходимый для размещения массива, которое выполняется на этапе компиляции, поэтому размерность может быть задана только целой положительной константой или константным выражением. Если при описании массива не указана размерность, должен присутствовать инициализатор, в этом случае компилятор выделит память по количеству инициализирующих значений.

Примеры объявления и инициализации массивов:

int a[10];

В этом примере объявляется массив a из 10 элементов, для него выделяется достаточно свободной памяти, чтобы он туда поместился. Содержимое самих ячеек памяти при этом остается нетронутым.

int a[10]={1,2,3,4,5,345,7,8,9,10};

В этом примере объявляется тот же массив а из 10 элементов. Но теперь он инициализируется, как переменная, значениями. Эти значения всегда берутся в фигурные скобки и идут через запятую. Перечисленные значения последовательно заносятся в элементы массива. То есть, значение '1' попадет в а[0] (нумерация идет с нуля), '2'- в a[1], а '345'-в a[5](к этому нужно привыкнуть; элемент шестой, но под номером 5). При таком присвоении элементов в ряду может быть меньше, но не больше, размерности массива. Если их будет меньше, то элементы массива, на которых их не хватит, просто останутся нетронутыми. Зато если их будет больше, компилятор сообщит об ошибке: оставшиеся элементы ряда (которые не влезли в массив) будет просто некуда деть.

int a[]={1,2,3,4,5,345,7,8,9,10};

Эта запись отличается от предыдущей тем, что не указана размерность массива. Компилятор посчитает, сколько элементов в фигурных скобках, и вы-делит, сколько нужно памяти; при объявлении такого массива в фигурных скобках может быть сколько угодно элементов. Но неверно считать, что та-кой массив будет «резиновым», то есть что в него всегда можно будет добавлять новые элементы. Будучи раз объявлен, он уже будет иметь определенную размерность, соответствующую количеству элементов при объявлении. А объявлять два раза одно и то же C++ не позволит никогда.

Для того чтобы обратиться к элементу массива, нужно записать имя массива, затем в квадратных скобках индекс нужного элемента. Например: a[5]. Такое действие иначе называется адресацией.

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

Можно написать и a[-3]; и это не будет ошибкой с позиции синтаксиса, но непонятно, чему будет равно это значение.

Поскольку для однотипных повторяющихся действий используются циклы, то и массив обрабатывается с помощью циклов.

В следующем примере подсчитывается сумма элементов массива.

#include<iostream>

usingnamespacestd;

intmain(){

constint n = 10; //константа n=10 для указания размерности массива

int i, sum; //инициализация целочисленного массива из 10 элементов

intmarks[n] = {3, 4, 5, 4, 4, 3, 4, 5, 4, 4};

//цикл по элементам массива, в результате в sum «накопится» сумма

for (i = 0, sum = 0; i<n; i++) sum += marks[i];

cout<<"Сумма элементов: " <<sum;

return 0;

}

Размерность массивов предпочтительнее задавать с помощью именованных констант, как это сделано в примере, поскольку при таком подходе для ее изменения достаточно скорректировать значение константы всего лишь и одном месте программы. Обратите внимание, что последний элемент массива имеет номер, на единицу меньший заданной при его описании раз-мерности.

Массив может содержать не только числа, но и элементы других типов, например, символы. Символьный массив может быть инициализирован списком символьных значений в фигурных скобках или строкой:

char ca1[] = {'C', '+', '+'};

char ca2[] = "C++";

Размерность массива ca1 равна 3, массива ca2 - 4, так как в строках учитывается завершающий нулевой символ. Следующее определение вызовет ошибку компиляции, так как строка "Daniel" состоит из 7 элементов:

char ca3[6] = "Daniel";