Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Массивы
5.1 Статические массивы в С(С++)
Часто для работы с множеством однотипных данных (целочисленными значениями, строками, датами и т.п.) оказывается удобным использовать массивы. Например, можно создать массив для хранения фамилий студентов, обучающихся в одной группе. Вместо создания переменных для каждого студента, например Студент1, Студент2 и т.д., достаточно создать один массив, где каждой фамилии из списка будет присвоен порядковый номер. Таким образом, можно дать следующее определение. Массив — структурированный тип данных, состоящий из фиксированного числа элементов одного типа.
Массив в табл. 5.1 имеет 8 элементов, каждый элемент сохраняет число вещественного типа. Элементы в массиве пронумерованы (нумерация массивов начинается с нуля). Такого рода массив, представляющий собой просто набор данных одного и того же типа, называют простым или одномерным массивом. Для доступа к данным, хранящимся в определённом элементе массива, необходимо указать имя массива и порядковый номер этого элемента, называемый индексом.
№ элемента массива | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Значение | 13.65 | -0.95 | 16.78 | 8.09 | -11.76 | 9.07 | 5.13 | -25.64 |
Если возникает необходимость хранения данных в виде матриц, в формате строк и столбцов, то необходимо использовать двумерные массивы. В табл. 5.2 приведён пример массива, состоящего из четырёх строк и пяти столбцов. Это двумерный массив. Строки в нём можно считать первым измерением, а столбцы вторым. Для доступа к данным, хранящимся в этом массиве, необходимо указать имя массива и два индекса, первый должен соответствовать номеру строки, а второй номеру столбца, где хранится необходимый элемент.
1.5 | -0.9 | 1.8 | 7.09 | -1.76 |
3.6 | 0.5 | 6.7 | 0.09 | -1.33 |
13.65 | 0.95 | 16.78 | 8.09 | -11.76 |
7.5 | 0.95 | 7.3 | 8.9 | 0.11 |
Если при описании массива определён его размер, то массив называют статическим. Рассмотрим работу с одномерными статическими массивами в языке С(С++). Двумерные массивы подробно описаны в следующей главе.
5.1.1 Описание статических массивов
Описать статический массив в С(С++) можно так:
тип имя_переменной [размерность];
размерность — количество элементов в массиве. Например:
int x[10]; //Описание массива из 10 целых чисел. Первый //элемент массива имеет индекс 0, последний 9. float a[20]; //Описание массива из 20 вещественных чисел. //Первый элемент массива имеет индекс 0, последний 19.
Размерность массива и тип его элементов определяют объём памяти, который необходим для хранения массива. Рассмотрим ещё один пример описания массива:
const int n=15; //Определена целая положительная константа. double B[n]; //Описан массив из 15 вещественных чисел.
При описании статического массива в качестве размерности можно использовать целое положительное число или предопределённую константу.
Элементы массива в С(С++) нумеруются с нуля. Первый элемент всегда имеет номер ноль, а номер последнего элемента на единицу меньше заданной при его описании размерности:
char C[5]; //Описан массив из 5 символов, нумерация от 0 до 4.
5.1.2 Основные операции над массивами
Доступ к каждому элементу массива осуществляется с помощью индекса — порядкового номера элемента. Для обращения к элементу массива указывают его имя, а затем в квадратных скобках индекс:
имя_массива [индекс]
Например:
const int n=15; double C[n], S; S=C[0]+C[n-1]; //Сумма первого и последнего элементов массива С.
Массиву, как и любой другой переменной, можно присвоить начальное значение (инициализировать). Для этого значения элементов массива нужно перечислить в фигурных скобках через запятую:
тип имя_переменной[размерность]={элемент_0, элемент_1, ...};
Например:
float a[6] = { 1.2, ( float ) 3/4, 5./6, 6.1 }; //Формируется массив из шести вещественных чисел, значения элементам присваиваются по //порядку. Элементы, значения которых не указаны (в данном случае a[4], a[5]), обнуляются: //a[0]=1.2, a[1]=(float)3/4, a[2]=5./6, a[3]=6.1, a[4]=0, a[5]=0, //для элементов a[1] и a[2] выполняется преобразование типов.
Рассмотрим, как хранится массив в памяти компьютера. Предположим, была описана переменная:
double x[30];
это значит, что в памяти компьютера выделяется место для хранения 30 элементов типа double. При этом адрес выделенного участка памяти хранится в переменной x. Таким образом, к значению нулевого элемента массива можно обратится двумя способами:
- В соответствии с синтаксисом языка С(С++) записать x[0].
- Применить операцию *x, так как адрес начала массива хранится в переменной x (по существу x — указатель на double).
Если к значению x добавить единицу (число 1), то мы сместимся на один элемент типа double. Таким образом, x+1 — адрес элемента массива x с индексом 1. К первому элементу массива x также можно обратиться двумя способами: x[1] или *(x+1). Аналогично, к элементу с индексом 2 можно обращаться либо x[2], либо *(x+2). Таким образом, получается, что к элементу с индексом i можно обращаться x[i] или *(x+i).
При обработке массива (независимо от способа обращения x[i] или *(x+i)) программист сам должен контролировать, существует ли элемент массива x[i] (или *(x+i)) и не вышла ли программа за границы массива.
Особенностью статических массивов является определение размера при написании текста программы. При необходимости увеличить размер массива, необходимо изменить текст программы и перекомпилировать её. При динамическом выделении памяти для массивов в С(С++) можно использовать указатели и операторы (функции) выделения памяти.