Инструкции в C++

Выполнение программы состоит из последовательности инструкций. Инструкции выполняются одна за другой.

Порядок вычислений внутри инструкций не определён.
/* 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. Рассмотрим его действие на следующем примере.
int a = 323;
int b = 2;
while ( b <= a ) { 
    if ( a % b == 0 )
        break; // выйти из цикла
    b = b + 1;
}
После выполнения этого цикла мы найдём минимальное целочисленное b > 1 такое, что а делится на b, т.е. найдём наименьший простой делитель числа a. В данном случае b будет равен 17, т.к. 323 = 17 × 19.


Оператор 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;
}

Комментариев нет:

Отправить комментарий