- •Лабораторная работа №6 управление условиями
- •If — маленькое слово с большими возможностями
- •Условия
- •Составные инструкции
- •Конструкция if...Else
- •Дополненный Опросник
- •Логическиеоператоры
- •Вложенные инструкции if
- •Конструкция switch/case/default
- •Проверка чисел с плавающей точкой и строк
- •Проектирование программы
- •Проверка правильности ввода
Лабораторная работа №6 управление условиями
If — маленькое слово с большими возможностями
Это короткое слово имеетбольшой вес. Инструкция if используется в тех случаях, когда необходимо решить, должна ли быть выполнена конкретная инструкция программы (if по-английски значит «если»). Структура if выглядит следующим образом:
if (condition)
instruction;
Этой записью мы говорим: «Если некоторое условие выполняется (является истинным), инструкция должна быть выполнена» (рис.1). То есть, компьютер, встретив ключевое слово if, выполняет инструкцию, следующую за ним, если условие в скобках является истинным.
Рис.1. Структура инструкции if
Если условие не выполняется, компьютер пропускает инструкцию, записанную после if, и переходит к следующим строкам программы. Использование if не будет вызывать у вас затруднений, как только вы запомните основные моменты:
условие заключается в круглые скобки;
точку с запятой ставят не после условия, а только в конце инструкции;
Си относится к языкам свободного формата, поэтому условие и инструкцию можно помещать в одной строке. Разделяя их, мы просто делаем программу более удобной для чтения.
Условия
Условием в инструкции if является сравнение значений: значение переменной или константы сравнивается с литералом, или со значением другой переменной или константы. Сравнение выполняется с помощью одного из следующих операторов отношения:
Оператор |
Значение |
Пример |
== |
равно |
if (tax == 0.06) |
> |
больше |
if (hours > 40) |
< |
меньше |
if (hours< 40) |
>= |
больше или равно |
if (salary>= 10000) |
<= |
меньше или равно |
if (cost<= limit) |
!= |
не равно |
if (count != 1) |
Обратите внимание: когда вы хотите узнать, равны ли два значения друг другу, то должны использовать оператор отношения, состоящий из двух знаков равенства (==) подряд. Если поставить только один знак равенства, компилятор сгенерирует предупреждение, или, реже, ошибку. Единичный знак равенства (=) используется для обозначения присваивания значения переменной.
Простейшая инструкция с использованием if выглядит примерно так:
if (time> 11)
puts("Уже поздно, ступайте домой.");
Здесь говорится: «Если значение переменной time больше 11, тогда следующее сообщение должно быть выведено на дисплей». Если значение переменной time окажется меньше 11, сообщение не появится.
С помощью условия if можно проверять значения числовых или символьных переменных, но не строк. Например, при компиляции следующего фрагмента программы компилятор не сообщит об ошибке, но и нужный результат тоже не будет получен:
gets(name);
if (name == "Адам")
puts("Позвоните домой");
Строковые переменные подробно обсуждаются в работе 8.
В программе, приведенной в Листинге 1, используется инструкция if. Эта программа является вариантом программы, которую мы уже видели в предыдущей главе. В ней рассчитывалась общая стоимость наименования товара с учетом налога на продажи. Здесь добавлен расчет специального налога на предметы роскоши для товаров, цена которых превышает 40000 долларов. Расчет этого налога выполняется в инструкции:
if (cost> 40000.00)
luxury = cost * 0.005;
Листинг 1. Программа расчета стоимости товаров с учетом налога на предметы роскоши.
/*luxury1.c*/
main()
{
float cost, tax, luxury, total;
luxury = 0.0;
printf("Введите цену товара: ");
scanf("%f", &cost);
tax = cost * 0.06;
if (cost > 40000.00)
luxury = cost * 0.005;
total = cost + tax + luxury;
printf("Стоимость единицы товара с учетом налогов составляет %.2f", total);
}
В этих инструкциях говорится: «Если значение переменной cost больше 40000, то переменной luxury присваивается значение, равное значению cost, умноженному на 0.5 процента». Последние две строки инструкций в программе выполняются в любом случае, независимо от того, присутствует налог на предметы роскоши или нет, так как эти строки расположены после точки с запятой, завершающей инструкцию if.
Заметьте, что в начале программы переменной luxury присваивается начальное значение, равное 0, в отличие, например, от переменной tax. Причина в том, что переменной tax в любом случае будет присвоено значение, полученное в результате выполнения математических операций tax = cost * 0.06, а расчет и присваивание значения переменной luxury осуществляется только в том случае, если стоимость превышает 40тысяч долларов. Если условие не соблюдается, расчет не производится. В этом случае, если бы переменная luxury не была инициализирована, в выражение расчета общей стоимости было бы подставлено случайное значение, хранящееся в памяти. Поэтому представляется в высшей степени разумным, если вы всегда будете присваивать начальное значение переменным, которые используются в инструкции if, так же, как это делается при использовании счетчика и аккумулятора.
Используя операторы отношения больше и меньше, удостоверьтесь, что с их помощью вы составили именно те условия, которые необходимы. В приведенном примере налог на предметы роскоши добавляется только в том случае, если цена товара хотя бы на один цент превышает 40 тысяч долларов, то есть если вещь стоит 40 тысяч долларов 1 цент и больше. Если стоимость товара составляет ровно 40 тысяч долларов, налог на предметы роскоши не добавляется. Если бы налогом облагались товары, стоимостью 40 тысяч долларов и выше, следовало бы указать условие:
if (cost>= 40000.00)
Разница между операторами больше и больше или равно либо меньше и меньше или равно с виду кажется незначительной, но она может весьма существенно сказаться на результатах, получаемых от программы.