Вычисление значения выражения
При вычислении значений выражений, содержащих более одной операции, учитываются приоритет операций и порядок их расположения в выражении.
В приведенной ниже таблице рассмотренные к настоящему моменту операции языка C++ приведены в порядке убывания приоритета. Операции с разными приоритетами разделены чертой.
Таблица 3. Приоритеты операций
Операция | Краткое описание | Порядок выполнения |
:: | разрешение области видимости имен | |
() | повышение приоритета | слева направо |
Унарные операции: sizeof ~ ! - + ( тип ) и тип ( ) ++арг --арг | определение размера поразрядное НЕ логическое НЕ изменение знака плюс преобразование типа префиксное инкрементирование префиксное декрементирование | справа налево |
* / % | умножение деление остаток от деления | слева направо |
+ - | сложение вычитание | слева направо |
<< >> | сдвиг влево сдвиг вправо | слева направо |
< <= > >= | меньше меньше или равно больше больше или равно | слева направо |
== != | равно не равно | слева направо |
& | поразрядное И | слева направо |
^ | поразрядное исключающее ИЛИ | слева направо |
| | поразрядное ИЛИ | слева направо |
&& | логическое И | слева направо |
|| | логическое ИЛИ | слева направо |
? : | условная тернарная операция | справа налево |
= *= /= %= += -= <<= >>= &= |= ^= | присваивание умножение с присваиванием деление с присваиванием остаток от деления с присваиванием сложение с присваиванием вычитание с присваиванием сдвиг влево с присваиванием сдвиг вправо с присваиванием поразрядное И с присваиванием поразрядное ИЛИ с присваиванием поразрядное исключающее ИЛИ с присваиванием | справа налево |
, | последовательность | слева направо |
При вычислении значений выражений, содержащих операции с разным приоритетом, операции с более высоким приоритетом выполняются раньше. Например, в выражении
x = y + 5
вначале выполняется сложение, а затем присваивание, поскольку приоритет операции присваивания ниже приоритета операции сложения.
В выражении
a + b * c
сначала будет выполнено умножение b на c, а затем сложение a с полученным произведением. Изменять этот порядок можно при помощи скобок:
(a + b) * c
Теперь вначале выполнится суммирование a и b, а затем умножение полученной суммы на c.
Скобки могут быть вложенными, соответственно операции в самых внутренних скобках выполняются самыми первыми:
(a + (b * (c + d) ) – e)
7. Язык C++: производные типы данных
Массивы
Массив – это конечная упорядоченная именованная последовательность элементов одного и того же типа. При объявлении массива после его имени в квадратных скобках задается его размер (число элементов). В общем случае измерений у массива может быть несколько. В соответствии с их количеством различают одномерные, двумерные, трехмерные и другие массивы.
Одномерные массивы
Математический “аналог” одномерного массива – вектор. Примером одномерного массива может служить набор из двенадцати целых чисел, соответствующих числу дней в каждом календарном месяце. Объявление этого массива в программе может быть, например, таким:
int days[12];
В данной строке объявлен массив с именем days, состоящий из 12 элементов типа int.
Для того чтобы обратиться к определенному элементу массива, используется операция индексирования []. В квадратных скобках указывается целочисленное выражение, определяющее порядковый номер (индекс) элемента массива. Операнды операции индексирования – массив и значение индекса, результат – значение соответствующего элемента массива. Операция индексирования – одна из операций, имеющих наивысший приоритет. Нумерация элементов массива начинается с 0.
Присвоим, например, всем элементам массива days начальные значения (инициализируем массив days), помня о том, что начальный элемент массива days имеет индекс 0, а последний, соответственно, 11:
days [0] = 31;
days [1] = 28;
. . .
days [11] = 31;
Размер массива должен быть известен в момент компиляции, поэтому при объявлении массива в качестве его размера можно указывать только целую константу. При обращении же к элементу массива в качестве значения индекса может выступать любая переменная или выражение, представляемое ими значение вычисляется во время выполнения программы и преобразуется к целому значению.
Вывести на экран все элементы массива days можно, например, с помощью оператора for:
for (int i=0; i<12; i++)
cout << days[i];
Элементы массива располагаются в памяти последовательно без промежутков. Размер памяти, распределяемой под массив, равен размеру памяти для размещения всех его элементов.
Возможны различные способы инициализации (присваивания начальных значений элементам) массивов. Первый способ – инициализация массива с помощью операций присваивания. Массив может инициализироваться также посредством ввода данных с внешнего носителя или клавиатуры:
int a[10];
for (int i = 0; i < 10; i++)
cin >> a[i];
Когда начальные значения элементов массива известны, при объявлении массива можно использовать список начальных значений, заключаемый в фигурные скобки:
int a[10] = { 71, 28, 40, -4, 231, 1, -30, 0, 30, 31};
Значений в списке может быть меньше, чем элементов в массиве, в этом случае оставшиеся элементы массива получают нулевые начальные значения.
Автоматическое генерирование случайных значений осуществляется стандартной функцией rand(), описанной в файле заголовков stdlib.h. Пример инициализации массива с помощью датчика случайных чисел:
#include <stdlib.h>
...
for (int i = 0; i < 10; i++)
a[i]=rand();
Алгоритм генерации случайных чисел “отталкивается” от значения выбранной начальной точки. При одной и той же начальной точке одним и тем же будет и набор генерируемых случайных значений. Стандартная начальная точка задается значением 1. При необходимости "точку отсчета" можно изменить с помощью стандартной функции srand(), например:
srand(2);
Дата добавления: 2015-11-10; просмотров: 1392;