Рассмотрим подробнее структуру алгоритма «развилка».
Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма.
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Чаще всего для проверки условия используется условный оператор if.
Условный оператор if
Условный оператор if может использоваться в форме полной или неполной развилки.
Неполная развилка | Полная развилка |
1 2 3 4 if (Условие) { БлокОпераций1; } |
1 2 3 4 5 6 7 8 if (Условие) { БлокОпераций1; } else { БлокОпераций2; } |
![]() |
![]() |
В случае неполной развилки если Условие истинно, то БлокОпераций1 выполняется, если Условие ложно, то БлокОпераций1 не выполняется.
В случае полной развилки если Условие истинно, то выполняется БлокОпераций1, иначе выполняется БлокОпераций2.
БлокОпераций может состоять из одной операции. В этом случае наличие фигурных скобок, ограничивающих блок, необязательно.
Основными операциями, проверяемыми внутри условного блока, являются операции отношения.
Пример на C:
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
int k; // объявляем целую переменную k
printf("k= "); // выводим сообщение
scanf("%d", &k); // вводим переменную k
if (k >= 5) // если k>5
printf("%d >= 5", k); // выводим "ЗНАЧЕНИЕ >= 5"
else // иначе
printf("%d < 5", k); // выводим "ЗНАЧЕНИЕ < 5"
getchar(); getchar();
return 0;
}
Результат выполнения

Оператор if может быть вложенным.
Пример на C:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h> // для использования функции system
int main() {
int key; // объявляем целую переменную key
system("chcp 1251"); // переходим в консоли на русский язык
system("cls"); // очищаем окно консоли
printf("Введите номер пункта, 1 или 2: ");
scanf("%d", &key); // вводим значение переменной key
if (key == 1) // если key = 1
printf("\n Выбран первый пункт"); // выводим сообщение
else if (key == 2) // иначе если key = 2
printf("\n Выбран второй пункт"); // выводим сообщение
else // иначе
printf("\n Первый и второй пункты не выбраны"); // выводим сообщение
getchar(); getchar();
return 0;
}
Результат выполнения
При использовании вложенной формы оператора if опция else связывается с последним оператором if. Если требуется связать опцию else с предыдущим оператором if, внутренний условный оператор заключается в фигурные скобки:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h> // для использования функции system
int main() {
int key; // объявляем целую переменную key
system("chcp 1251"); // переходим в консоли на русский язык
system("cls"); // очищаем окно консоли
printf("Введите номер пункта, 1 или 2: ");
scanf("%d", &key); // вводим значение переменной key
if (key != 1) { // если key не равен 1
if (key == 2) // если key равен 2
printf("\n Выбран второй пункт"); // вывод сообщения
} // если key - не 1 и не 2, то ничего не выводится
else // иначе, если key равен 1
printf("\n Выбран первый пункт"); // вывод сообщения
getchar(); getchar();
return 0;
}
Результат выполнения



Логические операции в условных операторах
Условный оператор может проверять
- одновременное выполнение всех условий (операция И - &&)
- выполнение хотя бы одного из условий (операция ИЛИ - ||)
- выполнение только одного из условий (операция исключающее ИЛИ - ^)
Пример на Си: Найти максимум из 3 чисел
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
int a, b, c;
printf("a=");
scanf("%d", &a);
printf("b=");
scanf("%d", &b);
printf("c=");
scanf("%d", &c);
if ((a >= b) && (a >= c))
printf("Max = %d", a);
else if ((b >= a) && (b >= c))
printf("Max = %d", b);
else
printf("Max = %d", c);
getchar();
getchar();
return 0;
}
Пример на С++: Найти максимум из 3 чисел
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using namespace std;
int main()
{
int a, b, c;
cout << "a=";
cin >> a;
cout << "b=";
cin >> b;
cout << "c=";
cin >> c;
if ((a >= b) && (a >= c))
cout << "Max = " << a;
else if ((b >= a) && (b >= c))
cout << "Max = " << b;
else
cout << "Max = " << c;
cin.get();
cin.get();
return 0;
}
Тернарные операции
Тернарная условная операция имеет 3 аргумента и возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Синтаксис тернарной операции в языке Си
Если выполняется Условие, то тернарная операция возвращает Выражение1, в противном случае - Выражение2.
Тернарные операции, как и операции условия, могут быть вложенными. Для разделения вложенных операций используются круглые скобки.
Приведенный выше пример с использованием тернарных операций можно представить в виде
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h> // для использования функции system
int main() {
int key; // объявляем целую переменную key
system("chcp 1251"); // переходим в консоли на русский язык
system("cls"); // очищаем окно консоли
printf("Введите номер пункта, 1 или 2: ");
scanf("%d", &key); // вводим значение переменной key
key == 1 ? printf("\n Выбран первый пункт") :
(key == 2 ? printf("\n Выбран второй пункт") :
printf("\n Первый и второй пункты не выбраны"));
getchar(); getchar();
return 0;
}
Оператор ветвления switch (оператор множественного выбора)
Оператор if позволяет осуществить выбор только между двумя вариантами. Для того, чтобы производить выбор одного из нескольких вариантов необходимо использовать вложенный оператор if. С этой же целью можно использовать оператор ветвления switch.
Общая форма записи
{
case Константа1: БлокОпераций1;
break;
case Константа2: БлокОпераций2;
break;
. . .
case Константаn: БлокОперацийn;
break;
default: БлокОперацийПоУмолчанию;
break;
}
Оператор ветвления switch выполняется следующим образом:
- вычисляется ЦелоеВыражение в скобках оператора switch;
- полученное значение сравнивается с метками (Константами) в опциях case, сравнение производится до тех пор, пока не будет найдена метка, соответствующая вычисленному значению целочисленного выражения;
- выполняется БлокОпераций соответствующей метки case;
- если соответствующая метка не найдена, то выполнится БлокОперацийПоУмолчанию, описанный в опции default.
Альтернатива default может отсутствовать, тогда не будет произведено никаких действий.
Опция break; осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии опции break будут выполняться все операторы, начиная с помеченного данной меткой и кончая оператором в опции default.
Константы в опциях case должны быть целого типа (могут быть символами).
Пример: Вывести день недели по его номеру
Назад: Язык Си
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <Windows.h>
#include <stdio.h>
struct phone
{
char brend[20];
char colour[20];
char model[20];
int price, memory;
};
void fil(struct phone mash);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
struct phone a[5];
for (int i = 0; i < 5; i++)
{
printf("Введіть бренд, ціна, колір, пам’ять, модель. \n");
scanf("%s %d %s %d %s", a[i].brend, &a[i].price, a[i].colour, &a[i].memory, a[i].model);
}
printf("На складі є такі мобільні телефони: \n");
for (int i = 0; i < 5; i++)
{
printf("Бренд[%s],ціна [%d],колір[%s],пам'ять[%d],модель[%s] \n", a[i].brend, a[i].price, a[i].colour, a[i].memory, a[i].model);
}
printf("найбільше телефонів за кольором\n");
for (int i = 0; i < 5; i++)
fil(a[i]);
return 0;
}
void fil(struct phone mash)
{
printf("Бренд[%s],ціна [%d],колір[%s],пам'ять[%d],модель[%s] \n", mash.brend,mash.price,mash.colour,mash.memory,mash.model);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <conio.h>
#include <math.h>
int main()
{
system("chcp 1251");
int i=0, j, m, n, k;
//заполнение квадратного массива с клавиатуры
printf("Enter size: \n");
scanf("%d", &m);
printf("Enter shift: \n");
scanf("%d", &n);
printf("Enter 0 right or 1 down : \n");
scanf("%d", &k);
if (n>m){
n = n-m*(int(n/m));}
int a[100][100], b[100][100];
for (i = 0; i < m; i++)
{
printf("Enter ", i + 1 " line\n");
for (j = 0; j < m; j++)
{
printf("Enter matrix element: \n");
scanf("%d", &a[i][j]);
}
}
//вывод массива на экран
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
printf("%5d ", a[i][j]);
printf("\n");
}
printf("\n");
if ((k==0) || (k==1))
{
if (k==0)
{
// Блок A формирование нового массива со сдвигом враво
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
b[i][j]=a[i][m-n+j];
for (i = 0; i <m; i++)
for (j = n; j < m; j++)
b[i][j]=a[i][j-n];
}
if (k==1)
{
// Блок B формирование нового массива со сдвигом вниз
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
b[i][j]=a[m-n+i][j];
for (i = n; i <m; i++)
for (j = 0; j < m; j++)
b[i][j]=a[i-n][j];
}
// вывод нового массива на экран
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
printf("%5d ", b[i][j]);
printf("\n");
}
}
else printf("Input Error");
system("pause");
return 0;
}
d1 = num%10;
d2 = (num/10)%10;
d3 = (num/100)%10;
d4 = num/1000;
Сложить попарно и сравнить суммы.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void amPm (float hour);
int main()
{
amPm(01.60);//проверка
return 0;
}
void amPm (float hour)
{
if (hour < 00.00 || hour > 23.00)
{
printf("Error! Wrong hour \n");
return;
}
if (hour < 12.00)
{
printf("Appropriate time has been introduced am \n");
return;
}
else
{
printf("Appropriate time has been introduced pm\n");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <conio.h>
#include <math.h>
int main ()
{
double x,y;
if (x<0) {printf("y=4*pow(x,5)+5*pow(x,4)-2*x+7");}
else { if (x=0)
{printf("y=2000");} }
else {
if (x>0)
{printf("y=5*pow(x,4)-2*x+7");}
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <conio.h>
#include <math.h>
int main ()
{
double x,y;
if (x<0) {
y=4*pow(x,5)+5*pow(x,4)-2*x+7;}
else if (x==0)
{y=2000;}
else
{y=5*pow(x,4)-2*x+7;}
printf("%lf",y);
return 0;
}
2
3
4
5
{if (num1> num2)
Console.WriteLine (num1 + «больше, чем» + num2);
2
3
иначе Console.WriteLine (num1 + «равно» + num2);
2
3
4
5
6
7
8
9
10
11
{if (num1> num2) //15>40
Console.WriteLine (num1 + «больше, чем» + num2);
else
Console.WriteLine (num1 + «меньше чем» + num2); }
иначе Console.WriteLine (num1 + «равно» + num2);
2
3
4
5
6
7
8
9
{...}
else
{
if(...)
{...}
else
{...}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main()
{
int age;
int mounth;
int total;
char answer;
printf("\t\tСколько вам лет? ");
scanf("%d", &age);
//пользователь вносит переменную age
printf("\t\tСколько месяцев вам уже %d лет? ", age);
scanf("%d", &mounth);
total = age * 365 + mounth * 31;
printf("\t\tВы живете около %d дней \n \n", total);
if(age >= 30)
printf("\t\tсообщение 1 \n \n");
//с помощью функции отделил неполную
//развилку от полной
if(age < 30)
{
printf("\t\tвопрос? Y / N ");
scanf("%s", &answer);
if(answer == 'Y')
printf("\t\tХорошо!\n\n");
else
printf("\t\tПлохо!\n\n");
}
return 0;
}
2
3
4
{
setlocale(LC_ALL, "rus");
}