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