Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

1.2.2Оператор присваивания

Один из наиболее важных и часто применяемых операторов – это оператор присваивания. Задача данного оператора состоит в присвоении переменной определенного значения. При объявлении переменной происходит выделение ячейки памяти под эту переменную, а присвоение значения заключается в занесении значения в эту ячейку памяти. Символом оператора присваивания является знак «равно». Например, запись number = 10 означает, что переменной number присваивается значение 10.

Элемент слева от знака присваивания должен быть именем переменной, а значение справа – выражением. Причем в этом выражении может присутствовать и переменная, которой присваивается значение. В частности, для увеличения переменной x на единицу можно воспользоваться следующей записью: x=x+1.

1.2.3Приоритет операций

Рассмотрим следующий фрагмент кода:

result = 5*x*x – 2*y + 10/z;

Результат будет различным, если изменять порядок операций. Для примера положим, что x=2, y=3, а z=5. Если выполнить вначале все умножения и деление, а затем вычислить результаты сложения и вычитания, то переменная result будет равна 16, но, если вначале выполнить вычитание и сложение, то результат будет равен 0.

Рассмотренный пример говорит о том, что во избежание подобных неоднозначностей язык программирования должен иметь правило, регламентирующее порядок выполнения операций. Такое правило существуют, и основано оно на понятии приоритета операций. Правило заключается в том, что каждой операции назначается приоритет, и операции, имеющие более высокий приоритет, выполняются раньше. Если несколько операций имеют одинаковый приоритет, то они выполняются в установленном для них порядке. Приоритеты арифметических операций соответствуют правилам математики. Сменить приоритет можно с использованием скобок:

result = 5*x * (x–2)*(y+10)/z;

1.2.4Смешанные выражения и преобразование типов

Обычно в выражениях присутствуют переменные и константы одного типа, но некоторые выражения могут содержать переменные и константы разных типов; такие выражения называют смешанным. Для примера рассмотрим следующую задачу.

Задана цена булки хлеба в рублях и количество купленных булок хлеба; требуется вычислить стоимость всей покупки. В данной задаче цену следует объявить c вещественным типом, поскольку в дробную часть попадут копейки; в то же время количество булок хлеба является целым числом. Программа выглядит так:

//Цена булки составляет 12 рублей 50 копеек

double price = 12.5;

//Куплено 3 булки хлеба

int quantity = 3;

//Стоимость покупки

double total = price*quantity;

При обнаружении различных типов данных в одном выражении происходит автоматическое преобразование типов по определенным правилам. Основное правило заключается в том, что более узкие типы преобразуются к более широким. Например, если в выражении присутствуют переменные типов int и double, то результат будет иметь тип double.

1.2.5Явное преобразование типов

В смешанном выражении преобразование типов происходит автоматически согласно перечисленным правилам. Возможно также и ручное или явное преобразование типов, называемое по-другому приведение типов. Это означает, что программист сам указывает, к какому типу следует преобразовать выражения. Данная операция – операция явного преобразования типа – выглядит следующим образом:

(<тип>) <выражение>;

int x = (int) 13.67;

double y = 1/(double)7;

Рассмотрим один пример. Операция деления чисел, обозначаемая знаком /, является в некотором смысле интеллектуальной: дело в том, что способ выполнения данной операции зависит от типов ее операндов. Если провести аналогию с языком Pascal, то можно вспомнить, что в нем присутствует дополнительная операция деления нацело, обозначаемая через div. Эта операция применима только к целым числам, и ее результатом также является целое число. В языке C++ отсутствует аналог операции div, но, если оба операнда имеют целый тип, то операция / действует подобно div. Проблема возникает тогда, когда вы хотите поделить не нацело, а получить вещественный результат. Очевидный, казалось бы, способ проблему не решит:

double result = 10/3;

Результатом этой операции будет вещественное число 3.0, поскольку вначале выполнится деление нацело, и получится результат 3, а затем при помощи автоматического преобразования типов число 3 превратится в 3.0. Для того чтобы заставить операцию деления поделить так, как нам нужно, следует использовать явное преобразование типов:

double result= (double) 10/3;

Теперь получится 3.333333. Другим способом решить данную проблему является дописывание точки:

double result= 10.0/3;