Условная операция и её использование.
Единственная в 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 – размер памяти, например
· int w = sizeof (double);
· float f;
w = sizeof (f);
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;
}
В одной и той же программе совмещать эти два способа не рекомендуется.
При использовании потоков для вывода данных на экран используется операция <<, которая так и называется: операция вывода или операция вставки (данные "вставляются" в поток вывода).
Ввод данных с клавиатуры осуществляется с помощью операции ввода>>(операция извлечения данных из потока ввода).
Обе эти операции "знают" как осуществлять ввод и вывод стандартных простых типов данных. Более того эти операции можно "научить", как осуществлять ввод/вывод нестандартных пользовательских типов данных (перегрузка операций).
Вывод текстовых строк
Текстовые (строковые) литералы в C++ представляются как последовательность символов, заключенная в двойные кавычки. Например: "Это пример текстовой строки".
Вывод текстовых строк на экран осуществляется через стандартный поток вывода с помощью операции вывода <<: cout<< "Это пример текстовой строки";
Внутрь текстовых строк можно вставлять управляющие escape-последовательности. Escape-последовательности служат для управления выводом, и представляют собой специальные последовательности из двух или более символов, начинающиеся символом обратной наклонной черты - \. При этом каждая такая последовательность воспринимается компилятором как 1 символ. Примерами таких управляющих последовательностей в предыдущих программах являются \t - символ табуляции и \n - символ перевода строки (все эти последовательности приведены в разделе 3.5). С помощью Escape-последовательностей в текстовую строку можно включить любой символ с помощью его восьмеричного или шестнадцатеричного кода (в том числе и символы, которых нет на клавиатуре). Например:cout<< "Это символ с восьмеричным кодом 254:\t\254\n";cout<< "А это символ с шестнадцатеричным кодом xAA:\t\xAA\n";
На экран будут выведены две строки: Это символ с восьмеричным кодом 254: А это символ с шестнадцатеричным кодом xAA: Є
Если на экран необходимо вывести пустую строку, достаточно вставить в поток дважды подряд управляющую последовательность \n:
cout<< "Это первая строка\n";
cout<< "\n";// Вторая строка пустая
cout<< "Это третья строка\n";
При выводе длинных текстовых строк их можно в тексте программы разбивать на части следующим образом:
cout<< "Это " \
"условный " \
"пример " \
"длинного " \
"текста\n"
или так
cout<< "Это " "условный " "пример "
"длинного " "текста\n";
На экран будет выведена одна строка, после чего экранный курсор перейдет на новую строку (управляющая последовательность \n): Это условный пример длинного текста
Символ \ и символ пробела можно использовать для "сцепления" отдельных строк. Если в программе встречаются два или более строковых литерала, разделенные только пробелами, то они будут рассматриваться как одна символьная строка.
Ввод текстовых строк с клавиатуры будет рассмотрен позже.