Operators

advertisement
Использование основных операторов языков С/С++
1. Краткие теоретические сведения
Операторы управления работой программы называют управляющими конструкциями
программы. К ним относят:
• составные операторы;
• операторы выбора;
• операторы циклов;
• операторы перехода.
1.1. Составные операторы
К составным операторам относят собственно составные операторы и блоки. В обоих случаях
это последовательность операторов, заключенная в фигурные скобки. Блок отличается от
составного оператора наличием определений в теле блока. Например:
{
n++;
summa+=n;
}
{
int n=0;
n++;
summa+=n;
}
это составной оператор
это блок
1.2. Операторы выбора
Операторы выбора - это условный оператор и переключатель. Условный оператор имеет
полную и сокращенную форму.
if ( <выражение-условие> ) <оператор>;
//сокращенная форма
В качестве <выражения-условия> могут использоваться арифметическое выражение,
отношение и логическое выражение. Если значение <выражения-условия> отлично от нуля
(т. е. истинно), то выполняется оператор. Например:
if (x<y&&x<z)min=x;
if ( <выражение-условие> ) <оператор1>;
else <оператор2>;
//полная форма
Если значение <выражения-условия> отлично от нуля, то выполняется <оператор1>, при
нулевом значении <выражения-условия> выполняется <оператор2>.
Примеры:
i
i
i
i
i
f
f
f
f
f
(а<0) b = 1:
//1
(a<b && (a>d || a==0)) b++; else {b *= a; a = 0;}
//2
(a<b) { i f (a<c) m = a; else m = c;}; else {i f (b<c) m = b; else m = c;} //3
(a++) b++;
//4
(b>a) max = b; else max = a;
//5
В примере 1 отсутствует ветвь else. Подобная конструкция называется по другому «пропуск
оператора», поскольку присваивание либо выполняется, либо пропускается в зависимости от
выполнения условия.
Если требуется проверить несколько условий, их объединяют знаками логических
операций. Например, выражение в примере 2 будет истинно в том случае,
если выполнится одновременно условие а<Ь и одно из условий в скобках. Если опустить
внутренние скобки, будет выполнено сначала логическое И, а потом — ИЛИ.
Оператор в примере 3 вычисляет наименьшее значение из трех переменных. Фигурные
скобки в данном случае не обязательны, так как компилятор относит
часть el se к ближайшему i f.
Пример 4 напоминает о том, что хотя в качестве выражений в операторе if чаще
всего используются операции отношения, это не обязательно.
Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в
виде условной операции (в данном случае: max = (b > а) ? b : а;).
Переключатель определяет множественный выбор. Оператор switch (переключатель)
предназначен для разветвления процесса вычислений на несколько направлений.
Формат оператора:
switch ( выражение )
{
case константное_выражение_1: [список_операторов_1];
case константное_выражение_2: [список_операторов_2];
case константное_выражение_п: [список_операторов_п];
[default: операторы; ]
}
Выполнение оператора начинается с вычисления выражения (оно должно быть
целочисленным), а затем управление передается первому оператору из списка, помеченгюго
константным выражением, значение которого совпало с вычисленным. После этого, если
выход из переключателя явно не указан, последовательно выполняются все остальные ветви.
Выход из переключателя обычно выполняется с помощью операторов break или
return (операторы перехода).
Все константные выражения должны иметь разные значения, но быть одного и того же
целочисленного типа. Несколько меток могут следовать подряд. Если совпадения не
произошло, выполняются операторы, расположенные после слова default (а при его
отсутствии управление передается следующему за switch оператору).
Пример (программа реализует простейший калькулятор на 4 действия):
#include <iostream.h>
int main()
{
int a, b, res;
char op;
cout « "\п Введите 1й операнд : "; cin » a;
cout « "\п Введите знак операции : "; cin » op;
cout « "\п Введите 2й операнд : "; c1n » 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 « ”\п Неизвестная операция”; f= false;
}
if (f) cout « "\п Результат : " « res;
return 0;
}
1.3. Операторы циклов
1. Цикл с предусловием:
while (<выражение-условие>)
<тело_цикла> ;
В качестве <выражения-условия> чаще всего
используется отношение или логическое
выражение. Если оно истинно, т.е. не равно 0, то тело цикла выполняется до тех пор пока
<выражение-условие> не станет ложным.
2. Цикл с постусловием:
do
<тело_цикла>;
while (<выражение-условие>);
Тело цикла выполняется до тех пор, пока <выражение-условие> истинно.
3. Цикл с параметром:
for ( <выражение_1>; <выражение-условие>; <выражение_3>)
<тело_цикла>;
<Выражение_1> и <выражение_3> могут состоять из нескольких выражений, разделенных
запятыми. <Выражение_1> - задает начальные условия для цикла (инициализация).
<Выражение-условие> определяет условие выполнения цикла, если оно не равно 0, цикл
выполняется, а затем вычисляется значение <выражения_3>. <Выражение_3> - задает
изменение параметра цикла или других переменных (коррекция). Цикл продолжается до тех
пор, пока <выражение-условие> не станет равно 0. Любое выражение может отсутствовать, но
разделяющие их « ; » должны быть обязательно.
Примеры использования цикла с параметром.
1) Уменьшение параметра:
for ( n=10; n>0; n--)
{ <тело цикла>};
2) Изменение шага корректировки:
for ( n=2; n>60; n+=13)
{ <тело цикла>};
3) Возможность проверять условие отличное от условия, которое налагается на число
итераций:
for ( num=1; num*num*num<216; num++)
{ <тело цикла>};
4) Коррекция может осуществляться не только с помощью сложения или вычитания:
for ( d=100.0; d<150.0; d*=1.1)
{ <тело цикла>};
for (x=1; y<=75; y=5*(x++)+10)
{ <тело цикла>};
5) Можно использовать несколько инициализирующих или корректирующих выражений:
for (x=1, y=0; x<10; x++, y+=x);
{ <тело цикла>};
1.4. Операторы перехода
В C++ есть четыре оператора, изменяющих естественный порядок выполнения вычислений:
• оператор выхода из цикла break;
• оператор перехода к следующей итерации цикла continue;
• оператор безусловного перехода goto;
• оператор возврата из функции return.
1) break - оператор прерывания цикла.
if (<выражение_условие>) {< операторы>} break;
<операторы>;
Т. е. оператор break целесообразно использовать, когда условие продолжения итераций надо
проверять в середине цикла.
Пример:
// ищет сумму чисел вводимых с клавиатуры до тех пор, пока не будет введено 100 чисел или
// 0
for(s=0, i=1; i<100; i++)
{
cin>>x;
if( x==0) break; // если ввели 0, то суммирование заканчивается
s+=x;
}
2) continue - переход к следующей итерации цикла. Он используется, когда тело цикла
содержит ветвления.
Пример:
//ищет количество и сумму положительных чисел
for( k=0, s=0, x=1; x!=0; )
{
cin>>x;
if (x<=0) continue;
k++; s+=x;
}
3) Оператор goto - oператор
безусловного перехода. goto имеет формат:
goto метка:
В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор:
Оператор goto передает управление на помеченный оператор. Метка — это обычный
идентификатор, областью видимости которого является функция, в теле которой он задан.
Использование оператора безусловного перехода оправдано в двух случаях:
• принудительный выход вниз по тексту программы из нескольких вложенных
циклов или переключателей;
• переход из нескольких мест функции в одно (например, если перед выходом
из функции всегда необходимо выполнять какие-либо действия).
В остальных случаях для записи любого алгоритма существуют более подходящие средства,
а использование goto приводит только к усложнению структуры программы и затруднению
отладки. Применение goto нарушает принципы структурного и модульного
программирования, по которым все блоки, из которых состоит программа, должны иметь
только один вход и один выход.
В любом случае не следует передавать управление внутрь операторов if, switch и циклов.
Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы,
расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int к: ...
goto metka; ...
{int а = 3, b = 4;
к = а + b;
metka: int m = к + 1; ...
}
После выполнения этого фрагмента программы значение переменной m не определено.
4) Оператор возврата из функции return завершает выполнение функции и передает
управление в точку ее вызова. Вид оператора:
return [ выражение ];
Выражение должно иметь
скалярный тип. Если тип возвращаемого функцией
значения описан как void, выражение должно отсутствовать.
Download