Работа с массивами
Общие сведения о массивах
Массив – это одна из известных и наиболее простых структур данных. Под массивом в языке С понимают набор данных одного и того же типа, собранных под одним именем. Массив определяется именем массива и порядковым номером каждого своего элемента. Обычно порядковый номер элемента называют индексом. Индекс (то есть порядковый номер элемента) в языке С всегда целое число.
В элементарной математике, как массивам, так и последовательно вычисляемым значениям (рядам), может соответствовать запись с одним и двумя индексами:
В языке C (C++) физическая нумерация элементов массива всегда начинается с нулевого элемента массива:
Пример описания одномерного массива с предельным размером в 100 элементов:
int _tmain(int argc, _TCHAR* argv[])
{
const int k_max = 100; // Предельный размер массива
typedef float Type_Elements_a; // Тип элементов массива a
Type_Elements_a a[k_max]; //Сам массив a
int k; // Текущий предельный размер массива
}
Краткое, не рекомендуемое описание того же массива:
float a[100];
При кратком описании массива обычно текущий предельный размер массива равен предельному размеру массива. Внутри программы приходится многократно использовать константу размера массива (в данном примере равную 100).
Пример описания двухмерного массива с предельным размером в 5*6 = 30 элементов:
int _tmain(int argc, _TCHAR* argv[])
{
const int n_Max = 5; //Предельное количество строк масива
const int m_Max = 5; //Предельное количество столбцов
//масива
typedef float Type_Elements_b; //Тип элементов массива b
Type_Elements_b b[n_Max][m_Max]; //Сам массив b
Int n; //Текущее предельное количество строк массива
Int m; //Текущее предельное количество столбцов массива
}
Краткое, не рекомендуемое описание того же массива:
float b[5][5];
При кратком описании массива обычно текущее предельное количество строк и текущее предельное количество столбцов массива соответствуют предельным размерам массива, соответствующим его описанию. Внутри программы приходится многократно использовать константы предельного количества столбцов и строк массива (в данном примере это 5 и 6).
Алгоритмы инициализации значений элементов массива
Инициализации значений элементов массива постоянными значениями
При работе с массивами часто используется алгоритм последовательного перебора всех значений массива, позволяющий по очереди получить доступ к каждому элементу. Наиболее часто для последовательного перебора всех элементов массива используется НЕУНИВЕРСАЛЬНЫЙ ЦИКЛ for с модификацией работы n раз при I от 0 до n-1:
//Задание i = 0, 1, 2,..., n-1
for (int i = 0; i<n; i++)
{
//Действие цикла при i = 0, 1, 2,..., n-1
}
Рассмотрим алгоритм такого перебора на примере инициализации элементов одномерного массива значением 5. Наглядный тест:
k = 4;
//Инициализация всех элементов одномерного массива a значением 5
//Задание i – номера инициализируемого элемента массива
for (int i = 0; i<k; i++)
{
//Инициализация очередного i-го элемента
a[i] = 5.0;
}
Убираем лишние операторные скобки, охватывающие только один оператор, имеем:
k = 4;
//Инициализация всех элементов одномерного массива a значением 5
//Задание i – номера инициализируемого элемента массива
for (int i = 0; i<k; i++)
a[i] = 5.0;
//Следующий оператор
Следующая конструкция из двух вложенных НЕУНИВЕРСАЛЬНЫЙ ЦИКЛ for обеспечивает последовательное задание индексов всех элементов двухмерного массива:
//Задание j – номеров строк инициализируемых элементов массива
for (j = 0; j<n; j++)
{
//Задание i – номеров столбцов строки j элементов массива
for (i = 0; i<m; i++)
{
//Действие цикла
}
}
Задание индексов происходит в порядке, показанном на следующем наглядном тесте:
Рассмотрим алгоритм последовательного перебора всех элементов двухмерного массива на примере инициализации всех элементов двухмерного массива значением 7.
//Инициализация всех элементов массива b значением 7
//Задание j – номеров строк инициализируемых элементов
//массива
for (int j = 0; j<n; j++)
{
//Задание i – номеров столбцов строки j элементов
//массива
for (int i = 0; i<m; i++)
{
//Инициализация очередного i-го элемента
b[j][i]= 7.0;
}
}
Убираем лишние операторные скобки, охватывающие только один оператор, имеем:
//Инициализация всех элементов массива b значением 7
//Задание j – номеров строк инициализируемых элементов
//массива
for (int j = 0; j<n; j++)
//Задание i – номеров столбцов строки j элементов
//массива
for (int i = 0; i<m; i++
//Инициализация очередного i-го элемента
b[j][i]= 7.0;
Отметим, что для корректного выполнения алгоритма фрагмента необходимо иметь уже определенные значения n, m:
При исполнении алгоритма и значениях n=3, m=2 элементы массива b будут инициализированы в следующем порядке:
j i
b[0][0] = 7.0
b[0][1] = 7.0
b[1][0] = 7.0
b[1][1] = 7.0
b[2][0] = 7.0
b[2][1] = 7.0
Обнуление массивов является частным случаем инициализация всех элементов массива значением 0.