logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

168 Глава 2

2.26. (Проблема обособленного else) Определите напечатанный выходной результат для каждого из нижеприведенных фрагментов кода при x = 9 и у = 11, и x = 11 и у = 9. Отметим, что компилятор С++ игнорирует отступы в программе. Отметим также, что компилятор С++ всегда ассоциирует else с предшествующим if, пока ему не скажут об ином скобками { }. Поскольку на первый взгляд про­ граммист может быть не уверен, какие if соответствуют каким else, это известно как проблема «обособленного else*. Мы выбросили от­ ступы из нижеследующих кодов, чтобы показать проблему более наглядно. (Совет: примените соглашение об отступах, которое вы изучили.)

a) if (x < 10) if (у > 10)

cout « "*****" « endl;

else

cout « "#####" « endl;

cout « "$$$$$" « endl;

b) if (x < 10) { if (у > 10)

cout « "*****" « endl;

}

else {

cout « "#t###" « endl;

cout « "$$$$$" « endl;

2.27. Щругая проблема обособленного else) Модифицируйте следующие фрагменты кода, чтобы получить указанный вывод на экран. Ис­ пользуйте соответствующую технику отступов. Вы можете не де­ лать каких-либо других изменений, кроме вставки фигурных ско­ бок. Компилятор С++ игнорирует отступы в программе. Мы выбросили отступы из нижеследующих кодов, чтобы показать проблему более наглядно. Примечание: возможно, что модифика­ ция не требуется.

if (у == 8)

if (x == 5)

cout « "@@@Э@" « endl;

else

cout « "#####" « endl;

cout « "$$$$$" « endl;

cout « "&&&&&" « endl;

a) При x = 5 и у = 8 получите следующий результат

@@@@

$$$$$

&&&&&

b) При x = 5 и у = 8 получите следующий результат

ее@е

c) При x = 5 и у = 8 получите следующий результат

е@@@ &&&&&

Управляющие структуры 169

d) При x = 5 и у = 7 получите следующий результат. Подсказка: три последние оператора вывода после else являются частью состав­ного оператора.

##### $$$$$ ss&s&

2.28. Напишите программу, которая читает размер стороны квадрата и затем печатает звездочками и пробелами пустой квадрат заданного размера. Ваша программа должна работать для любых размеров, заданных в интервале 1—20. Например, если программа прочла раз­мер 5, она должна напечатать:

*****

  1. Палиндром — число или текст, который одинаково читается слева направо и справа налево. Например, каждое из следующих пяти­ значных целых чисел является палиндромом: 12321, 55555, 45554 и 11611. Напишите программу, которая читает пятизначные целые и определяет, являются ли они палиндромами. (Подсказка: исполь­ зуйте операции деление и вычисления остатка, чтобы выделить из числа отдельные разряды.)

  2. Введите целые данные, содержащие только нули и единицы (т.е. «двоичные» целые), и напечатайте их десятичный эквивалент. (Под­ сказка. Используйте операции деление и вычисления остатка, чтобы «отрывать» разряды «двоичного» числа по одному справа налево. В десятичной системе самая правая цифра имеет позиционное зна­ чение 1, следующая цифра слева имеет позиционное значение 10, затем 100, затем 1000 и т.д.; в двоичной системе чисел самая правая цифра имеет позиционное значение 1, следующая цифра слева имеет позиционное значение 2, затем 4, затем 8 и т.д. Таким образом, десятичное число 234 может быть представлено как 4*1 + 3*10 + 2*100. Десятичным эквивалентом двоичного 1101 является 1*1 + 0*2 + 1*4 + 1*8 или 1 + 0 + 4 + 8 или 13.)

  3. Напишите программу, которая выводит на экран следующий шаблон шахматной доски:

* * * * * * * *

* * * * * * * *

* * * * * * * *

* * * * * * * *

* * * * * * * *

* * * * * * * *

* * * * * * * *

* * * * * * * *

Ваша программа может использовать только три оператора вывода: один вида

cout « "* ";