c++ Базовый. Занятие 02
TRANSCRIPT
Модуль 1: Базовые понятия языка программирования С++
Темы лекции: Форматированный ввод/вывод. Основные операции языка С++. Операторы языка С++.
Практическое задание: Операторы языка С++.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 2
http://www.slideshare.net/IgorShkulipa 2
Тема 1. Форматированный ввод/вывод
http://www.slideshare.net/IgorShkulipa 3
Функция стандартного вывода printf()
Функция printf() является функцией стандартного вывода. С помощью
этой функции можно вывести на экран монитора строку символов,число, значение переменной и т.д.
Функция printf() имеет прототип в файле stdio.h
int printf(char *управляющая строка, аргументы);
В случае успеха функция printf() возвращает число выведенных
символов.
Управляющая строка содержит два типа информации: символы, которыенепосредственно выводятся на экран, и спецификаторы формата,определяющие, как выводить аргументы.
Функция printf() это функция форматированного вывода. Это
означает, что в параметрах функции необходимо указать форматданных, которые будут выводиться. Формат данных указываетсяспецификаторами формата. Спецификатор формата начинается ссимвола % за которым следует код формата.
Пример: printf(“Average mark=%d”, 5)
Результат: Average mark=5
http://www.slideshare.net/IgorShkulipa 4
Спецификаторы формата
Формат Значение
%с Символ
%d Целое десятичное число со знаком
%i Целое десятичное число со знаком
%e Десятичное число в виде x.xx e+xx
%E Десятичное число в виде x.xx E+xx
%f Десятичное число с плавающей точкой xx.xxxx
%F Десятичное число с плавающей точкой xx.xxxx
%gИспользует код %е или %f — тот из них, который короче (при использовании
%g используется е нижнего регистра)
%GИспользует код %Е или %f — тот из них, который короче (при использовании
%G используется Е верхнего регистра)
%o Восьмеричное число
%s Строка символов
%u Беззнаковое десятичное число
%x Шестнадцатеричное число (буквы нижнего регистра)
%X Шестнадцатеричное число (буквы верхнего регистра)
%% Символ %
%p Выводит на экран значение указателя
http://www.slideshare.net/IgorShkulipa 5
Спецификаторы формата
%ld печать long int
%hu печать short unsigned
%Lf печать long double
Кроме того, к командам формата могут быть примененымодификаторы l и h
http://www.slideshare.net/IgorShkulipa 6
Управляющие символы
Символ Значение
\b BackSpace
\f Новая страница, перевод страницы
\n Новая строка, перевод строки
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\" Двойная кавычка
\' Апостроф
\\ Обратная косая черта
\0 Нулевой символ, нулевой байт
\a Сигнал
\N Восьмеричная константа
\xN Шестнадцатеричная константа
\? Знак вопроса
http://www.slideshare.net/IgorShkulipa 7
Функция стандартного ввода scanf()
Функция scanf() - функция форматированного ввода. С её помощью
можно вводить данные со стандартного устройства ввода(клавиатуры). Вводимыми данными могут быть целые числа, числа сплавающей запятой, символы, строки и указатели.
Функция scanf() имеет прототип в файле stdio.h
int scanf(char *управляющая строка, аргументы);
Функция возвращает число переменных которым было присвоенозначение.
Управляющая строка содержит три вида символов: спецификаторыформата, пробелы и другие символы.
Пример: scanf(“%d”, &iNumber)
Результат: iNumber=введенное число;
http://www.slideshare.net/IgorShkulipa 8
Спецификаторы формата
Формат Значение
%c Чтение символа
%d Чтение десятичного целого
%i Чтение десятичного целого
%e Чтение числа типа float
%h Чтение short int
%o Чтение восьмеричного числа
%s Чтение строки
%x Чтение шестнадцатеричного числа
%p Чтение указателя
%n Чтение указателя в увеличенном формате
http://www.slideshare.net/IgorShkulipa 9
Потоки ввода- вывода
В C++ ввод и вывод информации можно осуществлять через потоки cin
и cout. Они находятся в библиотеке с заголовочным файлом <iostream>.
Для их использования необходимо использовать пространство имен std
using namespace std;
Либо операцию доступа “::”
std::cin; std::cout;
Ввод информации осуществляется с помощью потока cin.
cin>>a1>>a2>>a3>>...>>an;
a1, a2,..., an– имена переменных, которые нужно ввести
<<– операция извлечения
Вывод информации осуществляется с помощью потока cout.
cout<<a1<<a2<<a3<<...<<an;
a1, a2,..., an– имена переменных или строковые константы, которые
нужно вывести на монитор.
>>– операция вставки.
http://www.slideshare.net/IgorShkulipa 10
Тема 2. Основные операции языка С++.
http://www.slideshare.net/IgorShkulipa 11
Операция присваивания
Простая форма операции присваивания.
=
Левый операнд операции присваивания является изменяемымвыражением.
В качестве правого операнда операции присваивания может выступатьлюбое выражение. Значение правого операнда присваивается левомуоперанду.
Правый операнд может состоять из множества выражений, соединенныхоперациями присваивания:
An=…=A3=A2=A1;
Операции присваивания группируются справа налево:
An=(An-1=…=(A3=(A2=A1))…);
В таком выражении все операнды, кроме самого правого, должны быть модифицируемыми выражениями.
http://www.slideshare.net/IgorShkulipa 12
Арифметические операции
+ Сложение
- Вычитание
* Умножение
/ Деление
% Остаток от деления
http://www.slideshare.net/IgorShkulipa 13
Арифметические операции с присваиванием
+= Операция присваивания сложения
-= Операция присваивания вычитания
*= Операция присваивания умножения
/= Операция присваивания деления
%= Операция присваивания остатка от деления
http://www.slideshare.net/IgorShkulipa 14
Логические операции
&& Логическое «И» (AND)
|| Логическое «ИЛИ» (OR)
! Логическое «НЕ» (NOT)
http://www.slideshare.net/IgorShkulipa 15
Поразрядные логические операции
& Логическое «И» (AND)
^ Исключающее «ИЛИ» (XOR)
| Логическое «ИЛИ» (OR)
~ Инвертирование битов (NOT)
Пример: x = 180; // 10110100
y = 166; // 10100110
x | y == 182
10110100
10100110
-----------
10110110
http://www.slideshare.net/IgorShkulipa 16
Поразрядные логические операции с присваиванием
&= Логическое «И» (AND)
^= Исключающее «ИЛИ» (XOR)
|= Логическое «ИЛИ» (OR)
http://www.slideshare.net/IgorShkulipa 17
Операции сдвига
>> Сдвиг вправо
<< Сдвиг влево
>>= Сдвиг вправо с присваиванием
<<= Сдвиг влево с присваиванием
Сдвиг влево – умножение на 2Сдвиг вправо – целочисленное деление на 2
http://www.slideshare.net/IgorShkulipa 18
Операции проверки равенства/неравенства
== Равенство
!= Неравенство
> Больше
< Меньше
>= Не меньше
<= Не больше
http://www.slideshare.net/IgorShkulipa 19
Инкремент, декремент
++ Инкремент - увеличение переменной на единицу
-- Декремент - уменьшение переменной на единицу
Различают два вида этих операций: операции преинкремента ипредекремента и операции постинкремента и посткинкремента.
x=5;
y = ++x; // y = 6, x = 6
y = --x; // y = 5, x = 5
y = x++; // y = 5, x = 6
y = x--; // y = 6, x = 5
При преникременте сначала происходит увеличение переменной наединицу, и потом это увеличенное значение участвует в выражении.
При постинкременте переменная сначала участвует в выражении, а толькозатем она увеличивается.
http://www.slideshare.net/IgorShkulipa 20
Условная операция
«? :»
Форма записи:
"условие" ? "выражение 1" : "выражение 2";
Если условие истинно, то выполняется выражение 1, иначевыполняется выражение 2.
Пример:
a > b ? cout << a : cout << b;
Если а > b, то выполняется cout << a, иначе выполняетсяcout<< b
http://www.slideshare.net/IgorShkulipa 21
Операция определения размера
sizeof Операция определения размера объекта или типа
Различают два варианта этой операции:
1. В первом случае операндом может быть любое l-выражение (лево-допустимое выражение, т.е. ссылка на константу, переменную илифункцию).
2. Во втором случае операндом является имя типа.
Результатом этой операции является константа типа size_t. Этот
производный целочисленный беззнаковый тип определяетсяконкретной реализацией.
sizeof ( type name );
sizeof ( object );
sizeof object;
http://www.slideshare.net/IgorShkulipa 22
Операции динамического распределения памяти
new - операция выделения памяти.
Позволяет выделить и сделать доступным участок вдинамической памяти. В качестве операнда используется имятипа и, возможно, выражение инициализатор. Операциявозвращает адрес размещённого в памяти объекта.
delete - операция освобождения памяти.
Освобождает ранее выделенную с помощью операции new
область динамической памяти. В качестве операндаиспользуется адрес освобождаемой области памяти.
http://www.slideshare.net/IgorShkulipa 23
Операция доступа
:: Операция доступа
Обеспечивает обращение к именованной глобальной области памяти,находящейся вне области видимости. Эта операция применяется приработе с одноимёнными объектами, расположенными во вложенныхобластях действия имён. Когда объект во внутренней областидействия имени скрывает одноименный объект, областью действиякоторого является файл.
int iNumber; // Глобальная переменная
int func()
{
int iNumber; // Локальная переменная
iNumber = 100; // Присвоение значения локальной
::iNumber = 125; // Присвоение значения глобальной
}
http://www.slideshare.net/IgorShkulipa 24
Операции обращения к компонентам класса и объекта
Операции выбора компонентов объекта :
Операции обращения к компонентам класса:
. Операция прямого выбора - точка
-> Операция косвенного выбора
.* Операция обращения к компонентам класса по имени объекта или ссылки на объект (левый операнд операции) и указателю на компонент класса (правый операнд операции)
->* Операция обращения к компонентам класса по указателю на объект (левый операнд операции) и указателю на компонент класса (правый операнд операции)
:: Операция доступа к компонентам класса по имени класса и имени компонента
http://www.slideshare.net/IgorShkulipa 25
Операция управления процессом вычисления значений
выражение1 , выражение2
Пара выражений, разделенных запятой, вычисляется слева направо,значение левого выражения теряется. Тип и значение результатаявляются типом и значением правого операнда. Эта операциягруппирует слева направо.
В контексте, где запятая имеет специальное значение, как например всписке фактических параметров функции и в списке инициализаторовоперация запятая, как она описана в этом разделе, может появлятьсятолько в скобках;
Например:
f (a,(t=3,t+2),c)
функция имеет три параметра, вторым из которых является значение 5
http://www.slideshare.net/IgorShkulipa 26
Другие операции
Операция явного преобразования типа
()
Операция индексации
[]
Операция typeid
Операция typeid обеспечивает динамическую идентификацию
типов. Возвращает id указанного типа.
http://www.slideshare.net/IgorShkulipa 27
Приоритет операцийОперация Приоритет
Индексация массива [] 16
Вызов функции func(); 16
Прямого выбора . 16
Косвенного выбора -> 16
Постинкремент/декремент ++ -- 16
Прединкремент/декремент ++ -- 15
sizeof 15
Инверсия битов ~ 15
Отрицание ! 15
Взятие адреса & 15
Ссылка * 15
Приведение типов (тип) 14
Умножение, деление * / % 13
Сложение, вычитание + - 12
Сдвиг << >> 11
Сравнение < > <= >= 10
Равенство, неравенство == != 9
Битовый «AND» & 8
Битовый «XOR» ^ 7
Битовый «OR» | 6
Логический «AND» && 5
Логический «OR» || 4
Условная операция ?: 3
Операции присваивания = += -= *= /= %=<<= >>= &=^= |= 2
Операция управления процессом вычисления значений , 1
http://www.slideshare.net/IgorShkulipa 28
Тема 3. Операторы языка С++
http://www.slideshare.net/IgorShkulipa 30
Составной оператор
{
оператор1;
оператор2;
...
операторN;
}
http://www.slideshare.net/IgorShkulipa 31
Условный оператор
Если <условие>==true, то выполнится <оператор1> , в ином случае -<оператор2>.
Блок <else> может быть опущен. В таком случае при истинном условиивыполнится <оператор1> , а за ним – оператор, следующий после
условного.
Вместо <оператор1> и <оператор2> может использоваться любойоператор, включая составной оператор ({}), операторы циклов,операторы выбора и условный, вызова функции, пустой оператор (;)
и др.
if (условие)
оператор1;
else
оператор2;
http://www.slideshare.net/IgorShkulipa 32
Оператор выбора
Синтаксис выбирающего оператора допускает пустой составной оператори пустой оператор в качестве операторов, следующих за условиемвыбирающего оператора:
switch (i) ;
switch (j) {}
switch (r) i++;
Общий вид оператора выбора:
switch (условие)
{
case <константное выражение 1>: <оператор 1>;
case <константное выражение 2>: <оператор 2>;
...
case <константное выражение N>: <оператор N>;
default: <оператор N+1>;
}
http://www.slideshare.net/IgorShkulipa 33
Схема выполнения оператора switch
● вычисляется выражение в круглых скобках после оператора switch(предварительная стадия);
● это значение последовательно сравнивается со значениямиконстантных выражений за метками case (стадия определенияначальной точки выполнения оператора);
● если значения совпадают, управление передаётся соответствующемупомеченному оператору (стадия выполнения);
● если ни одно значение не совпадает и в теле оператора case естьоператор, помеченный меткой default, управление передаётся этомуоператору (стадия выполнения);
● если ни одно значение не совпадает, и в теле оператора case нетоператора, помеченного меткой default, управление передаётсяоператору, следующему за оператором switch (стадия выполнения).
На стадии выполнения все операторы от точки выполнения и до конца
тела оператора выполняются независимо от меток, если только какой-
нибудь из операторов не передаст управление за пределы оператора
выбора.
http://www.slideshare.net/IgorShkulipa 34
Оператор цикла «for»
for (<выражение1>; <выражение2>; <выражение3> )
<оператор>;
Цикл состоит из следующих этапов:
1. Выполняется оператор инициализации цикла (выражение1). Этот этап
можно назвать этапом инициализации цикла. Он выполняется один раз, в самом начале работы цикла.
2. Затем вычисляется значение выражения2. Это выражение называется
выражением условия продолжения цикла.
3. Если значение этого выражения истинно, выполняется оператор цикла.
4. После этого вычисляется значение выражения3.
5. Далее см. пункт 3
http://www.slideshare.net/IgorShkulipa 35
Циклы с условием
Цикл с предусловием
while (<условие>)
{
<оператор>
}
Цикл с постусловием
do
{
<оператор>
}
while (<условие>)
http://www.slideshare.net/IgorShkulipa 36
Операторы
Возвращение значения и выход из функции
return <выражение>;
Безусловный переход
goto <метка>;
Оператор прекращения. Прерывает выполнение текущего блока.
break;
Оператор продолжения. Прерывает выполнение текущей итерации цикла и переходит к следующей.
continue;
Оператор вызова функции
<имя функции>(аргументы)
Оператор «typedef»
typedef <тип> <имя>;
typedef (unsigned char) byte;
http://www.slideshare.net/IgorShkulipa 37
Лабораторная работа №2. Операторы языка С++.
Создать консольный калькулятор, который выполняетарифметические действия над числами в:
⚫ Десятичной системе исчисления
⚫ Двоичной системе исчисления
⚫ Шестнадцатеричной системе исчисления
Реализовать меню для управления вычислениями.