Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы.docx
Скачиваний:
335
Добавлен:
22.03.2016
Размер:
1.03 Mб
Скачать

26. Условная операция и ее использование

Единственная в C++ тернарная операция. Формат записи:

< Условие > ? < Выражение 1 > : < Выражение 2 >

| | |

Операнд 1 Операнд 2 Операнд 3

"Условие" - любое выражение, результатом которого является число или логическое значение. Значение "Условия" трактуется как логическое значение (0 - false; любое не равное 0 значение - true). Если значение первого операнда true (не равное 0), то значение этого условного выражения будет равно значению второго операнда (Выражение 1). Если же значение первого операнда false (0), то значение этого условного выражения будет равно значению третьего операнда (Выражение 2).

Например:

// Переменной max присваивается наибольшее из a и b значение

int max = a > b ? a : b;

Условные выражения можно вкладывать друг в друга. Например:

// Переменной max присваивается наибольшее из a, b и c значение

int max = a > b ? (a > c ? a : c) : (b > c ? b : c);

Часто условное выражение используется для вывода на экран одного из значений, в зависимости от некоторого условия. Например:

cout << (a > b ? a : b) << endl; // Выводится наибольшее из a и b

27. Определение объема памяти, необходимого для размещения объектов

Операция sizeof предназначена для определения объема памяти в байтах, требующегося для размещения некоторого объекта или типа данных. Имеет две формы:

sizeof < Выражение >

или

sizeof (< Тип данных >)

Например:

long a = 0;

double d;

cout << sizeof (double) << endl; // Выведено 8

cout << sizeof (5 / 3) << endl; // Выведено 4

cout << sizeof a << endl; // Выведено 4

cout << sizeof (a + 3.14f) << endl; // Выведено 4

cout << sizeof (d = a + 3.14f) << endl; // Выведено 8

28. Понятие приоритета операций и его влияние на результаты вычислений

Результат вычисления выражений зависит от приоритета операций и от порядка выполнения операций с одинаковым приоритетом.

Для правильной записи выражений очень важно знать, в каком порядке выполняются операции внутри выражения. Например: 5 + 4 * 3 / 2 + 3

Если выполнить операции слева направо, то результат будет равен 16:

5 + 4 = 9

9 * 3 = 27

27 / 2 = 13

13 + 3 = 16

Но, поскольку, операции умножения и деления имеют одинаковый приоритет, и он выше, чем у операции сложения, на самом деле результат будет равен 14:

4 * 3 = 12

12 / 6 = 6

5 + 6 = 11

11 + 3 = 14

В арифметических и логических выражениях операции с одинаковым приоритетом выполняются слева направо. А вот выражения с операторами присваивания выполняются справа налево.

В следующей таблице приведен перечень рассмотренных выше операций в порядке уменьшения приоритетов. Операции, имеющий одинаковый приоритет, сгруппированы по секциям.

Операция

Действие

++

Постфиксный оператор инкремента

--

Постфиксный оператор декремента

++

Префиксный оператор инкремента

--

Префиксный оператор декремента

!

Логическое «НЕ»

-

Унарный минус

+

Унарный плюс

Тип

Явное преобразование типа

Sizeof

Получение размерности операнда в байтах

*

Умножение

/

Деление

%

Остаток (деление по модулю)

+

Сложение

-

Вычитание

<<

Сдвиг влево

>>

Сдвиг вправо

<

Меньше

<=

Меньше или равно

>

Больше

>=

Больше или равно

==

Равно

!=

Не равно

&

Побитовое «И»

^

Побитовое исключающее «ИЛИ»

|

Побитовое «ИЛИ»

&&

Логическое «И»

||

Логическое «ИЛИ»

? :

Условная операция

=, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^=

Простое и составные присваивания

Изменить порядок выполнения операций внутри выражения можно с помощью круглых скобок. В любом случае, когда возникают сомнения в определении приоритета выполнения операций лучше использовать круглые скобки (на первых порах это особенно рекомендуется).

29-30. Вывод и вывод простых типов данных на экран

В языке C++ нет встроенных средств ввода/вывода — он осуществляется с помощью функций и объектов, содержащихся в стандартных библиотеках.

В C++ можно использовать два различных способа реализации ввода-вывода.

Первый способ (унаследованный от языка C) основан на использовании ряда библиотечных функций, наиболее употребимыми из которых являются функции printf и scanf. Они выполняют форматированный ввод и вывод произвольного количества величин в соответствии со строкой формата. Строка формата содержит символы, которые при выводе копируются в поток (на экран) или запрашиваются из потока (с клавиатуры) при вводе, и спецификации преобразования, начинающиеся со знака %, которые при вводе и выводе заменяются конкретными величинами. Например:

#include <iostream>

using namespace std;

int main ()

{

setlocale (0, "");

int a;

printf ("Введите целое число:\t");

scanf ("%d", &a);

printf ("Вы ввели значение:\t%d\n\n", a);

system ("Pause");

return 0;

}

Второй способ, характерный для C++, основан на использовании стандартных потоков ввода (cin) и вывода (cout). Та же самая программа в стиле C++ будет выглядеть так:

#include <iostream>

using namespace std;

int main ()

{

setlocale (0, "");

int a;

cout << "Введите целое число:\t";

cin >> a;

cout << "Вы ввели значение:\t" << a << "\n\n";

// cout << "Вы ввели значение:\t" << a << endl << endl;

system ("Pause");

return 0;

}

В одной и той же программе совмещать эти два способа не рекомендуется.

При использовании потоков для вывода данных на экран используется операция <<, которая так и называется: операция вывода или операция вставки (данные "вставляются" в поток вывода).

Ввод данных с клавиатуры осуществляется с помощью операции ввода >> (операция извлечения данных из потока ввода).

Обе эти операции "знают" как осуществлять ввод и вывод стандартных простых типов данных. Более того эти операции можно "научить", как осуществлять ввод/вывод нестандартных пользовательских типов данных (перегрузка операций, которая будет рассмотрена позднее).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]