Какие из следующих операторов называются укороченными
int X, у, Z, result;
cout << Введите три целых числа: ; cin >> X у z; result = X * у * z;
cout << Произведение равно result \n; return 0;
1.8. a) Ошибка: точка с запятой после правой круглой скобки условия в операторе if. Исправление: удалите точку с запятой после правой круглой скобки. Замечание: в результате этой ошибки оператор вывода будет выполняться независимо от истинности условия в операторе if. Точка с запятой после правой круглой скобки считается пустым оператором — оператором, который ничего не делает. Мы узнаем больше о пустом операторе в следующей главе.
Ь) Ошибка: операпдя сравнения =>. Исправление: измените => на >=.
1.9. а) абстрагирование. Ь) атрибутом, с) поведения, d) множественным, е) сообщения, f) интерфейсы, g) скрытие информации, h) имена существительные, i) данными-элементами, функциями-элементами, j) объект.
1.10. Отнесите следующие элементы к категории аппаратных средств или программного обеспечения:
d) препроцессор С++
f) программа редактор
1.11. Почему вам хотелось бы писать программу на машинно-независимом языке вместо машинно-зависимого? Почему машинно-зависимый язык может оказаться предпочтительней для написания программ определенного типа?
1.12. Заполните пустые места в каждом из следующих предложений:
a) Какой логический блок компьютера принимает информацию извне для использования в компьютере?
b) Процесс составления инструкций компьютеру для решения специфических проблем называется .
c) Какой тип компьютерного языка использует англо-подобные аббревиатуры для команд на машинном языке? .
d) Какой логический блок компьютера посылает уже обработанную компьютером информацию различным устройствам для использования вне компьютера? .
f) Какой логический блок компьютера выполняет вычисления?
g) Какой логический блок компьютера принимает логические решения? .
h) Уровень компьютерного языка, удобный программисту для быстрого и легкого написания программ — .
i) Единственный язык, непосредственно понятный компьютеру, называется .
j) Какой логический блок компьютера координирует действия всех других логических блоков? .
1.13. Укажите смысл каждого из следующих объектов:
1.14. Почему так много внимания уделяется сегодня объектно-ориентированному программированию вообще и в С++ в частности?
1.15. Заполните пустые места в каждом из следующих предложений:
a) используются для документирования программы и
улучшения ее читаемости.
b) Объект, используемый для вывода информации на экран, называется
c) Оператор С++, принимающий решение, называется .
d) Вычисления обычно выполняются с помощью оператора
е) Объект вводит информацию с клавиатуры.
1.16. Напишите один или несколько операторов С++, выполняющих указанные ниже задания:
a) Напечатайте сообщение Введите два числа:
b) Присвойте произведение переменных а и Ъ переменной с.
c) Объявите, что программа выполняет расчеты платежных ведомостей (т.е. используйте текст помогающий документировать программу).
d) Введите три целых значения с клавиатуры и поместите эти значения в целые переменные а, Ъ и с.
1.17. Укажите, что из нижеследующего верно или неверно. Объясните ваши ответы.
a) Операции в С++ выполняются слева направо.
b) Все следующие далее имена переменных верны: under bar , m928134, t5, j7, her sales, his account njnfk, a, b, c, z, z2.
c) Оператор cout A = 5; ; — типичный пример оператора присваивания.
е) Какой логический блок компьютера хранит информацию?
d) Правильное арифметическое выражение на С++ без круглых скобок выполняется слева направо.
e) Все следующие имена переменных правильные: 3g, 87, 67h2, h22, 2h.
1.18. Заполните следующие пустые места:
a) Какие арифметические операции имеют такой же уровень приоритета как умножение?
b) Какие из вложенных круглых скобок выполняются в арифметическом выражении первыми?
c) Области в памяти компьютера , которые могут содержать разные значения в разное время в процессе выполнения программы, называются .
1.19. Что печатается, если это вообще возможно, при выполнении каждого из следующих операторов. Если ничего не печатается, то ответьте ничего . Предполагайте, что х = 2, у = 3.
e) cout << X + у = у + x; f) Z = X + у;
h) cout х + у = X + у;
1.20. Какие из следующих операторов С++ содержат переменные, значения которых уничтожаются?
а) cin b с d >> е f;
c) cout << переменные, значения которых уничтожаются
1.21. Какие из следующих операторов С++ верны для уравнения у = ах + 7:
а)у = а*х*х*х + 7; Ь)у=а*х*х* (х+7); с) у = (а * х) * X * (X + 7) ; d)y = (а*х) *х*х + 7 е)у = а* (х*х*х) + 7 f)y = a*x* (х*х + 7)
1.22. Укажите порядок выполнения действий в каждом из следующих операторов С++ и назовите значения х после их выполнения:
Укороченные логические операторы
В C# предусмотрены также специальные, укороченные, варианты логических операторов И и ИЛИ, предназначенные для получения более эффективного кода. Поясним это на следующих примерах логических операций.
Если первый операнд логической операции И имеет ложное значение ( false ), то ее результат будет иметь ложное значение независимо от значения второго операнда.
Если же первый операнд логической операции ИЛИ имеет истинное значение ( true ), то ее результат будет иметь истинное значение независимо от значения второго операнда.
Благодаря тому, что значение второго операнда в этих операциях вычислять не нужно, экономится время и повышается эффективность кода.
Укороченная логическая операция И выполняется с помощью оператора && , а укороченная логическая операция ИЛИ — с помощью оператора || . Этим укороченным логическим операторам соответствуют обычные логические операторы & и | . Единственное отличие укороченного логического оператора от обычного заключается в том, что второй его операнд вычисляется только по мере необходимости.
В приведенном ниже примере программы демонстрируется применение укороченного логического оператора И. В этой программе с помощью операции деления по модулю определяется следующее: делится ли значение переменной d на значение переменной n нацело. Если остаток от деления n/d равен нулю, то n делится на d нацело.
Но поскольку данная операция подразумевает деление, то для проверки условия деления на нуль служит укороченный логический оператор И.
Для исключения ошибки из-за деления на нуль в операторе if сначала проверяется условие: равно ли нулю значение переменной d . Если оно равно нулю, то на этом выполнение укороченного логического оператора И завершается, а последующая операция деления по модулю не выполняется. Так, при первой проверке значение переменной d оказывается равным 2, поэтому выполняется операция деления по модулю. А при второй проверке это значение оказывается равным нулю, следовательно, операция деления по модулю пропускается, чтобы исключить деление на нуль. И наконец, выполняется обычный логический оператор И, когда вычисляются оба операнда. Если при этом происходит деление на нуль, то возникает ошибка при выполнении.
Укороченные логические операторы иногда оказываются более эффективными, чем их обычные аналоги. Так зачем же нужны обычные логические операторы И и ИЛИ? Дело в том, что в некоторых случаях требуется вычислять оба операнда логической операции И либо ИЛИ из-за возникающих побочных эффектов. Рассмотрим следующий пример программы.
Прежде всего обратим внимание на то, что переменная someCondition типа bool инициализируется значением false . Далее проанализируем каждый оператор if . Как следует из комментариев к данной программе, в первом операторе if переменная i инкрементируется, несмотря на то, что значение переменной someCondition равно false . Когда применяется логический оператор & , как это имеет место в первом операторе if , выражение в правой части этого оператора вычисляется независимо от значения выражения в его левой части. А во втором операторе if применяется укороченный логический оператор. В этом случае значение переменной i не инкрементируется, поскольку левый операнд (переменная someCondition ) имеет значение false , следовательно, выражение в правой части данного оператора пропускается. Из этого следует вывод: если в коде предполагается вычисление правого операнда логической операции И либо ИЛИ, то необходимо пользоваться неукороченными формами логических операций, доступных в C#.
И последнее замечание: укороченный оператор И называется также условным логическим оператором И, а укороченный оператор ИЛИ — условным логическим оператором ИЛИ.
Какие из следующих операторов называются укороченными
© 2008 Наталия Македа
Все материалы блога защищены авторским правом. Любая перепечатка или использование материалов этого блога в коммерческих целях возможна лишь с письменного согласия автора. При некоммерческом использовании ссылка на блог обязательна.
среда, 20 августа 2008 г.
2.7 Укороченные (short-circuit) логические операторы (Выпуск 10)
Укороченные (short-circuit) логические операторы && и || предназначаются для логических AND (И) и OR (ИЛИ) операций над выражениями типа boolean . Заметьте, что для XOR (исключающее ИЛИ) операции не существует укороченного логического оператора.
Укороченные логические операторы похожи на операторы & и |, но в отличие от них применяются только к выражениям типа boolean и никогда не применяются к интегральным типам. Тем не менее, && и || обладают замечательным свойством: они укорачивают вычисление выражения, если результат может быть дедуцирован из части выражения (чуть позже я поясню это на примерах). Благодаря этому свойству, операторы && и || широко используются для обработки null-выражений. Они также помогают увеличить эффективность всей программы.
- выражение с AND оператором ложно ( false ), если значение хотя бы одного из его операндов ложно;
- выражение с OR оператором истинно ( true ), если значение хотя бы одного из его операндов истинно.
- false AND X = false
- true OR X = true
Рассмотрим пример кода, который выводит сообщение String , если строка не нулевая и более 20 символов длиной:
1. if ((s != null) && (s.length() > 20)) <
2. System.out.println(s);
3. >
Эта же задача может быть закодиравана по-другому:
1. if (s != null) <
2. if (s.length() > 20) <
3. System.out.println(s);
4. >
5. >
Если бы строка s была null , то при вызове метода s.length() мы бы получили NullPointerException . Ни в одном из двух примеров кода, однако, такая ситауция не возникнет. В частности, во втором примере, s.length() не вызывается при s = null , благодаря использованию укороченного оператора &&. Если бы тест (s!=null) возвращал ложь ( false ), то есть s — несуществующая строка, то и всё выражение гарантированно ложно. Значит, отпадает необхеодимость вычислять значение второго операнда, то есть выражения (s.length()>20) .
Однако данные операторы имеют побочные эффекты. Например, если правый операнд является выражением, выполняющим некую операцию, то при применении укороченных операторов, эта операция может оазаться невыполненной в случае ложного левого операнда.
Первый пример иногда будет выводить на печать вот это:
test = true
val = 0
А иногда вот это:
test = true
val = 2
Второй пример иногда будет выводить на печать вот это:
test = true
val = 1
А иногда вот это:
test = true
val = 2
А дело вот в чём. Если val равно 0, то второй операнд (++val) никогда не будет вычислен, то есть val останется равным нулю. Если же изначально val равен единице, то в результате эта переменная будет инкрементирована и мы увидим val = 2 . Во втором примере, при использовании неукороченных операторов, инкремент выполняется всегда и результат будет всегда или 1 или 2 в зависимости от случайного значения выбранного на первом шаге. В обоих примерах переменная test принимает значение true , потому что либо val = 0 , либо val = 1 и инкрементируется до значения 2.