Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Ход работы. Основные сведения о массивах в языке C++.В случае использования простых переменных каждой области памяти для хранения одной величины соответствует свое имя
Основные сведения о массивах в языке C++. В случае использования простых переменных каждой области памяти для хранения одной величины соответствует свое имя. Если требуется работать с группой величин одного типа, их располагают в памяти последовательно и дают им общее имя, а различают по порядковому номеру. Такая последовательность однотипных величин называется массивом. Массивы, как и любые другие объекты, можно размещать либо с помощью операторов описания в сегментах данных или стека, либо в динамической области памяти с помощью операций выделения памяти. При описании массива после имени в квадратных скобках задается количество его элементов (размерность), например int a[10]. Массив располагается в зависимости от места его описания либо в сегменте данных, либо в сегменте стека, и все инструкции по выделению памяти формирует компилятор до выполнения программы. Вследствие этого размерность массива может быть задана только константой или константным выражением. Если при описании массива не указана размерность, должен присутствовать инициализатор, в этом случае компилятор выделит намять по количеству инициализирующих значений. В дальнейшем мы увидим, что размерность может быть опущена также в списке формальных параметров. Элементы массива нумеруются с нуля. При описании массива используются те же модификаторы (класс памяти, const и инициализатор), что и для простых переменных. При описании массив можно инициализировать, то есть присвоить его элементам начальные значения, например: int а[10] = {1, 1, 2, 2, 5, 100}; Для данного массива элементы имеют номера от 0 до 9. Номер элемента указывается после его имени в квадратных скобках, например, а[0], а[3]. Инициализирующие значения для массивов записываются в фигурных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, обнуляются:
int b[5] = {3. 2, 1}; //b[0]=3, b[l]=2, b[2]=l, b[3]=0, b[4]=0
Для доступа к элементу массива после его имени указывается номер элемента (индекс) в квадратных скобках. В следующем примере подсчитывается сумма элементов массива.
#include < iostream.h> int main() { const int n = 10; int i, sum; int marks[n] = {3. 4, 5, 4, 4}; setlocale(LC_ALL, " Russian"); for (i =0. sum = 0; i< n; i++) sum += marks[i]; cout < < " Сумма элементов: " < < sum; return 0; }
Размерность массивов предпочтительнее задавать с помощью именованных констант, как это сделано в примере, поскольку при таком подходе для ее изменения достаточно скорректировать значение константы всего лишь в одном месте программы. Обратите внимание, что последний элемент массива имеет номер, на единицу меньший заданной при его описании размерности. При обращении к элементам массива автоматический контроль выхода индекса за границу массива не производится, что может привести к ошибкам. Идентификатор массива является константным указателем на его нулевой элемент. Например, для массива из предыдущего листинга имя mark - это то же самое, что & mark[0], а к i-му элементу массива можно обратиться, используя выражение *(mark+i). Можно описать указатель, присвоить ему адрес начала массива и работать с массивом через указатель. Следующий фрагмент программы копирует все элементы массива а в массив b:
int а[100], b[100]; int *ра = а; // или int *p = & а[0]; int *pb = b; for(int i = 0; i< 100; 1++) *pb++ = *pa++; // или pb[i] = pa[i]; Пример 4.1. Написать программу, которая для целочисленного массива из 100 элементов определяет, сколько положительных элементов располагается между его максимальным и минимальным элементами. Запишем алгоритм в самом общем виде. 1. Определить, где в массиве расположены его максимальный и минимальный элементы, то есть найти их индексы. 2. Просмотреть все элементы, расположенные между ними. Если элемент массива больше нуля, увеличить счетчик элементов на единицу. Ясно, что порядок расположения элементов в массиве заранее не известен, и сначала может следовать как максимальный, так и минимальный элемент, кроме того, они могут и совпадать. Поэтому прежде чем просматривать массив в поисках количества положительных элементов, требуется определить, какой из этих индексов больше. Запишем уточненный алгоритм: 1. Определить, где в массиве расположены его максимальный и минимальный элементы: - задать начальные значения для индексов максимального и минимального элементов (например, равные нулю, но можно использовать любые другие - просмотреть массив, поочередно сравнивая каждый его элемент с ранее най денными максимумом и минимумом. Если очередной элемент больше ранее 2. Определить границы просмотра массива для поиска положительных элементов, находящихся между его максимальным и минимальным элементами: - если максимум расположен в массиве раньше, чем минимум, принять левую границу просмотра равной индексу максимума, иначе - индексу минимума. - если максимум расположен в массиве раньше, чем минимум, принять правую границу просмотра равной индексу минимума, иначе - индексу максимума. 3. Обнулить счетчик положительных элементов. Просмотреть массив в указанном диапазоне. Если очередной элемент больше нуля, увеличить счетчик на единицу. Для экономии времени при отладке значения элементов массива задаются путем инициализации.
|