Приветствую Вас Гость | RSS

ALLDev

Суббота, 21.12.2024, 15:41
Главная » Статьи » Программирование » C/C++/C#

Учебник C++. Операторы

Что такое оператор

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

Различают операторы объявления имен, операторы управления и операторы-выражения.

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

Выражения мы рассматривали в предыдущей лекции. Выражение, после которого стоит точка с запятой, – этооператор-выражение. Его смысл состоит в том, что компьютер должен выполнить все действия, записанные в данном выражении, иначе говоря, вычислить выражение. Чаще всего в операторе-выражении стоит операция присваивания или вызов функции. Операторы выполняются последовательно, и все изменения значений переменных, сделанные в предыдущем операторе, используются в последующих.

a = 1;
b = 3;
m = max(a, b);

Переменной a присваивается значение 1, переменной b – значение 3. Затем вызывается функция max с параметрами 1 и 3, и ее результат присваивается переменной m.

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

x + y – 12; // сложить значения x и y и 
 // затем вычесть 12
func(d, 12, x); // вызвать функцию func с 
 // заданными параметрами

Объявления имен

Эти операторы объявляют имена, т.е. делают их известными программе. Все идентификаторы или имена, используемые в программе на языке Си++, должны быть объявлены.

Оператор объявления состоит из названия типа и объявляемого имени:

int x; // объявить целую переменную x
double f; // объявить переменную f типа 
 // double
const float pi = 3.1415; 
 // объявить константу pi типа float
 // со значением 3.1415

Оператор объявления заканчивается точкой с запятой.

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

Операторы управления определяют, в какой последовательности выполняется программа. Если бы их не было, операторы программы всегда выполнялись бы последовательно, в том порядке, в котором они записаны.

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

Условные операторы позволяют выбрать один из вариантов выполнения действий в зависимости от каких-либо условий. Условие – это логическое выражение, т.е. выражение, результатом которого является логическое значение true (истина) или false (ложь).

Оператор if выбирает один из двух вариантов последовательности вычислений.

if (условие)
 оператор1
else
 оператор2

Если условие истинно, выполняется оператор1, если ложно, то выполняется оператор2.

if (x > y)
 a = x;
else
 a = y;

В данном примере переменной a присваивается значение максимума из двух величин x и y.

Конструкция else необязательна. Можно записать:

if (x < 0)
 x = -x;
abs = x;

В данном примере оператор x = -x; выполняется только в том случае, если значение переменной x было отрицательным. Присваивание переменной abs выполняется в любом случае. Таким образом, приведенный фрагмент программы изменит значение переменной x на его абсолютное значение и присвоит переменной abs новое значение x.

Если в случае истинности условия необходимо выполнить несколько операторов, их можно заключить в фигурные скобки:

if (x < 0) {
 x = -x;
 cout << "Изменить значение x на 
 противоположное по знаку";
}
abs = x;

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

Условный оператор можно расширить для проверки нескольких условий:

if (x < 0)
 cout << "Отрицательная величина";
else if (x > 0)
 cout << "Положительная величина";
else
 cout << "Ноль";

Конструкций else if может быть несколько.

Хотя любые комбинации условий можно выразить с помощью оператора if, довольно часто запись становится неудобной и запутанной. Оператор выбора switch используется, когда для каждого из нескольких возможных значений выражения нужно выполнить определенные действия. Например, предположим, что в переменной code хранится целое число от 0 до 2, и нам нужно выполнить различные действия в зависимости от ее значения:

switch (code) {
case 0:
 cout << "код ноль";
 x = x + 1;
 break;
case 1 :
 cout << "код один";
 y = y + 1;
 break;
case 2:
 cout << "код два";
 z = z + 1;
 break;
default:
 cout << "Необрабатываемое значение";
}

В зависимости от значения code управление передается на одну из меток case. Выполнение оператора заканчивается по достижении либо оператора break, либо конца оператора switch. Таким образом, если code равно 1, выводится " код один ", а затем переменная y увеличивается на единицу. Если бы после этого не стоял оператор break, то управление "провалилось" бы дальше, была бы выведена фраза " код два ", и переменная z тоже увеличилась бы на единицу.

Если значение переключателя не совпадает ни с одним из значений меток case, то выполняются операторы, записанные после метки default. Метка default может быть опущена, что эквивалентно записи:

default:
 ; // пустой оператор, не выполняющий 
 // никаких действий

Очевидно, что приведенный пример можно переписать с помощью оператора if:

if (code == 0) {
 cout << "код ноль";
 x = x + 1;
} else if (code == 1) {
 cout << "код один";
 y = y + 1;
} else if (code == 2) {
 cout << "код два";
 z = z + 1;
} else {
 cout << "Необрабатываемое значение";
}

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

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

Предположим, нам нужно вычислить сумму всех целых чисел от 0 до 100. Для этого воспользуемся оператором цикла for:

int sum = 0;
int i;
for (i = 1; i <= 100; i = i + 1) 
 // заголовок цикла
 sum = sum + i; // тело цикла

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

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

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

int sum = 0;
int i = 1;
for (; i <= 100; ) {
 sum = sum + i;
 i = i + 1;
}

Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. Другой вариант:

int sum = 0;
int i = 1;
for (; ;) {
 if (i > 100)
 break;
 sum = sum + i;
 i = i + 1;
}

В последнем примере мы опять встречаем оператор breakОператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continueОператор continue заставляет пропустить остаток тела цикла и перейти к следующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100, которые не делятся на 7, можно записать это так:

int sum = 0;
for (int i = 1; i <= 100; i = i+1) {
 if ( i % 7 == 0)
 continue;
 sum = sum + i;
}

Еще одно полезное свойство цикла for: в первом выражении заголовка цикла можно объявить переменную. Эта переменная будет действительна только в пределах цикла.

Другой формой оператора цикла является оператор while. Его форма следующая:

while (условие)
 оператор

Условие – как и в условном операторе if – это выражение, которое принимает логическое значение "истина" или "ложь". Выполнение оператора повторяется до тех пор, пока значением условия является true (истина). Условие вычисляется заново перед каждой итерацией. Подсчитать, сколько десятичных цифр нужно для записи целого положительного числа N, можно с помощью следующего фрагмента:

int digits =0;
while (N >= 1) {
 digits = digits + 1;
 N = N / 10;
}

Третьей формой оператора цикла является цикл do while. Он имеет форму:

do { операторы } while ( условие);

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

char ch;
do {
 ch = getch(); // функция getch возвращает
 // символ, введёный с 
 // клавиатуры
} while (ch != '*');

В операторах while и do также можно использовать операторы break и continue.

Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for:

for ( ; условие ; )
 оператор

Пример чтения символов с терминала можно переписать в виде:

char ch;
ch = getch(); 
while (ch != '*') {
 ch = getch();
}

Разные формы нужны для удобства и наглядности записи.

Оператор возврата

Оператор return завершает выполнение функции и возвращает управление в ту точку, откуда она была вызвана. Его форма:

return выражение;

Где выражение – это результат функции. Если функция не возвращает никакого значения, то оператор возврата имеет форму

return;
Оператор перехода

Последовательность выполнения операторов в программе можно изменить с помощью оператора перехода goto. Он имеет вид:

goto метка;

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

if ( x >= 0)
 goto positiv;
x = -x; // переменить знак x
positiv: // объявление метки
abs = x; // присвоить переменной abs
 // положительное значение

При выполнении goto вместо следующего оператора выполняется оператор, стоящий после метки positiv. Если значение x положительное, оператор x = - x выполняться не будет.

В настоящее время считается, что оператор goto очень легко запутывает программу. Без него, вообще говоря, можно обойтись, поэтому лучше его не использовать, ну разве что лишь в самом крайнем случае.

Пример:

int fact(int n)
{
 int k;
 if (n == 1) {
 k = 1;
 } else {
 k = n * fact(n – 1);
 }
 return k;
}

Это функция вычисления факториала. Первый оператор в ней – это объявление переменной k, в которой будет храниться результат вычисления. Затем выполняется условный оператор if. Если n равно единице, то вычисления факториала закончены, и выполняется оператор-выражение, который присваивает переменной значение 1. В противном случае выполняется другой оператор-выражение.

Последний оператор – это оператор возврата из функции.

Категория: C/C++/C# | Добавил: artkil (23.09.2012)
Просмотров: 9202 | Теги: операторы, c++ | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: