Ввод значений в массив

МАССИВЫ И СТРОКИ

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

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

В этой работе рассматривается как внести значения в специальную переменную, которая называется массивом (array). Кроме того, здесь подробно описывается работа со строковыми переменными.

Массивы

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

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

Вы уже создавали и использовали массивы в форме строк. Строка и в самом деле является массивом, состоящим из отдельных символов. При отображении строки сообщения на дисплее функция puts() обращается с массивом как с группой, но к каждому символу можно обратиться и в отдельности.

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

Определение массива

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

int temps[31];

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

При определении массива одновременно определяются и его отдельные элементы, как это показано на рис. 2. К первому элементу массива temps обращаются как к temps[0], ко второму — как к temps[1], к третьему — как к temps[2] и так далее. Заметьте, что нумерация элементов массива начинается с 0, так что массив, состоящий из пяти элементов, показан на рисунке как массив, содержащий элементы с номерами от 0 до 4. Элемент с номером temp[5] не существует. Число, заключенное в квадратные скобки, называется индексом (subscript), и про элементы массива можно говорить как про «нулевой элемент массива temps», «первый элемент массива temps» и так далее.


Рис. 1. Синтаксис определения массива

 


Рис. 2. При определении массива также определяются и составляющие его элементы

Нельзя использовать индекс, имеющий значение больше указанного максимального количества элементов массива минус один. Если определен массив, имеющий 10 элементов, значит максимальным возможным индексом является число 9. Компилятор не будет генерировать ошибку, если существует проблема с индексом, но при запуске программы произойдет ошибка выполнения или программа выдаст результаты, далекие от истинных.

Определение строковой переменной на самом деле является определением массива символьных элементов:

char name[5];

С помощью функций gets() и puts() можно вводить и выводить весь массив символьных данных как единое целое, но при работе с другими типами данных эти операции выполняются с каждым элементом массива отдельно.

Ввод значений в массив

После того как вы определили массив, в него можно вводить информацию. Начальные значения элементам массива можно присвоить при его определении:

int temps[5] = {45, 56, 12, 98, 12};

Таким образом, мы создали пять элементов, имеющих следующие значения:

temps[0]       45temps[1]       56temps[2]       12temps[3]       98temps[4]       12

Для инициализации подобного массива используется соответствующая инструкция перед main(). Подобная инициализация возможна и внутри main(), или другой функции, но в этом случае массив должен быть описан как статический:

int temps[5] = {45, 56, 12, 98, 12};main()                    {                    static float prices[3] = {23.45, 34.56, 12.34};

Отдельным элементам массива можно присваивать значения внутри main() или другой функции, как в инструкции

temps[0] = 45;

Если вы хотите присвоить значение каждому элементу массива, вы можете использовать цикл для ускорения процедуры. В том случае, когда число элементов известно заранее, используйте цикл for:

main()                    {                    int temps[31];                    int index;                    for (index = 0; index 31; index++)                                   {                                   printf("Введите значение температуры #%d: ", index);                                   scanf("%d", &temp[index]);                                   }                    }

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

Введите значение температуры #N

где N отображает индекс элемента, которому присваивается значение.

Обратите внимание, что количество повторов определяется увеличением значения переменной index от 0 до 30, а не до 31, поэтому данное значение может использоваться одновременно и как индекс для определения номера текущего элемента массива (которые пронумерованы от 0 до 30). Когда переменная index имеет значение 0, элемент temps[index] на самом деле является элементом temps[0]. Таким образом, значение, которое мы вводим в элемент temps[index] с помощью функции scanf(), присваивается первому элементу с именем temps[0]. С очередным выполнением цикла for значение переменной index возрастает, и при следующих повторах функция scanf() вводит значение в новые элементы массива. Этот процесс проиллюстрирован в табл.1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: