Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
konspekt_1_semestr.doc
Скачиваний:
12
Добавлен:
02.08.2019
Размер:
654.34 Кб
Скачать

Внимание!

Распространенная ошибка при записи условных операторовиспользование в выражениях вместо проверки на равенство (==) простого присваивания (=), например,

if(a=-l)b=0;

Синтаксической ошибки нет, так как операция присваивания формирует результат, который и оценивается на равенство/неравенство нулю. В данном примере присваивание переменной b будет выполнено независимо от значения переменной а.

Вторая ошибка — неверная запись проверки на принадлежность диапазону. Например, чтобы проверить условие 0<х<1. нельзя записать его в условном операторе непосредственно, так как будет выполнено сначала сравнение 0<х, а его результат (true или false, преобразованное в int) будет сравниваться с 1. Правильный способ записи: if(0<x && х<1)„

Вложенные if. Под вложенным if подразумевается оператор if, имеющий еще один if или else., проблематичность вложенности операторов if заключается в трудностях идентификации: какое else соответствует какому if. Например:

if (x)

if (y) printf(“1”);

else printf(“2”);

Какому if соответствует какое else?

Для разрешения такого рода проблем существует правило: В С else соответствует ближайшему предшествующему if (на том же уровне видимости), еще не имеющему оператора else. В данном случае else связан с оператором if(y). Для того, чтобы связать else с оператором if(x), следует использовать фигурные скобки, как показано ниже:

if (x) {

if (y) printf(“1”);

}

else printf(“2”);

Лесенка if-else-if. Типичной программистской конструкцией является лесенка if-else-if. Она выглядит следующим образом:

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

оператор;

else if(выражение)

оператор;

else if(выражение)

оператор;

.

.

.

[else

оператор;]

Условия вычисляются сверху вниз. Когда обнаруживается истинное условие, то выполняется оператор, связанный с этим условием, а остальная часть конструкции игнорируется. Если не найдено ни одного истинного условия, выполняется оператор, соответствующий последнему else. Последний оператор else часто играет роль оператора, выполняемого по умолчанию, то есть, если все условия ложны, то выполняется оператор, соответствующий последнему else. Если последний оператор else отсутствует, то не выполняется никаких действий в случае ложности всех условий.

#include <stdio.h>

/* программа «угадай число 4» */

int main(void)

{

int magic = 123; /* искомое число */

int guess;

printf(“Введите ваше число: “);

scanf(“%d”, &guess);

if(guess == magic) {

printf(“Правильно”);

printf(“%d есть угаданное число”,magic);

}

else if(guess > magic) {

printf(“Неправильно. Больше”);

else printf(“Неправильно. Меньше”);

return 0;

}

Оператор ?. Оператор ? может использоваться для замены стандартной конструкции if/else:

Ограничением в данном случае является использование единственного выражения как после if, так и после else.

Оператор ? называется триадным (тернарным) оператором, поскольку ему требуется три операнда и имеет следующий вид:

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

где выражение_1, выражение_2 и выражение_3 – это выражения.

Оператор ? работает следующим образом. Вычисляется выражение_1. Если оно истинно, вычисляется выражение_2 и вся конструкция получает вычисленное выражение. Если выражение_1 ложно, вычисляется выражение_3 и вся конструкция получает вычисленное выражение. Например:

x = 10;

y = x>9 ? 100 : 200;

В данном примере у получает значение 100. Если бы х было меньше 9, то у получило бы значение 200. Ниже приведен фрагмент программы, выполняющий такие же действия, но с использованием операторов if/else:

x = 10;

if(x>9) y = 100;

else y = 200;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]