Читайте также:
|
|
Массив – это конечная именованная последовательность однотипных величин. При описании одномерного массива в С++ используется конструкция:
тип имя_массива [количество элементов];
int a[10], line[33];
float mas[5];
Нумерация элементов любого массива в языке С++ всегда начинается с 0, т.е. индексы элементов меняется от 0 до N-1, где N – количество значений индекса.
В соответствии с с синтаксисом Си++ в языке существуют только одномерные массивы, элементами которых могут быть также массивы. Поэтому двумерный массив определяется как массив массивов. Таким образом, описание float Z[13][6] определяет одномерный массив Z из 13 элементов-массивов, каждый из которых состоит из 6 элементов типа float. Элементы этого массива можно перечислить так: Z[0][0], Z[0][1], Z[0][2], …, Z[0][5], Z[1][0], Z[1][1], Z[1][2], …, Z[12][4], Z[12][5].
Транслятор языка Си++ может обрабатывать массивы размерностью до 31. Однако на практике чаще всего используются одномерные и двумерные массивы.
Задание значений элементов массива можно производить:
· с помощью операции присваивания
float dan [3];
int ss [2][3];
dan[0] = 4.02; dan[1] = 6.1; dan[2] =12.03;
ss[0][0] =3.09; ss[0][1] =1.0; ss[0][2] =5.04
· с использованием инициализации
float vektor[5] = {8.1, 6.5, 2.02, 9.9, 1.67}, mas [] = {6.1, 4, 2.8};
int matrix[2][2]={1.2, 1.3, 1.6, 1.5}; f[][] = { {10, 20}, {30,40}, {50,60} };
· ввод значений элементов массива с клавиатуры в цикле
cout<<“Введите значения элементов одномерного массива M“;
for (i=0; i<n; i++) cin>>M[i];
cout<<“Введите значения элементов двумерного массива dv[4][5]“;
for (i=0; i<4; i++)
for (j=0; j<5; j++) cin>>dv[i][j];
· задание значений элементов массива с помощью функции random(int n), предварительно подключив к программе заголовочный файл stdlib.h стандартной библиотеки.
int a[5], i, j;
float b[3][8];
for (i=0; i<5; i++) a[i] = random (50) -25;
for (i=0; i<3; i++)
for (j=0; j<8; j++) b[i][j] = random(30)/1.3 -10.5;
При обращении к элементам массива автоматический контроль выхода индекса за границу массива не производится, что может привести к ошибкам.
В соответствии с синтаксисом языка Си++ имя массива без индексов является указателем-константой, т.е. адресом его первого элемента (адрес начала массива). Прибавив к имени массива целую величину, можно получить адрес соответствующего элемента. Таким образом, &z[i] и z+i – это две формы определения адреса одного и того же элемента массива, отстоящего на i позиций от его начала. При этом адрес следующего элемента в массиве будет зависеть от типа элементов массива.
Операция индексирования одномерного массива z[i] может быть определена следующей эквивалентной записью *(z+i), обращение к элементам двумерного массива x[i][j] представляется в виде *(x[i]+j) или *(*(x+i)+j).
При потоковом выводе значений элементов массива рекомендуется применять флаги форматирования, с помощью которых можно по разному комбинировать свойства потока. Эти флаги унаследованы всеми потоками библиотеки из базового класса ios:
· left – вывод значения с левым выравниванием (прижать к левому краю поля);
· right – вывод значения с правым выравниванием (устанавливается по умолчанию);
· showpoint – при выводе вещественных чисел обязательно печатать десятичную точку и следующие за ней нули (даже для вещественного числа, имеющего нулевую дробную часть);
· scientific – для вещественных чисел использовать представление в формате с плавающей точкой, т.е. с указанием порядка и мантиссы;
· fixed – для вещественных чисел использовать представление в формате с фиксированной точкой;
В библиотеке классов ввода-вывода существуют функции flags() и setf() для проверки значений перечисленных флагов, а также для их установки и сбрасывания в исходные состояния. Флаги могут обрабатываться как по отдельности, так и группами, для чего используют дизъюнктивные выражения, в которых флаги связаны побитовой операцией ‘|’ (ИЛИ).
cout.setf (ios::fixed|ios::showpoint|ios::left);
В показанном выше примере устанавливается вывод вещественных чисел с фиксированной десятичной точкой и форматированием по левому краю.
Достаточно простой способ изменения параметров и флагов потока при форматировании обеспечивают специальные функции, называемые манипуляторами. Отличие манипуляторов от обычных функций состоит в том, что их имена (без параметров) и вызовы (с параметрами) можно использовать в качестве правого операнда для операции обмена (<< или >>). В качестве левого операнда в этом выражении используется поток.
Манипуляторы с параметрами определены в файле iomanip.h:
Таким образом, для вывода значения вещественного числа x на экране монитора в шести позициях (включая десятичную точку) с точностью до десятых можно использовать следующую конструкцию потокового вывода:
float x=0.6278654;
cout<<setw(6)<< setprecision(1)<<x
Дата добавления: 2015-07-10; просмотров: 86 | Нарушение авторских прав