Лекция 2
Повторение
Повторение
ОТВЕТ
Состав языка (формальные языки)
Выражение
Операции
Приоритет выполнения операций
Унарные операции
Арифметические операции
Инкремент. Декремент
Арифметические операции
Арифметические операции. Деление
Арифметические операции
Операции сравнения
Побитовые операции
Логические операции
Условная операция (тернарная)
Операции присваивания
Последовательное вычисление
Операции присваивания
Правила записи выражений
Правила преобразования типов
Преобразование типов
Как выполнять операции одинакового приоритета?
Задача: поменять местами значения переменных a и b
Вычислить min(a,b)
Математические функции
Базовые конструкции структурного программирования
Условный оператор
Условный оператор
Условный оператор
Вложенные условные операторы
Задача
Оператор switch
Множественный выбор
Множественный выбор
301.00K
Категория: ПрограммированиеПрограммирование

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