ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
Как осуществить выбор из двух возможностей выполнить оператор или пропустить его: с помощью оператора if.
Как осуществить выбор одного из двух вариантов: с помощью оператора if-else.
Как осуществить выбор одного из нескольких вариантов: с помощью операторов else-if, switch
Операции отношения: > >= = = <= < !=
Логические операции: && || !
1. Определите, какие выражения истинны, а какие ложны.
а. 100 > 3
б. 'а' > 'с'
в. 100 > 3 && 'а' > 'с'
г. 100 > 3 || 'a' > 'с'
д. !(100 > 3)
2. Запишите выражения, соответствующие следующим условиям
а. Значение numberравно или больше 1, но меньше 9
б. Значение chне равно qили k
в. Значение numberлежит между 1 и 9, но не равно 5
г. Значение numberне лежит между 1 и 9
3. В программе, приведенной ниже, наряду с неоправданно сложными условными выражениями имеются и прямые ошибки. Уточните эту программу и исправьте в ней ошибки.
main( ) /* 1 */
{ /* 2 */
int weight, height; /* вес в фунтах, рост в дюймах */
/* 4 */
scanf('' %d, weight, height); /* 5 */
if(weight < 100) /* 6 */
if (height >= 72) /* 7 */
printf(" Для такого веса у вас слишком большой рост \n");
else if (height < 72 && > 64) /* 9 */
printf(" У вас большой рост для вашего веса. \n" );
else if (weight > 300 && !(weight < = 300)) /* 11*/
if( !(height >= 48) /* 12 */
printf(" Для такого веса у вас слишком маленький рост.\n" );
else /* 14 */
printf(" У вас идеальный вес. \n"); /* 15*/
/* 16 */
}
1. Выражения истинны в вопросах а и г
2. a. number > = 1&& number < 9
б. ch != 'q'&& ch != k
Замечание : выражение ch != q || ch!= kвсегда будет иметь значение "истина", потому что если переменная сhравна q, то она не может равняться k, и второе условие оказывается выполненным врезультате все выражения "ИЛИ" будет истинным.
в. number > 1&& number < 9&& number != 5
г. !(number > 1 && number < 9)или number < = 1 || number > = 9
Замечание : сказать, что число НЕлежит между 1 и 9 это то же самое, что сказать: число равно или меньше 1 ИЛИравно или больше 9. Вторая форма несколько неуклюже звучит на словах, но проще записывается в виде выражения.
3. Строка 5: должна выглядеть так scanf(" %d %d", &weight, &height). He забывайте указывать символы в качестве префиксов имен переменных в функции scanf( ). Кроме того, данной строке должна предшествовать строка, предлагающая ввести данные.
Строка 9: подразумеваемое выражение должно выглядеть так: (height < 72 && height > 64). Однако первая часть этого выражения необязательна, поскольку величина height, если поток управления достигнет записи else-if, будет обязательно меньше 72. Поэтому более простое условие ( height> 64) в данном случае служит той же цели.
Строка 11: избыточное условие; второе подвыражение (отрицание условия "величина weightменьше или равна 300") означает то же, что и первое. В действительности данное условие записывается так: ( weight> 300). Но неприятности на этом не кончаются. Строка 11 относится к ошибочному оператору if. Очевидно, что эта часть elseассоциируется с оператором if, расположенным в строке 6, но, согласно правилу, связывающему ее с ближайшим отрицанием условия, содержащегося в if, она будет ассоциироваться с оператором ifна строке 9. Поэтому условие, помещенное на строке 11, будет проверяться в том случае, когда величина weightменьше 100, а величина heightменьше или равна 64. Это делает невозможным превышение переменной weightзначения 300 при выполнении данного оператора.
Строки 7-9 должны быть заключены в фигурные скобки. Тогда строка 11 станет альтернативой оператору, расположенному на строке 6, а не на строке 9.
Строка 12: данное выражение необходимо упростить так: ( height< 48)
Строка 14: это ключевое слово elseотносится к последнему оператору if, раcположенному на строке 12. Операторы, помещенные на строках 12 и 13, необходимо заключить в фигурные скобки, тогда elseбудет относиться к оператору ifна строке 11. Обратите внимание, что последнее сообщение будет напечатано для тех, чей вес заключен между 100 и 300 фунтами.
8. Циклы и другие управляющие средства
Читать дальше