Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Операторы и их классификация




Оператор – это программная конструкция, обеспечивающая выполнение в программе определенных действий с данными. После каждого оператора в программе на С++ должна ставиться точка с запятой.

Различают следующие виды операторов:

· описания объектов

· оператор вычисления выражения

· операторы ветвления

· операторы цикла

· операторы передачи управления

· вызова функции

Описания объектов относят к неисполняемым операторам. Все остальные операторы называются исполняемыми операторами.

Любое выражение, выполняющее вычисление определенного значения, и заканчивающееся точкой с запятой, рассматривается как оператор.

Примеры:

i++; // выполняется операция инкремента

a*=b + c; // выполняется умножение с присваиванием

Частным случаем выражения является пустой оператор – знак точка с запятой. Этот оператор не выполняет никаких действий. Ставится там, где синтаксис предлагает наличие оператора, но при каких-либо операций выполнять не требуется.

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

По характеру действий различают два типа операторов: операторы преобразования данных и операторы управления работой программы (управляющие конструкции программы).

К операторам преобразования относятся операторы описания объектов, вычисления выражения и вызова функции, к управляющим конструкциям – операторы ветвления, цикла и передачи управления.

Операторы могут объединяться в группы – составные операторы и блоки. Составной оператор и блок – это последовательность операторов, заключенная в фигурные скобки (точка с запятой в конце не ставится). Синтаксически составные операторы и блоки выступают в качестве одного оператора.

Отличие составного оператора от блока заключается в том, что составной оператор включает только исполняемые операторы, а блок - также описания объектов.

Пример составного оператора:

{

n++;

summa+=(float)n;

}

Пример блока:

{

int n=0;

n++;

summa+=(float)n;

}

Все операторы программы выполняются последовательно в порядке записи их в программе (сверху вниз, слева направо), если нет операторов передачи управления, изменяющих этот порядок.

Операторы могут быть вложены друг в друга. В интересах быстрой интерпретации и минимизации ошибок вложенность операторов обозначается отступами.

Тема 1.8

Операторы ветвления

 

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления.

Формат оператора: if (выражение) оператор_1; [else оператор_2;]

Структурная схема оператора приведена на рисунке 1.4.

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Вторая ветвь вместе с ключевым словом else может отсутствовать. Подобная конструкция называется «пропуск оператора».

Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы, но не может состоять из одних описаний. Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.

 

Рисунок 1.4 - Структурная схема условного оператора

Примеры:

if (a < 0) b = 1; // 1

if (a < b && (a>d || a = = 0)) b++; else {b *= a; a = 0;} // 2

if (a < b) {if (a < c) m = a; else m = c;} else {if (b < c) m = b; else m = c;} // 3

if (a++) b++; // 4

if (b > a) max = b; else max = a; // 5

В примере 1 отсутствует ветвь else - присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.

Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение в примере 2будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом — ИЛИ.

Оператор в примере 3вычисляет наименьшее значение из трех переменных. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть else к ближайшему if.

Пример 4 иллюстрирует то, что хотя в качестве выражений в операторе if чаще всего используются операции отношения, это не обязательно.

Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае: max = (b > а)? b: a;).

Распространенная ошибка при записи условных операторов — использование в выражениях вместо проверки на равенство (= =) простого присваивания (=), например, if (a = 1) b = 0;. Синтаксической ошибки нет, так как операция присваивания формирует результат (true или false, преобразованное в int), который и оценивается на равенство/неравенство нулю. В данном примере присваивание переменной b будет выполнено независимо от значения переменной а. Поэтому в выражениях проверки переменной на равенство константе константу рекомендуется записывать слева от операции сравнения: if (1= = a) b=0;.

Вторая ошибка — неверная запись проверки на принадлежность диапазону. Например, чтобы проверить условие 0 < х < 1, нельзя записать его в условном операторе непосредственно, так как будет выполнено сначала сравнение 0 < x, x а его результат (true или false, преобразованное в int) будет сравниваться с 1. Правильный способ записи: if(0 < х && х < 1).

Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например: if (int i = fun(t)) a -= i; else a += i;. Объявлять внутри оператора if можно только одну переменную. Область ее видимости начинается в точке объявления и включает обе ветви оператора. Объявление переменной в тот момент, когда ей необходимо присвоить значение позволяет избежать случайного использования переменной до ее инициализации.

Пример: Производится выстрел по мишени, изображенной на рисунок 1.5. Определить количество очков.

Рисунок 1.5 - Мишень

 

#include <iostream.h>

int main(){

float x, у; int kol;

cout << "Введите координаты выстрела\n";

cin >> x >> у;

if (x*x + y*y < 1) kol = 2;

else if (x*x + y*y < 4) kol = 1;

else kol =0;

cout << "\n Очков: " << kol;

return 0;

}

Программу можно еще упростить с помощью промежуточной переменной и записи условия в виде двух последовательных, а не вложенных, операторов if.

#include <iostream.h>

int main(){

float x, y, temp; int kol;

cout << "Введите координаты выстрела\n";

cin >> x >> у;

temp = x*x + y*y;

kol = 0;

if (temp < 4) kol = 1;

if (temp < 1) kol = 2;

cout << "\n Очков: " << kol;

return 0;

}

В первом варианте значение переменной kol присваивается ровно один раз, а во втором — от одного до трех раз в зависимости от выполнения условий.





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


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 1769 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2227 - | 2156 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.