|
Программирование >> Дополнительные возможности наследования
lj.;. Second: 2 ...jt- t..s iji are evenly divisible! ., , g5j Сначала пользователю предлагается ввести два числа (по очереди), затем эти числа сравниваются. С помощью первого оператора if (в строке 19) мы хотим убедиться в том, что первое число больще или равно второму. Если мы убеждаемся в обратном, то вьшолняется выражение после оператора else, представленного в строке 31. Если первое сравнение возвращает true, то выполняется блок инструкций, начинающийся в строке 20, где с помощью второго оператора if в строке 21 проверяется предположение, что первое число делится на второе без остатка (т.е. с остатком, равным нулю). Если это предположение подтверждается, то первое число либо кратно второму, либо они вообще равны друг другу. Оператор if в строке 23 проверяет версию о равенстве чисел, а затем на экран выводится сообщение, уведомляющее о выявленном соотношении. Если оператор if в строке 21 возвращает значение false, то выполняется оператор else в строке 28. Использование фигурных скпОпк уля влпженных пперапмрпв if Фигурные скобки можно не использовать в конструкциях с оператором if, если эта конструкция состоит только из одного выполняемого выражения. Это справедливо и в случае вложения нескольких операторов if, как показано ниже: if (х > у) если X больше у if (х < Z) и если X меньше z, X = у; тогда присваиваем х значение у Однако при создании сложных вложенных конструкций без использования фигур-нь1х скобок бывает трудно разобраться, какое выражение какому оператору if принадлежит. Не забывайте, что пробелы и отступы делают профамму понятнее для профаммиста, но никак не влияют на работу компилятора. Даже если вы покажете с помощью отступа, что данный оператор else относится к конструкции этого оператора if, компилятор может с вами не согласиться. Данная проблема иллюсфируется в листинге 4.8. Аисшинг 4.6. Првмвр нсноАьзовання фнгурных скоОок удя нравндьного соносшавдвння DDCpafflopoB else D if Листинг 4.8. Пример использования фигурных скобок в конструкциях с вложенными операторами if #include <iostream.h> int main() { int x; cout Enter a number less than 10 or greater than 100: cin >> x; cout \ n ; 12 13 14 15 16 17 18 if (x >= 10) if (x > 100) cout More than 100, Thanks!\ n ; else к какому оператору if относится этот оператор cout Less than 10, Thanks!\ n ; return 0; Enter a number less than 10 or greater than 100: 20 Less than 10, Thanks! Профамма запрашивает ввод числа меньше 10 или больше 100 и должна проверить введенное значение на соответствие вьщвинутому фебованию, а затем вывести сообшение. Если оператор if, расположенный в сфоке 11, возвращает true, то выполняется спедующее выражение (сфока 12). В нашем примере строка 12 выполняется в случае, если введенное число больше 10. Однако в сфоке 12 также содержится оператор if, который возвращает true, если введенное число не больше 100. Если же это число больше 100, выполняется сфока 13. Если введенное число меньше 10, оператор if в сфоке 11 возвратит false. В этом случае должно выполниться выражение за оператором else (сфока 15), которое выводит на экран соответствующее сообщение. Но оказывается, что если ввести число меньше 10, то профамма просто завершит свою работу. Судя по отступу, оператор else в Сфоке 14 образует единую консфукцию с оператором if в сфоке 11. Но в действительности оператор else связан с оператором if в сфоке 12, поэтому профамма будет работать не так, как планировал профаммист. С точки зрения компилятора в этой профамме на языке С++ нет никаких ошибок. Профамма не работает как хотелось из-за логаческой ошибки. Более того, даже при тестировании этой профаммы может создаться впечатление, что она работает правильно. Ведь при вводе числа больше 100 профамма работает нормально и дефект не проявляется. В листинге 4.9 показано, как можно исправить эту ошибку с помощью фигурных скобок. йлсшвнг 4.9. Брлмвр науАВжащвго асподьзовання фвадрных скоОок в квиструвцви с внврашврвм if Листинг 4.9. Пример надлежащего использования фигурных скобок для вложенных операторов if #include <iostream.h> int main() { int x; cout Enter a number less than 10 or greater than 100: cin >> x; cout \ n ; 12 13 14 15 16 17 18 19 if (X >= 10) { if (x > 100) cout More than 100, Thanks!\ n else теперь все ясно! cout Less than 10, Thanks!\ n return 0; Enter a number less than 10 or greater than 100: 20 Фигурные скобки, поставленные в строках 12 и 15, превращают все, что стоит между ними, в одно выражение, и теперь оператор else в строке 16 явно связан с оператором if, стоящим в строке 11, как и было задумано. Пользователь ввел число 20, поэтому оператор if в строке 11 возвратил значение true; однако оператор if в строке 13 возвратил false, поэтому сообщение не было выведено на экран. Было бы лучше, если бы профаммист использовал еще один оператор else после сфоки 14, который выводил бы сообщение о том, что введенное число не отвечает требованиям. примечание Программы, приведенные в этой книге, написаны для демонстрации частных вопросов, рассматриваемых в данном разделе. Они намеренно написаны как можно проще; при этом не ставилась цель предусмотреть все возможные ошибки, как это делается в профессиональных программах. Логинеские операторы Довольно часто у нас возникает необходимость проверять не одно условное выражение, а сразу несколько. Например, правда ли, что х больше у, а также что у больше Z? Наша профамма, прежде чем выполнить соответствующее действие, должна установить, что оба эти условия истинны либо одно из них ложно. Представьте себе высокоорганизованную сигнальную систему, обладающую следующей логикой. Если сработала установленная на двери сигнализация И время суток после шести вечера, И сегодня НЕТ праздника ИЛИ сегодня выходной, нужно вызывать полицию. Для проверки всех условий нужно использовать три логических оператора С++. Они перечислены в табл. 4.2. TaOAUiia 4.Z. Авгкчвскнв впврашвры
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |