Лекция 2
1/41
301.00K
Category: programmingprogramming

Основные операции. Базовые управляющие конструкции структурного программирования. (Лекция 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. Задача

Оператор switch
switch (<выражение>)
{
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
English     Русский Rules