Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рацеев С.М. Программирование на языке Си.pdf
Скачиваний:
366
Добавлен:
23.03.2016
Размер:
1.65 Mб
Скачать

3. ЦИКЛЫ И ОПЕРАТОРЫ СРАВНЕНИЯ

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

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Структура условного оператора имеет следующий вид:

if (выражение) инструкция_1;

else

инструкция_2;

причем else-часть может отсутствовать. Если выражение в скобках принимает истинное значение (отличное от нуля), то выполняется инструкция_1, а если ложное (равное нулю) и присутствует else-часть – инструкция_2. Вместо одной можно использовать набор инструкций, для этого их необходимо заключить в фигурные скобки.

Поскольку оператор if проверяет числовое значение выражения в скобках, то в некоторых случаях, когда в выражении прои с- ходит проверка на равенство или неравенство нулю, условие можно записывать в сокращенном виде. В этом случае запись вида

if (выражение != 0)

можно переписать следующим образом: if (выражение)

Согласно принятому в Си соглашению слово else всегда относится к ближайшему условию if. Чтобы компилятор правильно интерпретировал вложенные if-else конструкции, необходимо должным образом расставить фигурные скобки. Например, в приведенных ниже двух случаях слово else относится к разным условиям if: в первом случае else относится ко второму условию, а во втором – к первому.

32

If (a > 10)

if (a > 10)

if (b < 10)

{

a = 0;

if (b < 10)

else

a = 0;

b = 0;

}

 

else

 

b = 0;

В языке Си имеется операция, которая сразу работает с тремя операндами. Это тернарная условная операция " ? : ". Синтаксис использования данной тернарной операции следующий:

выражение_1 ? выражение_2 : выражение_3

Данная строка читается следующим образом: если выражение_1 истинно, тогда выполняется выражение_2 и значение выражения_2 становится значением всего условного выражения. В противном случае выполняется выражение_3, и его значение становится значением всего условного выражения. Например, чтобы записать в переменную max максимальное значение из двух чисел a и b, можно записать так:

max = (a > b) ? a : b; /* max = max{a, b} */

С помощью данной операции также легко вычислять значение модуля числа x:

y = (x < 0) ? –x : x;

3.2. Оператор выбора switch

Оператор switch позволяет выбрать одну из нескольких альтернатив. Данный оператор имеет следующий общий вид:

switch (выражение)

{

case константа-выражение_1: инструкции_1; break;

case константа-выражение_n: инструкции_n; break; default: инструкции_(n+1);

}

33

Сначала вычисляется значение целого выражения в скобках, а затем оно сравнивается со всеми константами-выражениями. Все значения констант-выражений должны быть различными. При совпадении значения выражения в скобках со значением одной из констант-выражений выполняются соответствующие инструкции. Если ни одна из констант не подходит, тогда выполняются инструкции с ключевым словом default. Если default отсутствует и ни одна константа не подошла, то ничего не происходит.

Например, в следующей программе происходит проверка, четная или нечетная цифра была введена:

#include <stdio.h> int main( )

{

int a; printf(“a = “);

scanf(“%d”, &a); switch (a)

{

case 1: case 3: case 5: case 7: case 9: printf("введена нечетная цифра"); break;

case 0: case 2: case 4: case 6: case 8: printf("введена четная цифра "); break;

default:

printf("введена не цифра");

}

return 0;

}

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

Конструкции языка Си позволяют рассматривать три опера-

тора цикла: for, while и do-while.

Оператор for формально можно записать следующим образом: for(выражение_1; выражение_2; выражение_3) тело цикла

34

Тело цикла составляет либо одна инструкция, либо набор инструкций, заключенных в фигурные скобки. Выражение_1 обычно используется для инициализации начальных значений переменных, которые управляют циклом (управляющие переменные). Выражение_2 определяет условия, при которых тело цикла будет выполняться. Выражение_3 определяет изменение значений управляющих переменных. Цикл for выполняется по следующей схеме:

1.Вычисляется выражение_1.

2.Вычисляется выражение_2.

3.Если значение выражения_2 является истинным (ненулевым), тогда выполняется тело цикла, а затем вычисляется выражение_3 и осуществляется переход к выражению_2. Если же значение выражения_2 является ложным (нулевым), тогда выполнение оператора for завершается. При

отсутствии выражения_2 оно подразумевается всегда истинным.

Например, после выполнения цикла for (i = 1; i <= 10; i++)

printf(“%d\n”, i);

на экран будут выведены целые числа 1, 2, …, 10, а после выполнения цикла

for (i = 10; i >= 1; i--) printf(“%d\n”, i);

на экране появятся числа 10, 9, …, 1.

Приведем также пример цикла for с двумя управляющими переменными:

for (i = 1, j = 10; i < j; i++, j--) printf(“%d %d\n”, i, j);

Управляющая переменная может быть символьной. Например, ниже приводится вывод на экран всех строчных латинских символов:

char c;

for(c = 'a'; c <= 'z'; c++) printf("%c ", c);

35

Любое из трех выражений в цикле может отсутствовать. Например, цикл

for (; ;) { тело цикла }

является бесконечным.

Следует отметить, что тело цикла может быть пустым. Например, сумму целых чисел от 1 до 100 можно вычислить следующим образом:

int i, sum;

for(i = sum = 0; i <= 100; sum += i, i++)

;

Оператор while формально записывается в виде while (выражение) тело цикла

Выражение в скобках может принимать либо нулевое (ложное), либо ненулевое (истинное) значение. Тело цикла будет выполняться, только если выражение истинно. Если же выражение ложно, то цикл завершается. Например, вывод на экран чисел 1, 2, …, 10 можно осуществить следующим образом:

i = 1;

while (i <= 10)

{

printf(“%d\n”, i); i++;

}

Оператор цикла for вида

for(выражение_1; выражение_2; выражение_3) тело цикла

можно заменить оператором цикла while следующим образом: выражение_1;

while (выражение_2)

{

тело цикла выражение_3;

}

36