русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 1873; Нарушение авторских прав


 

5.2.1.Условный оператор if. Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рис. 4.6. Формат оператора:

 

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

 

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

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

 


Рис.4.6.

 

Примеры:

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 будет истинно в том случае, если выполнится одновременно условие а<b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом -ИЛИ.

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



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

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

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

#include <iostream.h>

int main(){

float x. y;

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;

2 1 0
return 0;

}

 
 

 


Рис. 4.7. Мишень

 

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

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

Тип переменных выбирается исходя из их назначения. Координаты выстрела нельзя представить целыми величинами, так как это приведет к потере точности результата, а счетчик очков не имеет смысла описывать как вещественный. Даже такую простую программу можно еще упростить с помощью промежуточной переменной и записи условия в виде двух последовательных, а не вложенных, операторов if (обратите внимание, что в первом варианте значение переменной kol присваивается ровно один раз, а во втором — от одного до трех раз в зависимости от выполнения условий):

 

#include <iostream.h>

int main(){

float x, у, 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;

}

 

Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например:

if (int i = fun(t)) a - = i; else a += 1;

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

5.2.2.Оператор switch.Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Структурная схема оператора приведена на рис. 4.8.

Формат оператора:

switch ( выражение ){

case константное_выражение_1: [список_операторов_1]

case константное_выражение_2: [список_операторов_2]

case константное_выражение_n: [список_операторов_n]

[default: операторы ]

}

 
 

 

 


Рис. 4.8.

 

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

Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.

Все константные выражения должны иметь разные значения, но быть одного и того же целочисленного типа. Несколько меток могут следовать подряд. Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору).

Пример (программа реализует простейший калькулятор на 4 действия):

#include <iostream.h>

int main(){

int a, b, res;

char op;

cout <<”\nВведите 1й операнд : “; cin >> a;

cout <<”\n Введите знак операции : "; cin >> op;

cout <<”\n Введите 2й операнд : "; cin >> b;

bool f = true;

switch (op)

{

case '+': res=a+b; break;

case '-': res=a-b; break;

case '*': res=a*b; break;

case '/': res=a/b; break;

default : cout<<”\n Неизветсная операция”; f=false;

}

if (f) cout << “\n Результат :” << res;

return 0;

}

В случае синтаксической ошибки в слове default сообщение об ошибке не выдастся, поскольку компилятор воспримет это слово как допустимую метку оператора.



<== предыдущая лекция | следующая лекция ==>
Переменные и выражения | Операторы цикла.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.077 сек.