Similar presentations:
Основные операции. Базовые управляющие конструкции структурного программирования. (Лекция 2.2)
1. Лекция 2
Основные операцииБазовые управляющие конструкции
2. Повторение
■Вопрос 1. Укажите НЕВЕРНЫЕ идентификаторы
и поясните почему
1. R025
2. d_25d
3. 4ab
4. Угол
5. PS/2
2
3. Повторение
4.
ОТВЕТВопрос 1.
3 – начинается с цифры
4 – нельзя использовать русские буквы
5 – нельзя использовать знак “/”
Вопрос 2.
1.
символьная
2.
логическая
3.
строковая
4.
целая в 16-ой системе
5.
вещественная
5. ОТВЕТ
Состав языка (формальные языки)■
■
■
■
Символы - набор неделимых
знаков, с помощью которых
пишутся все тексты;
лексемы – минимальная единица
Лексемы
языка, имеющая самостоятельный
смысл;
выражение – задает правило
вычисления некоторого значения;
оператор – задает законченное
описание некоторого действия.
Оператор
Выражения
Символы
6
6. Состав языка (формальные языки)
Выражение■
■
■
■
Выражение – это конструкция, составленная из
констант, переменных, знаков операций, функций
и скобок.
Основное назначение выражения:
❑ определить порядок вычисления некоторого
выражения;
❑ найти значение выражения.
Если результатом вычисления выражения
является число, то данное выражение –
арифметическое.
Если результатом будет значение «истина» или
«ложь», то это логическое выражение.
7
7. Выражение
Операции■
Операции можно разделить на три группы:
❑ УНАРНЫЕ :
■ требуют один объект:
❑ <оп> <операнд>
❑ <операнд> <оп>
❑ БИНАРНЫЕ
■ требуют двух объектов: < операнд> <оп>
<операнд>
❑ ТЕРНАРНЫЕ
■ Требуют трех объектов (условная операция)
8
8. Операции
Приоритет выполнения операцийУнарные операции
Бинарные и тернарная операции
Арифметические операции
Операции сравнения
Побитовые операции
Логические операции
Условная операция
Операции присваивания
Последовательное вычисление
9. Приоритет выполнения операций
Унарные операции++
увеличение на 1
––
уменьшение на 1
sizeof
размер
~
поразрядное отрицание
!
логическое отрицание
–
унарный минус
+
унарный плюс
&
взятие адреса
*
разадресация
new
выделение памяти
delete
освобождение памяти
(<тип>) преобразование типа
10. Унарные операции
Арифметические операции■
■
■
■
■
++ (инкремент) - увеличивает значение
переменной на единицу (+1)
-- (декремент) - уменьшает значение
переменной на единицу (–1)
Применяются только к переменным!
Префиксная форма: ++a; --b;
Суффиксная (постфиксная) форма:
c++; d--;
11
11. Арифметические операции
Инкремент. Декремент■
■
■
■
Префиксная форма: сначала значение переменной
увеличивается на единицу, а затем измененное
значение подставляется в выражение.
Суффиксная форма: в выражение подставляется
старое значение переменной и только после этого
значение переменной увеличивается на единицу.
Пример 1
int a=3, b=5, с;
c=(a++)+(++b); // c=3+6=9; a=4; b=6
Пример 2
int a=3, b=5,c;
c=(a--)+(--b);
// c=3+4=7; a=2; b=4
12
12. Инкремент. Декремент
Арифметические операцииМультипликативные операции
*
умножение
/
деление
% остаток от деления
Аддитивные операции
+
–
сложение
вычитание
Операции сдвига
>>
<<
сдвиг вправо
сдвиг влево
13. Арифметические операции
Арифметические операции. Деление■
■
■
Вещественное деление: если один из операндов
имеет вещественный тип.
❑ 1.2/0.4=3.0
// Вещественное деление (double):
❑ 12/0.4=30.0
❑ 1.2/4=0.3
Деление нацело (аналог div в языке Паскаль):
❑ 12/4=3 (int)
❑ 1/4=0
❑ 12/5=2
Пример. Вычислить 1/n.
n=10;
h=1/n;
// неверно!
h=1.0/n;
// верно
14
14. Арифметические операции. Деление
Арифметические операции■
% остаток от деления нацело (аналог mod в
Паскале)
❑ Применяется только к операндам целого
типа.
❑ При выполнении операции деления если
знаки делимого и делителя совпадают, то
результат – положительный, и ответ будет
отрицательным, если знаки разные.
■ 5%2=1
5/2=2
■ -5%2=-1
-5/2=-2
■ 5%-2=1
5/-2=-2
■ -5%-2=-1
-5/-2=2
15
15. Арифметические операции
Операции сравненияСравнение на «больше-меньше»
>
>=
<
<=
Сравнение на «равенство-неравенство»
==
//равно
!=
//не равно
16. Операции сравнения
Побитовые операцииПоразрядная конъюнкция (И)
&
Поразрядное исключающее ИЛИ
^
Поразрядная дизъюнкция (ИЛИ)
|
17. Побитовые операции
Логические операцииЛогическое И
&&
Логическое ИЛИ
||
18. Логические операции
Условная операция (тернарная)<условие> ? <выр.1> : <выр.2>
19. Условная операция (тернарная)
Операции присваивания=
*=
/=
%=
+=
–=
<<=
>>=
&=
^=
|=
20. Операции присваивания
Оператор присваиванияОбщая структура:
куда записать
что
имя переменной = выражение;
Арифметическое выражение может включать
• константы (постоянные)
• имена переменных
• знаки арифметических операций:
+ *
/
%
умножение
деление
• вызовы функций
• круглые скобки ( )
остаток от
деления
21
21.
Сокращенная запись операций в Сиполная запись
a = a + 1;
инкремент
a = a + b;
a = a - 1;
сокращенная запись
a++;
a += b;
декремент
a--;
a = a – b;
a -= b;
a = a * b;
a *= b;
a = a / b;
a /= b;
a = a % b;
a %= b;
22
22.
Последовательное вычисление23. Последовательное вычисление
Операции присваивания■
■
■
■
■
int a=55;
// операция присваивания
int x, y, z;
x = y = z = a*5;
В выражении используется два раза
операция присваивания и один раз
оператор присваивания.
Операция присваивания выполняется
справа налево (правоассоциативная):
24
24. Операции присваивания
Правила записи выражений■
■
■
■
■
Все символы, входящие в выражение,
записываются в строку.
Проставляются все знаки операций.
При записи выражений учитываются
приоритеты (ранги) операций.
Для изменения приоритета
последовательности операций используются
круглые скобки.
Замечание:
❑ Если в выражениях встречаются
переменные и константы разных типов, то
производится автоматическое
преобразование типов.
25
25. Правила записи выражений
Порядок выполнения операций• вычисление выражений в скобках
• умножение, деление, % слева направо
• сложение и вычитание слева направо
2 3 5 4 1
7 8 6 9
z = (5*a*c+3*(c-d))/a*(b-c)/ b;
26 26
26.
Правила преобразования типов■
■
■
■
■
Преобразование типов не происходит, если оба
операнда имеют одинаковый тип.
При наличии разных типов величина с младшим
типом приводится к величине старшего типа,
исключение составляют операция присваивания и
оператор присваивания.
При выполнении операций присваивания величина,
полученная в правой части, преобразуется к типу
переменной, стоящей в левой части.
Пример:
int x;
float a=2.55, c=1.75; //double преобразуется в
// float
x=a+c;
cout<<x; // float преобразуется в int. Ответ?
27
27. Правила преобразования типов
Преобразование типов■
■
Преобразование целого типа (от младшего к
старшему)
❑ char → short → int → long int
Преобразование вещественного типа (от
младшего к старшему)
❑ float → double → long double
28
28. Преобразование типов
Как выполнять операцииодинакового приоритета?
Слева направо ( ) все операции кроме…
Справа налево ( )
Унарные операции
Тернарная операция
Операции присваивания
29. Как выполнять операции одинакового приоритета?
Задача: поменять местами значенияпеременных a и b
Используем
дополнительную
переменную (tmp).
Без использования
дополнительной
переменной.
tmp = a;
a = b;
b = tmp;
a = a + b;
b = a – b;
a = a – b;
30. Задача: поменять местами значения переменных a и b
Вычислить min(a,b)if (a<b) min=a; else min=b;
min = a<b ? a : b;
min = (a < b)*a + (a >= b)*b;
Еще способы ???
31. Вычислить min(a,b)
Математические функции#include <math.h>
|x|
sin x
cos x
tg x
ex
ln x
xy
x
fabs(x)
sin(x)
cos(x)
tan(x)
exp(x)
log(x)
pow(x,y)
sqrt(x)
Возможности округления:
ceil(x) округление вверх
(ceil(4.3) =5,
ceil(- 4.3)=-4)
floor(x) округление вниз
(floor(4.9) =4,
floor(- 4.9) = -5)
(int)x приведение к типу int,
дробная часть
отбрасывается
(int)4.7 = 4, int(-4.7) = -4
32. Математические функции
Базовые конструкции структурногопрограммирования
33. Базовые конструкции структурного программирования
Условный оператор■
if (условие) оператор_1; else оператор_2;
❑
■
Здесь условие - это логическое выражение,
переменная или константа.
Сначала вычисляется значение выражения,
записанного в виде условия.
❑
❑
Если оно имеет значение истина (true, не равно 0),
выполняется оператор_1.
В противном случае (значение ложное (false), равно 0 )
оператор_2.
34
34. Условный оператор
■Еслив задаче требуется, чтобы в зависимости от значения
условия выполнялся не один оператор, а несколько, их
необходимо заключить в фигурные скобки, как составной оператор.
if (условие)
{
оператор_1;
оператор_2;
…}
else
{
оператор_1;
оператор_2; …
}
■Альтернативная ветвь else в условном операторе может
отсутствовать, если в ней нет необходимости.
35
35. Условный оператор
36Условный оператор
if ( a > b )
{
с = a;
a = b;
b = c;
}
?
Что делает?
36
36. Условный оператор
37Вложенные условные операторы
Задача: в переменных a и b записаны возрасты Андрея и
Бориса. Кто из них старше?
Сколько вариантов?
if ( a > b )
printf("Андрей старше");
else
if ( a == b )
printf("Одного возраста");
else
printf("Борис старше");
?
вложенный
условный оператор
37
37. Вложенные условные операторы
ЗадачаДаны три целых числа различных между собой: a,b
и с.
Перераспределить их значения таким образом,
чтобы в переменной а оказалось самое
маленькое из значений, в с – самое большое, в
переменную b поместить оставшееся.
Разрешается использовать только одну
дополнительную переменную.
38. Задача
Оператор switchswitch (<выражение>)
{
case конст.выр.1: [<список операторов 1>]
case конст.выр.2: [<список операторов 2>]
…
case конст.выр.n: [<список операторов n>]
[default: <операторы>]
}
39. Оператор switch
40Множественный выбор
if (m == 1) printf("январь");
if (m == 2) printf("февраль");
...
if (m == 12) printf("декабрь");
switch ( m ) {
case 1: printf("январь");
break;
case 2: printf("февраль");
break;
...
case 12: printf("декабрь");
break;
default: printf("ошибка");
}
40
40. Множественный выбор
41Множественный выбор
Если не ставить
switch ( m )
case 1:
case 2:
case 3:
default:
}
При m = 2:
break:
{
printf("январь");
printf("февраль");
printf("март");
printf("ошибка");
февральмартошибка
41