- •Обзорные лекции по курсу
- •Арифметические операции
- •Int main()
- •Int main ()
- •Логические операции
- •Операторы сравнения
- •Int main ()
- •If(проверяемое_условие)
- •Int main ()
- •Int main()
- •If(проверяемое_условие)
- •Int main()
- •Int main ()
- •Int main ()
- •Int main ()
- •Int main()
- •Int.Main ()
- •Int main ()
- •Int main ()
- •Int main ()
- •Int main ()
- •Int main ()
- •Int main ()
- •Int main ()
- •Int main()
- •If(проверяемое_условие)
- •Int main ()
- •If(проверяемое_условие)
- •If(проверяемое_условие)
Int main ()
{
bool dev = false;
for(int i=2; i<50; i++)
{
for(int j=2; j<i; j++)
{
if (i%j)
continue;
else
{
dev = true;
break;
}
}
if(!dev)
cout « i « " ";
dev = false;
}
return 0;
}
Программа организована в виде двух вложенных циклов таким образом, что осуществляется перебор и проверка остатка от деления пары чисел, первое из которых изменяется от 2 до 50, а второе - от 2 до значения первого числа. Если остаток от деления ненулевой, осуществляется продолжение внутреннего цикла по оператору continue. Если остаток от деления составил 0, выполняется выход из внутреннего цикла с установкой признака деления в логической переменной dev. По окончании внутреннего цикла производится анализ логической переменной dev и вывод простого числа.
Оператор goto и метки
Метка представляет собой идентификатор с расположенным за ним символом двоеточия (:).
Метками помечают какой-либо оператор, на который в дальнейшем должен быть осуществлен безусловный переход.
Безусловная передача управления на метку производится при помощи оператора goto.
Оператор goto может осуществлять переход (адресоваться) к меткам, обязательно расположенным в одном с ним теле функции.
Синтаксис оператора goto:
goto метка;
Данный оператор - очень мощное и небезопасное средство управления поведением программы. Использовать его нужно крайне осторожно, так как, например, "прыжок" внутрь цикла (обход кодов инициализации) может привести к трудно локализуемым ошибкам.
Рассмотрим пример применения оператора goto.
#include <iostream.h>
Int main ()
{
// Инициализация переменных
if (...)
{
// Если условие выполнено, производим
// какие-то действия и переходим
// к оператору по метке label
goto label;
}
...
label:
...
return 0;
}
Как только выполнение программы достигнет оператора goto, управление будет передано оператору, следующему за меткой label.
Вообще говоря, использование структурного и объектно-ориентированного подходов к программированию позволяет полностью отказаться от применения операторов безусловного перехода. Однако на практике часто бывают случаи, когда goto значительно упрощает код программы. В особенной степени это утверждение касается вложенных конструкций switch-case и if-else.
В качестве примера рассмотрим цифровую модель светофора:
#include <iostream.h>
Int main ()
{
enum lighter {RED, REDYELLOW, YELLOW, GREEN};
lighter current = YELLOW;
lighter previous = GREEN;
lighter next = RED;
start:
switch(current)
{
case RED:
cout « "СТОП!!!\n";
if(previous = YELLOW)
{
next = REDYELLOW;
break;
}
else
goto labl;
case REDYELLOW:
if(previous == YELLOW)
goto labl;
if(previous == GREEN)
goto labl;
cout « "Приготовиться.\n";
next = GREEN;
break;
case YELLOW:
if(previous = YELLOW)
goto labl;
if(previous = RED)
goto labl;
cout « "Остановись\n";
next = RED;
previous = GREEN;
break;
case GREEN:
if(previous == RED)
goto labl;
if(previous == YELLOW)
goto labl;
previous = REDYELLOW;
next = YELLOW;
cout « "Вперед!\n";
break;
}
previous = current;
current = next;
goto start;
labl:
cout « "Светофор неисправен...\n";
current = previous = next = YELLOW;
goto start;
return 0;
}
В приведенной программе объявляются три переменные для хранения информации о текущем (current), предыдущем (previous) и следующем (next) состоянии светофора. В операторе switch производится анализ текущего состояния и на основании полученного результата осуществляется вывод соответствующего сообщения. В случае сбоя работы светофора (рассчитанные значения переменных next и previous не совпадают с реальными данными), осуществляется переход к метке lаb1 с последующим переводом светофора в режим "Неуправляемый перекресток". После проверки выполнение программы продолжается с метки start.
РЕЗЮМЕ
Процедурные возможности C++ определяются как многообразием поддерживаемых типов данных, так и многообразиемопераций над даннымисоответствующих типов.
Операции представляют собой некоторое действие, выполняемое над одним (унарная операция) или несколькими операндами (бинарная операция), результатом которого является возвращаемое значение. К базовым арифметическим операциям можно отнести:
операции сложения (+), вычитания (-), умножения (*), деления (/) и взятия по модулю (%), то есть вычисления остатка от деления левого операнда на правый.
Для эффективного использования возвращаемого операциями значения предназначен оператор присваивания (=) и его модификации: сложение с присваиванием (+=). вычитание с присваиванием (-=), умножение с присваиванием (*=). деление с присваиванием (/=), модуль с присваиванием (%=) и ряд других, которые будут рассмотрены позже.
В приведенном ниже коде представлены примеры некоторых операций:
#include <iostream.h>