Вычисление значения выражения

При вычислении значений выражений, содержащих более одной операции, учитываются приоритет операций и порядок их расположения в выражении.

В приведенной ниже таблице рассмотренные к настоящему моменту операции языка 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; просмотров: 1333;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.