- •3 Программирование разветвляющихся алгоритмов
- •3.1 Понятие разветвляющегося алгоритма и программы
- •3.2 Операторы управления разветвляющимся вычислительным процессом
- •3.2.1 Логические выражения
- •3.2.2 Оператор if
- •If (выражение) оператор1;
- •If (выражение ) оператор1; else опертор2;
- •3.2.3 Примеры программирования
- •Тесты к задаче 1.2
- •3.2.4 Выбор из большого числа вариантов
- •4 Программирование циклических алгоритмов
- •4.1 Понятие цикла
- •Различают циклы с предусловием и циклы с постусловием.
- •В циклах с предусловием условие повторения цикла проверяется раньше, чем выполняется тело цикла, поэтому возможно, что цикл не выполнится ни разу.
- •В циклах с постусловием условие повторения цикла проверяется после выполнения тела цикла и подготовки данных для очередного шага цикла, поэтому цикл выполняется всегда хотя бы один раз.
- •В общем виде циклы с предусловием и постусловием графически можно изобразить, как показано на рис.4.1.
- •4.2 Программирование цикла с заранее известным числом повторений
- •4.3 Программирование цикла с заранее неизвестным числом повторений
- •4.3.1 Оператор цикла while
- •4.3.2 Оператор цикла do-while
- •4.4 Вложенные циклы
3.2.3 Примеры программирования
разветвляющихся алгоритмов
З
Рис.
3.2
D
- заштрихованная область
Вычислить значение z, заданное формулой
Решение. Из рис. 3.2 видно, что область
D является объединением двух областей – квадрата со стороной, равной 1, и части круга с радиусом, равным 1. Следовательно, условие (x,y)Î D состоит в том, что точка с координатами (x,y) принадлежит квадрату или сегмента круга. Условие принадлежности точки квадрату, изображенному на рис. 1.2, можно записать в виде логического выражения
x>=-1 && x<=0 && y<=1 && y>=0, (2)
а условие принадлежности точки сегменту – в виде логического выражения
x>=0 && x<=1 && y>=-1 && y<=0 && x*x+y*y<=1 (3)
Объединив выражения (2) и (3) знаком логической операции || (ИЛИ), получим логическое выражение, соответствующее условию (x,y)Î D, которое затем используем в операторе if- else.
Графическая схема алгоритма решения задачи изображена на рис. 3.3. Алгоритм содержит ветвление, на каждой ветви которого имеется лишь по одной команде. Программируется такое ветвление с помощью оператора if- else.
/* Текст программы */
#include <stdio.h>
#include <math.h>
main()
{ float x,y,z;
puts("Введите координаты точки (x,y)");
scanf("%f %f",&x,&y);
|| x>=0 && x<=1 && y>=-1 && y<=0 && x*x+y*y<=1 )
z=1+x*y;
else z=5;
printf(" Для точки (%.2f,%.2f) z=%.4f", x, y, z);
fflush(stdin); getchar();
return(0);
}
Задача 2. Вычислить значение функции
Таблица соответствия
Обозначения в задаче |
Имена в алгоритме и прог-ме |
Тип данных |
Комментарий |
x |
X |
вещественный |
исходное данное – аргумент функции |
y |
Y |
-//- |
результат – значение функции |
|
N |
целочисленный |
номер формулы |
|
Z |
строка |
вид формулы |
/* Программа задачи 1.2 */
#include <stdio.h>
#include <math.h>
main()
{
float x,y;
int n;
char *z;
puts("Введите x");
scanf("%f",&x);
if(x>5 && x!=10)
{ y=x*x;
n=1;
z="y=x*x";
}
else
if(x>=0 && x<=5)
{
y=sin(x);
n=2;
z="y=sinx";
}
else
{
y=2*x;
n=3;
z="y=2x";
}
printf("При x=%.2f y=%.4f (формула %d:%s)\n",x,y,n,z);
fflush(stdin);
getchar();
return(0);
}
Для проверки правильности разработанного алгоритма и программы достаточно подготовить семь тестов. Сделаем это с помощью рис. 3.5.
На рис. 3.5 на числовой оси отмечены промежутки значений x с указанием формул для вычисления y для каждого промежутка и каждой граничной точки. В таблице 3.6 приведены тесты.
Рис. 3.5 Промежутки значений x
Таблица 3.6