Пример 1. Ввод с клавиатуры и вывод на экран одномерного массива.
Пример 2. Ввод вещественного массива и вычисление среднего значения.
Пример 3. Сортировка массива «методом пузырька».
В данной программе массив инициализирован. Его размер равен числу заданных значений. Чтобы сделать программу универсальной по отношению к размеру массива, значение размера вычисляется автоматически и заносится в переменную n. Для этого используется операция sizeof() - определение размера в байтах. Результат sizeof (X) равен размеру в памяти всего массива Х - 20 байтам. Результат sizeof(X[0]) равен размеру одного элемента массива - 2 байтам. Отношение этих величин равно 10 - числу элементов массива. Внимательно проанализируйте организацию перебора значений параметров вложенных циклов - i, j.
Пример 4. Вычисление и вывод на экран таблицы умножения в форме матрицы Пифагора.
По данной программе в двумерном массиве а не будут заполнены нулевая строка и нулевой столбец. По-прежнему интерпретируем первый индекс двумерного массива как номер строки матрицы, а второй индекс - как номер столбца.
Пример 5. Заполнение матрицы случайными числами в диапазоне от 0 до 99 и поиск в ней максимального значения.
В результате тестирования этой программы получен следующий результат:
В данной программе имеются новые элементы, использование которых требует пояснения. В стандартной библиотеке с заголовочным файлом stdlib.h содержится функция, прототип которой имеет вид: int rand(void).
Результатом этой функции является целое случайное число из диапазона от 0 до RAND_MAX. Значение константы RAND_MAX определено в заголовочном файле stdlib.h и обычно равно 32767 - максимально допустимому целому числу. Для получения случайных чисел в диапазоне от 0 до N-1 достаточно вычислить остаток от целого деления rand() на N. Функция с прототипом void randomize (void) выполняет первоначальную настройку датчика случайных чисел так, чтобы последовательность чисел не повторялась при повторном выполнении программы.
Другим новым элементом в данной программе является использование манипуляторов для управления потоковым выводом с помощью стандартного объекта cout. Манипуляторы объявляются в заголовочном файле iomanip.h. Манипулятор setw(n) влияет на формат следующего элемента выходного потока. Он указывает на то, что значение будет выводиться в n позиций на экране (в программе n=6). Другой использованный манипулятор - endl - обозначает конец строки и переводит экранный курсор на начало новой строки. Его действие аналогично действию управляющего символа \n.
Имя массива является адресом его начала! Оно имеет тип константный указатель на <тип элементов массива>.
Конструкция a[i] эквивалентна *(a + i).
Для многомерного массива надо указать соответствующее количество индексов в квадратных скобках.
В С++ массивы тесно связаны с указателями. Имя массива можно использовать в качестве указателя на его первый элемент. Гарантируется осмысленность значения указателя на элемент, следующий за последним элементом массива. Это важно для многих алгоритмов. Но ввиду того, что такой указатель на самом деле не указывает ни на какой элемент массива, его нельзя использовать ни для чтения, ни для записи. Результат получения адреса элемента массива, предшествующего первому, не определён, и такой операции следует избегать.
Неявное преобразование имени массива в указатель на его первый элемент широко используется в вызовах функций.
int f(..., int x[], ...) { ... }
int f(..., int *x, ...) { ... }
void main() {
int a[10]; ...
// Можно использовать любой из двух вариантов
f(..., a, ...); ...
}
// Передаём в функцию f указатель на массив a
Неявное преобразование массива в указатель при вызове функции приводит к потере информации о размере массива. Вызываемая функция должна каким-либо образом определить этот размер, чтобы выполнять осмысленные действия.
При объявлении многомерного массива как параметра функции можно опустить только первую размерность.
int g(..., int x[][10], ...) { ... }
//Вторая и последующие размерности обязательны
Это ограничение при желании можно обойти. Правда, при этом возникают другие проблемы.