Выполнение программы состоит из последовательности инструкций. Инструкции выполняются одна за другой.
Порядок вычислений внутри инструкций не определён.
/* unspecified behavior */ int i = 10; i = ( i += 5) + ( i * 4);
Блоки имеют вложенную область видимости:
int k = 10; { int k = 5 * i; // не видна за пределами блока i = ( k += 5) + 5; } k = k + 1;
Условные операторы
Оператор if:int d = b * b - 4 * a * c; if (d > 0) { roots = 2; } else if (d == 0) { roots = 1; } else { roots = 0; }
Тернарный условный оператор:
int roots = 0; if (d >= 0) roots = (d > 0) ? 2 : 1;
Циклы
Цикл while:int squares = 0; int k = 0; while (k < 10) { squares += k * k; k = k + 1; }
Цикл for:
for (int k = 0; k < 10; k = k + 1) { squares += k * k; }
В С++ существует вариация цикла while, которая называется do-while. В отличие от обычного while в do-while условие проверяется не до, а после итерации. Т.е. такой цикл всегда имеет хотя бы одну итерацию. Давайте сравним обычный while:
int i = 10; int sum = 0; while (i < 10) { sum += i; } // sum = 0
И do-while:
int i = 10; int sum = 0; do { sum += i; } while(i < 10); // sum = 10
Как видите, в случае с do-while мы добавили 10 к переменной sum, а в обычном while — нет.
Иногда цикл do-while используется в макросах для того, чтобы объединить несколько инструкций в одну. Действительно, если мы обернём инструкции в do-while c ложным условием, то это будет удобной синтаксической конструкцией, все инструкции которой выполнятся ровно один раз.
do { /* code */ } while(false); // тело цикла выполнится ровно один раз
Для выхода из цикла используется оператор break. Рассмотрим его действие на следующем примере.
После выполнения этого цикла мы найдём минимальное целочисленное b > 1 такое, что а делится на b, т.е. найдём наименьший простой делитель числа a. В данном случае b будет равен 17, т.к. 323 = 17 × 19.int a = 323; int b = 2; while ( b <= a ) { if ( a % b == 0 ) break; // выйти из цикла b = b + 1; }
Оператор continue прерывает текущую итерацию цикла и переходит к следующей. Например, можно посчитать сумму всех чисел от 1 до 100, которые не делятся на 17 или 19, следующим образом.
int sum = 0; for ( int i = 1; i <= 100; ++i ) { if ( (i % 17 == 0) || (i % 19 == 0) ) continue; // перейти к следующей итерации sum += i; }
Комментариев нет:
Отправить комментарий