Similar presentations:
Основные операторы. Лекция 2 по алгоритмизации и программированию
1. Основные операторы
Лекция 22. Знаки операций Унарные
&Получение адреса
*
Обращение по адресу (разыменование)
-
Унарный минус
~
Поразрядное инвертирование
!
Логическое отрицание (0- ложь, не 0 –истина, отрицание 0 – 1,
отрицание не 0 – 0
++
Увеличение на 1 (постфиксная и префиксная формы)
--
Уменьшение на 1 (постфиксная и префиксная формы
sizeof
Вычисление размера объекта в байтах, имеет две формы:
sizeof(тип)
sizeof(выражение)
имя_типа
Приведение типов, имеет две формы:
(имя_типа)операнд
имя_типа(операнд)
3. Знаки операций Бинарные
Мультипликативные*
умножение операндов арифметического типа
/
деление операндов арифметического типа (если операнды
целочисленные, то выполняется целочисленное деление)
%
получение остатка от деления целочисленных операндов
Аддитивные
+
бинарный плюс (сложение арифметических операндов)
-
бинарный минус (вычитание арифметических операндов)
4. Знаки операций Бинарные
Операции сдвига (только для целочисленных операндов)<<
Сдвиг влево битового представления значения левого
операнда на количество разрядов, равное значению правого
операнда, освободившиеся разряды обнуляются
>>
Сдвиг вправо битового представления значения левого
операнда на количество разрядов, равное значению правого
операнда, освободившиеся разряды обнуляются, если
операнд беззнакового типа и заполняется знаковым разрядом
в противном случае
Поразрядные операции
&
Поразрядная конъюнкция (И)
|
Поразрядная дизъюнкция (ИЛИ)
^
Поразрядное исключающее ИЛИ
5. Знаки операций Бинарные
Операции сравнения<
Меньше
>
Больше
<=
Меньше или равно
>=
Больше или равно
==
Равно
!=
Не равно
6. Знаки операций Бинарные
Логические бинарные операции&&
Конъюнкция (И) целочисленных операндов или отношений,
целочисленный результат ложь(0) или истина( не 0)
||
Дизъюнкция (ИЛИ) целочисленных операндов или отношений,
целочисленный результат ложь(0) или истина( не 0)
Операции присваивания
=
Присваивание
*=
умножение с присваиванием (мультипликативное
присваивание)
/=
деление с присваиванием
%=
Получение остатка от деления с присваиванием
+=
сложение с присваиванием (аддитивное присваивание)
-=
вычитание с присваиванием
7. Знаки операций Тернарная
Выражение1 ? Выражение2 : Выражение3;Первым вычисляется значение выражения1.
Если оно истинно, то вычисляется значение выражения2, которое
становится результатом.
Если при вычислении выражения1 получится 0, то в качестве
результата берется значение выражения3.
x<0 ? -x : x ; //вычисляется абсолютное значение x.
8. Выражения
• Из констант, переменных, разделителей изнаков операций можно конструировать
выражения.
• Каждое выражение состоит из одного или
нескольких операндов, символов операций и
ограничителей.
• Если выражение формирует целое или
вещественное число, то оно называется
арифметическим.
• Пара арифметических выражений,
объединенная операцией сравнения,
называется отношением.
9.
Оператор присваиванияОбщая структура:
куда записать
что
имя переменной = выражение;
Арифметическое выражение может включать
• константы (постоянные)
• имена переменных
• знаки арифметических операций:
+ *
/
%
умножение
остаток от
деления
деление
• вызовы функций
• круглые скобки ( )
?
Для чего служат
круглые скобки?
9
10.
Сокращенная запись операций в Сиполная запись
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;
10
11.
Порядок выполнения операций• вычисление выражений в скобках
• умножение, деление, % слева направо
• сложение и вычитание слева направо
2 3 5 4 1
7 8 6 9
z = (5*a*c+3*(c-d))/a*(b-c)/ b;
a 2 5c 2 d (a b)
x
(c d )( d 2a)
5ac 3(c d )
z
(b c)
ab
2 6 3 4 7 5 1
12 8 11 10 9
x =(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));
11
12. Стандартные функции
#include <math.h>подключить
математическую
библиотеку
abs(x) — модуль целого числа
fabs(x) — модуль вещественного числа
sqrt(x) — квадратный корень
sin(x) — синус угла, заданного в радианах
cos(x) — косинус угла, заданного в
радианах
exp(x) — экспонента ех
ln(x)
— натуральный логарифм
pow(x,y) — xy: возведение числа x в степень
y
floor(x)
— округление «вниз»
float x;
ceil(x)
— округление
x = floor(1.6);//
1 «вверх»
x = floor(-1.6);//-2
x = ceil(1.6); // 2
x = ceil(-1.6); //-1
12
13. 2. Составные операторы
2.1. Составные операторы{
n++;
оператор
summa+=n;
}
//это составной
2.2. Блоки
{
int n=0;
n++;
summa+=n;
}
//это блок
14.
Разветвляющиеся алгоритмыЗадача. Ввести два целых числа и вывести на экран
наибольшее из них.
Идея решения: надо вывести на экран первое число,
если оно больше второго, или второе, если оно больше
первого.
Особенность: действия исполнителя зависят от
некоторых условий (если … иначе …).
Алгоритмы, в которых последовательность шагов
зависит от выполнения некоторых условий, называются
разветвляющимися.
14
15. Условный оператор
15Условный оператор
Задача: изменить порядок действий в зависимости от
выполнения некоторого условия.
полная
форма
да
нет
ветвления
a > b?
M = a;
M = b;
вывод M
?
Если a = b?
if ( a > b )
M = a;
else
M = b;
16. Условный оператор: неполная форма
16Условный оператор: неполная форма
M = a;
да
b > a?
нет
M = a;
if ( b > a )
M = b;
M = b;
неполная
форма
ветвления
вывод M
17. Условный оператор
17Условный оператор
if ( a > b )
{
с = a;
a = b;
b = c;
}
?
Можно ли обойтись
без переменной c?
?
Что делает?
b
a
4
6
2
?
4
c
6
4
18. Знаки отношений
18Знаки отношений
> <
больше, меньше
>=
больше или равно
<=
меньше или равно
==
равно
!=
не равно
19. Вложенные условные операторы
19Вложенные условные операторы
Задача: в переменных a и b записаны возрасты Андрея и
Бориса. Кто из них старше?
Сколько вариантов?
if ( a > b )
printf("Андрей старше");
else
if ( a == b )
printf("Одного возраста");
else
printf("Борис старше");
?
вложенный
условный оператор
20.
Задача: набор сотрудников в возрасте 25-40 лет (включительно).начало
ввод x
да
x >= 25
и
x <= 40?
нет
'не подходит'
'подходит'
конец
20
21. Сложные условия
21Сложные условия
Задача: набор сотрудников в возрасте 25-40 лет
(включительно). сложное условие
v >= 25 && v <= 40
if (
)
printf("подходит");
else
printf("не подходит");
&& «И»
|| «ИЛИ»
! «НЕ»
22.
Сложные условияПорядок выполнения сложных условий:
• выражения в скобках
• ! (НЕ, отрицание)
• <, <=, >, >=
• ==, !=
• && (И)
• || (ИЛИ)
Пример:
2
1
6
3
5
4
if ( !(a > b) || c != d && b == a)
{
...
}
22
23. Задачи
23Задачи
«B»: Напишите программу, которая получает номер
месяца и выводит соответствующее ему время года
или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.
24. Задачи
24Задачи
«C»: Напишите программу, которая получает возраст
человека (целое число, не превышающее 120) и
выводит этот возраст со словом «год», «года» или
«лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.
25. Множественный выбор
25Множественный выбор
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("ошибка");
}
26. Множественный выбор
26Множественный выбор
Если не ставить
switch ( m )
case 1:
case 2:
case 3:
default:
}
При m = 2:
break:
{
printf("январь");
printf("февраль");
printf("март");
printf("ошибка");
февральмартошибка
27. Множественный выбор
27Множественный выбор
char c;
ждать нажатия клавиши,
c = getch();
получить её код
switch(c)
{
case 'а':
printf("антилопа\n");
несколько
printf("Анапа\n");
операторов в
break;
блоке
...
case 'я':
printf("ягуар\n");
printf("Якутск\n");
break;
default: printf("Ошибка!");
}
28. 3. Операторы выбора
3.1. Условный операторif (выражение-условие) оператор;
//сокращенная форма
if (выражение-условие) оператор;
else оператор;
//полная форма
29.
Условный операторif ( условие )
{
// что делать, если условие верно
}
else
{
// что делать, если условие неверно
}
Особенности:
• вторая часть (else …) может отсутствовать
(неполная форма)
• если в блоке один оператор, можно убрать { }
29
30.
• Выражение-условие :• арифметическое выражение,
• отношение,
• логическое выражение.
Пример 1
if (x<y && x<z) min=x;
Пример 2
if (d>=0)
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
cout<< “\nx1=”<<x1<<“x2=”<<x2;
}
else cout<<“\nРешения нет”;
31. 3.2. Переключатель
switch (выражение){
case константа1 : оператор1 ;
case константа2 : оператор2 ;
...........
[default: операторы;]
}
switch (выражение)
{
case константа1 :
case константа2 : оператор1 ;
case константа3 : оператор2 ;
...........
[default: операторы;]
}
32.
Пример#include <iostream>
using namespace std;
void main()
{
int i;
cout<<"\nEnter the number";
cin>>i;
switch(i)
{
case 1:cout<<"\nthe number is one";
case 2:cout<<"\n2*2="<<i*i;
case 3: cout<<"\n3*3="<<i*i;break;
case 4: cout<<"\n"<<i<<" is very beautiful!";
default:cout<<"\nThe end of work";
}
}
33.
33Циклические
алгоритмы
34. Что такое цикл?
34Что такое цикл?
Цикл – это многократное выполнение одинаковых
действий.
Два вида циклов:
• цикл с известным числом шагов (сделать 10 раз)
• цикл с неизвестным числом шагов (делать, пока не
надоест)
Задача. Вывести на экран 10 раз слово «Привет».
?
Можно ли решить известными методами?
35. Повторения в программе
35Повторения в программе
printf("Привет\n");
printf("Привет\n");
...
printf("Привет\n");
?
Что плохо?
36. Блок-схема цикла
36Блок-схема цикла
начало
сделали 10 раз?
да
конец
нет
вывод "Привет!"
тело цикла
37. Как организовать цикл?
37Как организовать цикл?
счётчик = 0
пока счётчик < 10
printf("Привет\n");
увеличить счётчик на 1
счётчик = 10
пока счётчик > 0
printf("Привет\n");
уменьшить счётчик на 1
?
результат операции
автоматически
сравнивается с нулём!
Какой способ удобнее для процессора?
38. Цикл с условием
38Цикл с условием
Задача. Определить количество цифр в десятичной
записи целого положительного числа, записанного в
переменную n.
n
счётчик
счётчик = 0
пока n > 0
1234
0
отсечь последнюю цифру n
123
1
увеличить счётчик на 1
12
2
?
Как отсечь последнюю цифру?
n = n / 10;
?
1
0
3
4
Как увеличить счётчик на 1?
счётчик = счётчик + 1;
счётчик ++;
39. Цикл с условием
39Цикл с условием
начальное значение
счётчика
заголовок
цикла
конец
цикла
!
условие
продолжения
count = 0;
while ( n > 0 )
{
n = n / 10;
count ++;
}
тело цикла
Цикл с предусловием – проверка на входе в цикл!
40. Цикл с условием
40Цикл с условием
При известном количестве шагов:
k = 0;
while ( k < 10 )
{
printf ( "привет\n" );
k ++;
}
Зацикливание:
k = 0;
while ( k < 10 )
{
printf ( "привет\n" );
}
41. Сколько раз выполняется цикл?
41Сколько раз выполняется цикл?
a = 4; b = 6;
while ( a < b ) a = a + 1;
2 раза
a=6
a:= 4; b:= 6;
while ( a < b ) a = a + b;
1 раз
a = 10
a:= 4; b:= 6;
while ( a > b ) a ++;
0 раз
a=4
a:= 4; b:= 6;
while ( a < b ) b = a - b;
1 раз
b = -2
a:= 4; b:= 6;
while ( a < b ) a --;
зацикливание
42. Цикл с постусловием
42Цикл с постусловием
заголовок
цикла
do
тело цикла
{
printf("Введите n > 0: ");
scanf ( "%d", &n );
}
while ( n <= 0 );
условие
продолжения
• при входе в цикл условие не проверяется
• цикл всегда выполняется хотя бы один раз
43. 4. Операторы циклов
4.1. Цикл с предусловиемwhile (выражение-условие)
оператор;
Пример
a=1;s=0;
while (a!=0)
{
cin>>a;
s+=a;
}
44. 4.2. Цикл с постусловием
doоператор
while (выражение-условие);
Пример
s=0;
do
{
cin>>a;
s+=a;
}
while(a!=0);
45. Задачи
45Задачи
«A»: Напишите программу, которая получает два целых числа
A и B (0 < A < B) и выводит квадраты всех натуральных
чисел в интервале от A до B.
Пример:
Введите два целых числа:
10 12
10*10=100
11*11=121
12*12=144
«B»: Напишите программу, которая получает два целых числа и
находит их произведение, не используя операцию
умножения. Учтите, что числа могут быть отрицательными.
Пример:
Введите два числа:
10 -15
10*(-15)=-150
46. Задачи
46Задачи
«C»: Ввести натуральное число N и вычислить сумму
всех чисел Фибоначчи, меньших N. Предусмотрите
защиту от ввода отрицательного числа N.
Пример:
Введите число N:
10000
Сумма 17709
47. Задачи-2
47Задачи-2
«A»: Ввести натуральное число и найти сумму его цифр.
Пример:
Введите натуральное число:
12345
Сумма цифр 15.
«B»: Ввести натуральное число и определить, верно ли, что в
его записи есть две одинаковые цифры, стоящие рядом.
Пример:
Введите натуральное число:
12342
Нет.
Пример:
Введите натуральное число:
12245
Да.
48. Задачи-2
48Задачи-2
«C»: Ввести натуральное число и определить, верно ли,
что в его записи есть две одинаковые цифры (не
обязательно стоящие рядом).
Пример:
Введите натуральное число:
12342
Да.
Пример:
Введите натуральное число:
12345
Нет.
49. Цикл с переменной
49Цикл с переменной
Задача. Вывести все степени двойки от 21 до 210.
?
Можно ли сделать с циклом «пока»?
k = 1;
n = 2;
while ( k <= 10 )
{
printf("%d\n", n);
n *= 2;
k ++;
}
n = 2;
for( k=1; k<=10; k++ )
{
printf("%d\n", n);
n *= 2;
}
цикл с
переменной
50. Цикл с переменной: другой шаг
50Цикл с переменной: другой шаг
for ( k = 10; k >= 1; k-- )
printf( "%d\n", k*k );
?
Что получится?
for ( k = 1; k <= 10; k += 2 )
printf( "%d\n", k*k );
1
9
25
49
81
100
81
64
49
36
25
16
9
4
1
51. Сколько раз выполняется цикл?
51Сколько раз выполняется цикл?
a = 1;
for( i = 1; i <= 3; i++ ) a = a + 1;
a= 4
a = 1;
for( i = 3; i <= 1; i++ ) a = a + 1;
a= 1
a = 1;
for( i = 1; i <= 3; i-- ) a = a + 1;
a= 1
a = 1;
for( i = 3; i >= 1; i-- ) a = a + 1;
a= 4
52. Задачи
52Задачи
«A»: Найдите все пятизначные числа, которые при
делении на 133 дают в остатке 125, а при делении
на 134 дают в остатке 111.
«B»: Натуральное число называется числом
Армстронга, если сумма цифр числа, возведенных
в N-ную степень (где N – количество цифр в числе)
равна самому числу. Например, 153 = 13 + 53 + 33.
Найдите все трёхзначные Армстронга.
53. Задачи
53Задачи
«С»: Натуральное число называется автоморфным, если
оно равно последним цифрам своего квадрата.
Например, 252 = 625. Напишите программу, которая
получает натуральное число N и выводит на экран
все автоморфные числа, не превосходящие N.
Пример:
Введите N:
1000
1*1=1
5*5=25
6*6=36
25*25=625
76*76=5776
54. Вложенные циклы
54Вложенные циклы
Задача. Вывести все простые числа в диапазоне
от 2 до 1000.
сделать для n от 2 до 1000
если число n простое то
вывод n
нет делителей [2.. n-1]:
проверка в цикле!
?
Что значит «простое число»?
55. Вложенные циклы
55Вложенные циклы
for ( n = 2; n <= 1000; n ++ )
{
count = 0;
for ( k = 2; k < n; k ++ )
if ( n % k == 0 )
count ++;
if ( count == 0 )
printf("%d\n", n);
}
вложенный цикл
56. Вложенные циклы
56Вложенные циклы
for ( i = 1; i <= 4; i++ )
{
for ( k = 1; k <= i; k++ )
{
...
}
}
?
!
Как меняются переменные?
Переменная внутреннего
цикла изменяется быстрее!
1
2
2
3
3
3
4
4
4
4
1
1
2
1
2
3
1
2
3
4
57. Поиск простых чисел – как улучшить?
57Поиск простых чисел – как улучшить?
n k m, k m k 2 n k n
?
while( k <= sqrt(n) )
{
...
}
Что плохо?
count = 0;
k = 2;
Как ещё улучшить?
while ( k*k <= n )
{
if ( n % k == 0 ) count ++;
k ++;
0) ) {
while ( k*k <= n && (count
count == 0
}
...
?
}
58. Задачи
58Задачи
«A»: Напишите программу, которая получает натуральные
числа A и B (A<B) и выводит все простые числа в
интервале от A до B.
Пример:
Введите границы диапазона:
10 20
11 13 17 19
«B»: В магазине продается мастика в ящиках по 15 кг,
17 кг, 21 кг. Как купить ровно 185 кг мастики, не
вскрывая ящики? Сколькими способами можно это
сделать?
59. Задачи
59Задачи
«C»: Ввести натуральное число N и вывести все
натуральные числа, не превосходящие N и
делящиеся на каждую из своих цифр.
Пример:
Введите N:
15
1 2 3 4 5 6 7 8 9 11 12 15
60. 4.3. Цикл с параметром
for (выражение_1;выражение-условие;выражение_3)оператор;
•Выражение_1 – задает начальные значения для цикла (инициализация).
• Выражение-условие определяет условие выполнения цикла, если оно
не равно 0, цикл выполняется, а затем вычисляется значение
выражения_3.
•Выражение_3 – задает изменение параметра цикла или других
переменных (коррекция).
61.
Пример 1.for ( i=1;i<=10;i++) // Увеличение параметра
оператор;
Пример 2
for ( n=10; n>0; n--) // Уменьшение параметра
{
оператор;
}
Пример 3
for ( n=2; n<60; n+=13) // Изменение шага корректировки
{
оператор;
}
62.
Пример 4.//проверка условия отличного от того, которое налагается
//на число итераций
for ( num=1;num*num*num<216; num++)
{
оператор;
}
Пример 5.
//коррекция с помощью умножения
for ( d=100.0; d<150.0;d*=1.1)
{
оператор;
}
63.
Пример 6//коррекция с помощью арифметического выражения
for (x=1;y<=75;y=5*(x++)+10)
{
оператор;
}
Пример 7
//использование нескольких корректирующих
//выражений, тело цикла отсутствует
for (x=1, y=0; x<10;x++,y+=x);
64. Примеры решения задач
• Задача №1.Определить,
попадет ли точка с
координатами (х, у )
в заштрихованную
область.
65.
#include <iostream>#include <cmath>
using namespace std;
void main()
{
float x,y;
cout<<"\nEnter x,y";
cin>>x>>y;
bool Ok=(y>=-x+1&& y<=2/3*x+2 && x>=0 && y>=0) ||
(pow(x,2)+pow(y,2)>=1 && pow(x,2)+pow(y,2)<=9 && x<=0) ||
(x>=0 && x<=1 && y<=-1 && y>=-3) ||
(x>=1 && x<=2 && y<=0 && y>=-3);
cout<<"\n"<<Ok;
}
66.
• Задача №2. Дана последовательностьцелых чисел из n элементов. Найти
среднее арифметическое этой
последовательности.
67.
#include <iostream>using namespace std;
void main()
{
int a,n,i;
double s=0;
cout<<"\nEnter n";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"\nEnter a";
cin>>a;
s+=a;
}
s=s/n;
cout<<"\nсреднее арифметическое равно="<<s<<"\n";
}
68.
• Задача №3. Дана последовательностьцелых чисел, за которой следует 0.
Найти минимальный элемент этой
последовательности.
69.
//вариант программы №1#include <iostream>
using namespace std;
void main()
{
int a,min;
cout<<"\nEnter a";
cin>>a;
min=a;
while(a!=0)
{
cout<<"\nEnter a";
cin>>a;
if (a!=0&&a<min) min=a;
}
cout<<"\nmin="<<min<<"\n";
}
70.
//вариант программы №2#include <iostream>
using namespace std;
void main()
{
int a,min;
cout<<"\nEnter a";
cin>>a;
min=a;
do
{
cout<<"\nEnter a";
cin>>a;
if (a==0)break;
if (a<min) min=a;
}
while(1);
cout<<"\nmin="<<min<<"\n";
}
71.
//вариант программы №3#include <iostream>
using namespace std;
void main()
{
int a,min;
cout<<"\nEnter a";
cin>>a;
min=a;
for(;a!=0;)
{
cout<<"\nEnter a";
cin>>a;
if (a!=0&&a<min) min=a;
}
cout<<"\nmin="<<min<<"\n";
}