Билет 8. Массивы; их описание. Размещение в памяти, инициализации

Массивы – это переменные с индексами(вектора и матрицы). Под массивами понимают совокупность однородных объектов. На практике это означает, что все элементы массива имеют одинаковый тип (int, Float, Char).

Каждая задача на массив начинается с его описания, ввода количества элементов, выделения памяти для всего массива, ввода элементов массива и контрольная печать.

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

 

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

 

 

<имя_типа> <имя_массива> [k1] [k2] … [kn];

 

 

где k1, k2, …, kn – количество элементов массива – константы или константные выражения по 1, 2, …, n измерениям. Причем значения индексов могут изменяться от 0 до ki – 1.

 

 

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

 

¨ современные трансляторы языка Си не контролируют допустимость значений индексов, это должен делать программист;

 

¨ количество измерений массива не ограничено;

 

¨ в памяти элементы массива располагаются так, что при переходе от элемента к элементу наиболее быстро меняется самый правый индекс массива, т.е. матрица, например, располагается в памяти по строкам;

 

¨ имя массива является указателем – константой на первый элемент массива;

 

¨ операций над массивами в Си нет, поэтому пересылка элементов одного массива в другой может быть реализована только поэлементно с помощью цикла;

 

¨ над элементами массива допускаются те же операции что и над простыми переменными того же типа;

 

¨ ввод/вывод значений элементов массива можно производить только поэлементно;

 

¨ начальные значения элементам массива можно присвоить при объявлении массива.

 

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

 

 

int A [10]; //одномерный массив из 10 целочисленных величин

 

float X [20]; //одномерный массив из 20 вещественных величин

 

int a[5]={1, 2, 3, 4, 5}; //массив с инициализацией его элементов

 

int c[]={–1 , 2, 0, –4, 5, –3, –5, –6, 1}; // массив размерность которого 6определяется числом инициализирующих элементов

 

 

Обращения к элементам одномерного массива могут иметь вид: A[0], A[1], A[2],…A[9], A[2*3].

 

В Си нет массивов с переменными границами. Но, если количество элементов массива известно до выполнения программы, можно определить его как константу с помощью директивы #define, а затем использовать ее в качестве границы массива, например,

 

#define n 10;

 

Main ( )

 

{ int a[n], b[n]; // Объявление 2–х одномерных массивов

 

 

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

Инициализация массива – это присваивание элементам массива начальных значений. Инициализацию массива можно выполнить на этапе описания массива, как это показано в п.1.1. Но в том случае, когда начальные значения получают лишь некоторые элементы массива, а остальные вычисляются в процессе выполнения программы, в программе записывают операторы присваивания. Например:

 

 

a[0]= –1; a[1]=1.1;

 

 

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

 

for(i=0;i<n;i++)

 

a[i]=0;

 

// или с помощью цикла while

 

i=0;

 

while (i<n)

 

{

 

a[i]=0;

 

i=i+1;

 

}

 

 

Рисунок 2.1 Алгоритм и фрагмент программы инициализации массива

 

 

В представленном алгоритме все элементы массива в цикле последовательно инициализируются значением – 0.

Заполнить массив можно следующим образом:

 

1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой рекуррентным соотношением.

2) Другой вариант присваивания значений элементам массива — заполнение значениями, полученными с помощью датчика случайных чисел.

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