Основы программирования. Управление: IF, GOTO, DO WHILE, WHILE, RETURN, CONTINUE, BREAK, SWITCH

Содержание

Слайд 2

Где прочитать про управление в Си?

http://givi.olnd.ru/kr2/index.html - Б. Керниган, Д. Ритчи. Язык

Где прочитать про управление в Си? http://givi.olnd.ru/kr2/index.html - Б. Керниган, Д. Ритчи.
программирования Си
http://givi.olnd.ru/kr2/03.html - Глава 3. Управление
Глава 3. Управление
3.1. Инструкции и блоки
3.2. Конструкция if-else
3.3. Конструкция else-if
3.4. Переключатель
3.5. Циклы while и for
3.6. Цикл do-while
3.7. Инструкции break и continue
3.8. Инструкция goto и метки

Слайд 3

Простейшая программа (естественно, на Си)

#include
void main() {
printf("main() start\n");
printf("main() finish\n");
}

Функция main() -

Простейшая программа (естественно, на Си) #include void main() { printf("main() start\n"); printf("main()
точка входа в программу.

Слайд 4

Простейший цикл DO WHILE

#include
void main() {
printf("main() start\n");
int a =

Простейший цикл DO WHILE #include void main() { printf("main() start\n"); int a
1;
do {
printf("%d ", a);
a = a + 1;
} while (a <= 10);
printf("\nmain() finish\n");
}

Вывод чисел от 1 до 10 - через DO WHILE

Слайд 5

Знакомство с GOTO

#include
void main() {
printf("main() start\n");
int a = 1;
//do {
label_do:
printf("%d ",

Знакомство с GOTO #include void main() { printf("main() start\n"); int a =
a);
a = a + 1;
//} while (a <= 10);
if (a <= 10) goto label_do;
printf("\nmain() finish\n");
}

Вывод чисел от 1 до 10 - через GOTO (эмуляция DO WHILE)

Слайд 6

Простейший цикл WHILE

#include
void main() {
printf("main() start\n");
int a = 1;
while (a <=

Простейший цикл WHILE #include void main() { printf("main() start\n"); int a =
10) {
printf("%d ", a);
a = a + 1;
}
printf("\nmain() finish\n");
}

Вывод чисел от 1 до 10 - через WHILE

Слайд 7

GOTO vs WHILE

#include
void main() {
printf("main() start\n");
int a = 1;
// while (a

GOTO vs WHILE #include void main() { printf("main() start\n"); int a =
<= 10) {
label_while:
if (a <= 10) {
printf("%d ", a);
a = a + 1;
goto label_while;
}
printf("\nmain() finish\n");
}

Вывод от 1 до 10 - через GOTO (эмуляция WHILE)

Слайд 8

WHILE

#include
void main() {
printf("main() start\n");
int a = 2000;
while (a <= 2030) {
printf("%d

WHILE #include void main() { printf("main() start\n"); int a = 2000; while
", a);
a = a + 1;
}
printf("\nmain() finish\n");
}

Вывод 2000 2001 2002 2003 ... 2030 - через WHILE

Слайд 9

WHILE vs WHILE

#include
void main() {
printf("main() start\n");
int a = 2000;
while (a <=

WHILE vs WHILE #include void main() { printf("main() start\n"); int a =
2030) {
printf("%d ", a);
a = a + 1;
}
printf("\nmain() finish\n");
}

Вывод 2000 2001 2002 2003 ... 2030 - через WHILE – двумя разными способами

#include
void main() {
printf("main() start\n");
int a = 1999;
while (a < 2030) {
a = a + 1;
printf("%d ", a);
}
printf("\nmain() finish\n");
}

Слайд 10

CONTINUE

#include
void main() {
printf("main() start\n");
int a = 1999;
while (a < 2030) {
a

CONTINUE #include void main() { printf("main() start\n"); int a = 1999; while
= a + 1;
if (a % 4 == 0)
continue;
printf("%d ", a);
}
printf("\nmain() finish\n");
}

Вывод 2000 2001 2002 2003 ... 2030 - только НЕВИСОКОСНЫЕ

Слайд 11

WHILE & CONTINUE vs GOTO

#include
void main() {
printf("main() start\n");
int a = 1999;
while

WHILE & CONTINUE vs GOTO #include void main() { printf("main() start\n"); int
(a < 2030) {
a = a + 1;
if (a % 4 == 0)
goto label_body_end;
printf("%d ", a);
label_body_end:;
}
printf("\nmain() finish\n");
}

Вывод 2000 2001 2002 2003 ... 2030 - только НЕВИСОКОСНЫЕ

Слайд 12

WHILE & CONTINUE vs GOTO (2)

#include
void main() {
printf("main() start\n");
int a =

WHILE & CONTINUE vs GOTO (2) #include void main() { printf("main() start\n");
1999;
while (a < 2030) {
a = a + 1;
if (a % 4 == 0)
goto label_body_end;
printf("%d ", a);
label_body_end:;
}
printf("\nmain() finish\n");
}

Вывод 2000 2001 2002 2003 ... 2030 - только НЕВИСОКОСНЫЕ

#include
void main() {
printf("main() start\n");
int a = 1999;
label_while:
if (a < 2030) {
a = a + 1;
if (a % 4 == 0)
goto label_body_end;
printf("%d ", a);
label_body_end:
goto label_while;
}
printf("\nmain() finish\n");
}

Слайд 13

WHILE & CONTINUE vs GOTO (3)

Вывод 2000 2001 2002 2003 ... 2030

WHILE & CONTINUE vs GOTO (3) Вывод 2000 2001 2002 2003 ...
- только НЕВИСОКОСНЫЕ

#include
void main() {
printf("main() start\n");
int a = 1999;
label_while:
if (a < 2030) {
a = a + 1;
if (a % 4 == 0)
goto label_body_end;
printf("%d ", a);
label_body_end:
goto label_while;
}
printf("\nmain() finish\n");
}

Слайд 14

RETURN

#include
void main() {
int num = 44;
int del = 2;
while (del <

RETURN #include void main() { int num = 44; int del =
num) {
// если num нацело делится на del
if (num % del == 0) {
// если есть иные делители, кроме 1 и num -
// то число num не простое!
printf("Number %d is not a prime\n", num);
return;
}
del++;
}
printf("Number %d is a prime\n", num);
return;
}

Выясняем является ли число num простым (=prime) или является составным (=composite)

Слайд 15

RETURN (2)

#include
void main() {
int num = 44;
int del = 2;
while (del

RETURN (2) #include void main() { int num = 44; int del
< num) {
// если num нацело делится на del
if (num % del == 0) {
// если есть иные делители, кроме 1 и num -
// то число num не простое!
printf("Number %d is not a prime\n", num);
return;
}
del++;
}
printf("Number %d is a prime\n", num);
return;
}

Выясняем является ли число num простым (=prime) или является составным (=composite)

Слайд 16

RETURN (3)

#include
void main() {
int num = 44;
int del = 2;
while (del

RETURN (3) #include void main() { int num = 44; int del
< num) {
// если num нацело делится на del
if (num % del == 0) {
// если есть иные делители, кроме 1 и num -
// то число num не простое!
printf("Number %d is not a prime\n", num);
return;
}
del++;
}
printf("Number %d is a prime\n", num);
// return;
}

Выясняем является ли число num простым (=prime) или является составным (=composite)

Слайд 17

RETURN vs GOTO (1)

#include
void main() {
int num = 44;
int del =

RETURN vs GOTO (1) #include void main() { int num = 44;
2;
while (del < num) {
// если num нацело делится на del
if (num % del == 0) {
// если есть иные делители, кроме 1 и num -
// то число num не простое!
printf("Number %d is not a prime\n", num);
goto label_end;
}
del++;
}
printf("Number %d is a prime\n", num);
label_end:;
}

Выясняем является ли число num простым (=prime) или является составным (=composite)

Слайд 18

RETURN vs GOTO (2)

#include
void main() {
int num = 44;
int del =

RETURN vs GOTO (2) #include void main() { int num = 44;
2;
while (del < num) {
// если num нацело делится на del
if (num % del == 0) {
// если есть иные делители, кроме 1 и num -
// то число num не простое!
printf("Number %d is not a prime\n", num);
goto label_end;
}
del++;
}
printf("Number %d is a prime\n", num);
label_end:;
}

Выясняем является ли число num простым (=prime) или является составным (=composite)

Слайд 19

RETURN со значением (1)

#include
// Возвращает 1 - если число num "ПРОСТОЕ"

RETURN со значением (1) #include // Возвращает 1 - если число num

// (делится только на 1 и на само себя)
// Возвращает 0 в противном случае.
int isPrime(int num) {
int del = 2;
while (del < num) {
// если num нацело делиться на del
if (num % del == 0) {
// возвращаем 0, т.к. число не простое
return 0;
}
del++;
}
// возвращаем 1, т.к. ни одно число от 2 до num-1
// не является делителем
return 1;
}

Выясняем является ли число num простым (=prime) или является составным (=composite). Реализация через отдельную функцию.

Слайд 20

RETURN со значением (1.1)

#include
// Возвращает 1 - если число num "ПРОСТОЕ"

RETURN со значением (1.1) #include // Возвращает 1 - если число num

// (делится только на 1 и на само себя)
// Возвращает 0 в противном случае.
int isPrime(int num) {
int del = 2;
while (del < num) {
// если num нацело делиться на del
if (num % del == 0) {
// возвращаем 0, т.к. число не простое
return 0;
}
del++;
}
// возвращаем 1, т.к. ни одно число от 2 до num-1
// не является делителем
return 1;
}

Выясняем является ли число num простым (=prime) или является составным (=composite). Реализация через отдельную функцию.

Слайд 21

RETURN со значением (2)

void main() {
int num = 30;
if (isPrime(num))
printf("Number %d

RETURN со значением (2) void main() { int num = 30; if
is a prime\n", num);
else
printf("Number %d is not a prime\n", num);
}

Выясняем является ли число num простым (=prime) или является составным (=composite). Реализация через отдельную функцию.

Слайд 22

Вызов функции в WHILE

void main() {
int n = 10;
int a = 1;
int

Вызов функции в WHILE void main() { int n = 10; int
i = 0;
while (i < n) {
if (isPrime(a)) {
printf("%d ", a);
i++;
}
a++;
}
}

вывести N первых простых чисел

Слайд 23

Бесконечный WHILE и выход из него

void main() {
int num = 10010;
while (1)

Бесконечный WHILE и выход из него void main() { int num =
{
if (isPrime(num)) {
printf("%d ", num);
break;
}
num++;
}
}

вывести ровно одно простое число не меньше заданного num

Слайд 24

BREAK vs GOTO (1)

void main() {
int num = 20;
while (1) {
if (isPrime(num))

BREAK vs GOTO (1) void main() { int num = 20; while
{
printf("%d ", num);
break;
}
num++;
}
}

вывести ровно одно простое число не меньше заданного num

void main() {
int num = 20;
while (1) {
if (isPrime(num)) {
printf("%d ", num);
goto while_after;
}
num++;
}
while_after:;
}

Слайд 25

BREAK vs GOTO (2)

вывести ровно одно простое число не меньше заданного num

void

BREAK vs GOTO (2) вывести ровно одно простое число не меньше заданного
main() {
int num = 20;
while (1) {
if (isPrime(num)) {
printf("%d ", num);
goto while_after;
}
num++;
}
while_after:;
}

Слайд 26

BREAK vs RETURN (1)

void main() {
printf("main() start\n");
int num = 20;
while (1) {
if

BREAK vs RETURN (1) void main() { printf("main() start\n"); int num =
(isPrime(num)) {
printf("%d ", num);
break;
}
num++;
}
printf("\nmain() finish\n");
}

вывести ровно одно простое число не меньше заданного num

void main() {
printf("main() start\n");
int num = 20;
while (1) {
if (isPrime(num)) {
printf("%d ", num);
goto while_after;
}
num++;
}
while_after:
printf("main() finish\n");
}

Слайд 27

BREAK vs RETURN (2)

void main() {
printf("main() start\n");
int num = 20;
while (1) {
if

BREAK vs RETURN (2) void main() { printf("main() start\n"); int num =
(isPrime(num)) {
printf("%d ", num);
break;
}
num++;
}
printf("\nmain() finish\n");
}

вывести ровно одно простое число не меньше заданного num

Слайд 28

BREAK vs RETURN (3)

void main() {
printf("main() start\n");
int num = 20;
while (1) {
if

BREAK vs RETURN (3) void main() { printf("main() start\n"); int num =
(isPrime(num)) {
printf("%d ", num);
break;
}
num++;
}
printf("\nmain() finish\n");
}

вывести ровно одно простое число не меньше заданного num

void main() {
printf("main() start\n");
int num = 20;
while (1) {
if (isPrime(num)) {
printf("%d ", num);
return;
}
num++;
}
printf("\nmain() finish\n");
}

Слайд 29

BREAK vs RETURN (4)

вывести ровно одно простое число не меньше заданного num

void

BREAK vs RETURN (4) вывести ровно одно простое число не меньше заданного
main() {
printf("main() start\n");
int num = 20;
while (1) {
if (isPrime(num)) {
printf("%d ", num);
return;
}
num++;
}
printf("\nmain() finish\n");
}

Слайд 30

SWITCH (1)

#include
#include
void main() {
printf("main() start\n");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n;
printf("Введите номер дня недели:\n");
printf("1: ПН\n");
printf("2:

SWITCH (1) #include #include void main() { printf("main() start\n"); SetConsoleCP(1251); SetConsoleOutputCP(1251); int
ВТ\n");
printf("и так далее\n");
scanf_s("%d", &n);

Ввести номер дня недели - вывести его название

Слайд 31

SWITCH (2)

switch (n) {
case 1:
printf("Вы ввели ПН\n");
break;
case 2:
printf("Вы ввели ВТ\n");
break;
case 3:
printf("Вы ввели

SWITCH (2) switch (n) { case 1: printf("Вы ввели ПН\n"); break; case
СР\n");
break;
case 4:
printf("Вы ввели ЧТ\n");
break;
case 5:
printf("Вы ввели ПТ\n");
break;

Ввести номер дня недели - вывести его название

case 6:
printf("Вы ввели СБ\n");
break;
case 7:
printf("Вы ввели ВС\n");
break;
default:
printf("Вы ввели неверное число\n");
break;
}
printf("\nmain() finish\n");
}

Слайд 32

SWITCH (3)

switch (n) {
case 1:
printf("Вы ввели ПН\n");
break;
case 2:
printf("Вы ввели ВТ\n");
break;
case 3:
printf("Вы ввели

SWITCH (3) switch (n) { case 1: printf("Вы ввели ПН\n"); break; case
СР\n");
break;
case 4:
printf("Вы ввели ЧТ\n");
break;
case 5:
printf("Вы ввели ПТ\n");
break;
case 6:
printf("Вы ввели СБ\n");
break;
case 7:
printf("Вы ввели ВС\n");
break;
default:
printf("Вы ввели неверное число\n");
break;
}
printf("\nmain() finish\n");
}

Ввести номер дня недели - вывести его название

Слайд 33

SWITCH в Win приложении

SWITCH в Win приложении

Слайд 34

SWITCH в Win приложении (2)

SWITCH в Win приложении (2)

Слайд 35

Реализация консольного меню при помощи SWITCH (1)

Заготовка для ЛР10 и ЛР11 –

Реализация консольного меню при помощи SWITCH (1) Заготовка для ЛР10 и ЛР11
меню выбора действия пользователя (консоль)

Слайд 36

Реализация консольного меню при помощи SWITCH (2)

void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n;
do {
printf("\n");
printf("\n");
printf("Выберите нужную

Реализация консольного меню при помощи SWITCH (2) void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251);
вам операцию:\n");
printf("1: Вывести числа от 1 до 10\n");
printf("2: Вывести числа от 10 до 1\n");
printf("3: Вывести 5 первых нечетных чисел начиная с 1\n");
printf("\n");
printf("0: Выйти из программы\n");
scanf_s("%d", &n);

Заготовка для ЛР10 и ЛР11 – меню выбора действия пользователя (консоль)

Слайд 37

Реализация консольного меню при помощи SWITCH (3)

switch (n) {
case 1:
print1_10();
break;
case 2:
print10_1();
break;
case 3:
print5Odds();
break;
}
}

Реализация консольного меню при помощи SWITCH (3) switch (n) { case 1:
while (n != 0);
}

Заготовка для ЛР10 и ЛР11 – меню выбора действия пользователя (консоль)

Слайд 39

Лабораторная работа №10

Консольное меню и циклические задачи
(DO WHILE)

Лабораторная работа №10 Консольное меню и циклические задачи (DO WHILE)

Слайд 40

Задача 1. Сделать меню для управления

Программа должна выводить числа от 1 до

Задача 1. Сделать меню для управления Программа должна выводить числа от 1
10 - если пользователь выбрал '1'
Программа должна выводить числа от 10 до 1 - если пользователь выбрал '2'
Программа должна выводить 5 первых нечетных чисел - если пользователь выбрал '3'
Программа должна завершаться - если пользователь выбрал '0'

void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n;
do {
printf("\n");
printf("\n");
printf("Выберите нужную вам операцию:\n");
printf("1: Вывести числа от 1 до 10\n");
printf("2: Вывести числа от 10 до 1\n");
printf("3: Вывести 5 первых нечетных чисел начиная с 1\n");
printf("\n");
printf("0: Выйти из программы\n");
scanf_s("%d", &n);
switch (n) {
case 1:
print1_10();
break;
case 2:
print10_1();
break;
case 3:
print5Odds();
break;
}
} while (n != 0);
}

Слайд 41

Задача 2. Добавить пункт меню ‘4’

Если пользователь выбрал ‘4’, то нужно вывести

Задача 2. Добавить пункт меню ‘4’ Если пользователь выбрал ‘4’, то нужно
10 первых четных чисел.

Слайд 42

Задача 3. Добавить пункт меню ‘5’

Если пользователь выбрал ‘5’, то нужно вывести

Задача 3. Добавить пункт меню ‘5’ Если пользователь выбрал ‘5’, то нужно
10 первых чисел ряда 10 20 30 … .

Слайд 43

Задача 4. Добавить пункт меню ‘6’

Если пользователь выбрал ‘6’, то нужно вывести

Задача 4. Добавить пункт меню ‘6’ Если пользователь выбрал ‘6’, то нужно
10 первых чисел ряда 100 200 300 … .

Слайд 44

Задача 5*. Добавить пункт меню ‘7’

Если пользователь выбрал ‘7’, то нужно вывести

Задача 5*. Добавить пункт меню ‘7’ Если пользователь выбрал ‘7’, то нужно
11 первых чисел ряда 1 2 4 8 16 32 … .

Слайд 45

Домашнее задание по ЛР10

Доделать задачи 1-4.
Добавить в меню пункт «Вывести 11 первых

Домашнее задание по ЛР10 Доделать задачи 1-4. Добавить в меню пункт «Вывести
чисел ряда 1 3 9 27 81 … » (каждый следующий больше предыдущего в 3 раза
* Каждую задачу из ЛР6 (цикл DO WHILE) добавить как отдельный пункт меню.
** Реализовать две-три задачи вместо DO WHILE через IF GOTO
Обязательно! Принести получившийся код на занятие. Его будем использовать и переделывать на следующих лабораторных работах.

Слайд 46

ИТОГО по ЛР10

Научились создавать меню.

ИТОГО по ЛР10 Научились создавать меню.

Слайд 48

Лабораторная работа №11

Цикл WHILE

Лабораторная работа №11 Цикл WHILE

Слайд 49

Задача 1. Добавить вычисления через WHILE

Продолжаем работать с кодом, созданным в ЛР10.
Если

Задача 1. Добавить вычисления через WHILE Продолжаем работать с кодом, созданным в
пользователь выбрал ‘11’, то вывести числа от 100 до 10 с шагом 10. Реализовать это вычисление через WHILE.

Слайд 50

Задача 2. 1000 900 800 … 100

Добавить пункт меню ‘12’. Если пользователь

Задача 2. 1000 900 800 … 100 Добавить пункт меню ‘12’. Если
выбрал ‘12’, то вывести числа от 1000 до 100 с шагом 100. Реализовать это вычисление через WHILE.

Слайд 51

Задача 3. Все пункты с 1 до 10 переделать в WHILE

Переделать все

Задача 3. Все пункты с 1 до 10 переделать в WHILE Переделать
функции, реализованные через DO WHILE в WHILE.
Проверить, что все пункты меню корректно работают.

Слайд 52

Задача 4*. Рост суммы на счете

Добавить пункт меню ‘13’. Если пользователь выбрал

Задача 4*. Рост суммы на счете Добавить пункт меню ‘13’. Если пользователь
‘13’, то вывести состояние счета, на котором изначально было S рублей, при ставке N% годовых. Нужно вывести изменение счета за 10 лет.

Слайд 53

Домашнее задание ЛР11

Доделать задачи 1-3, которые не успели сделать на занятии в

Домашнее задание ЛР11 Доделать задачи 1-3, которые не успели сделать на занятии
классе.
Добавьте пункт меню ‘20’ выводящий числа от 1000 до 0 с шагом N. Реализовать вычисление через WHILE. N = номеру вашего варианта/порядкового номера в журнале.
*Добавьте пункт меню ‘21’, выводящий N первых факториалов (1 2 6 24 120 720 …). N вводится с клавиатуры.
** Добавить пункт при помощи которого вывести первые N чисел Фибоначчи. N вводится с клавиатуры.
** Добавить пункт при помощи которого вывести разложение числа N на простые множители. N вводится с клавиатуры.
** Несколько задач вместо WHILE реализовать через IF GOTO
Для трех (любых) функций, использующих WHILE, нарисуйте блок-схемы.

Слайд 54

ИТОГО по ЛР11

Познакомились с WHILE

ИТОГО по ЛР11 Познакомились с WHILE