Общая форма записи условного оператора:
if (условие)
{
блок операторов 1;
}
else
{
блок операторов 2;
}
Если на момент выполнения условие истинно, программа передает управление блоку операторов 1 и далее первому оператору за пределами конструкции if-else. При этом блок операторов 2 не выполняется. Если на момент выполнения условие ложно, выполняется блок операторов 2, а блок операторов 1 не выполняется. В таблице 1 указаны простейшие операции отношения.
Таблица 1.
Операция | Запись на Си |
больше | > |
меньше | < |
больше либо равно | >= |
меньше либо равно | <= |
равно | = = |
не равно | != |
Вложенные операторы условия
Операторы условия могут быть вложенными друг в друга, в соответствии с тем программным алгоритмом, который они реализуют. Допускается произвольная степень их вложенности. Например:
if (a<=b) // начало внешнего оператора условия
{
if (x!=0) printf (“x!=0 \n”); //начало вложенного оператора условия
else // начало ветви else, относящейся
// к вложенному оператору условия
{
x=1;
y=0;
} // конец ветви else, относящейся
// к вложенному оператору условия
}
else // начало ветви else, относящейся
// к внешнему оператору условия
{
a=b;
printf (“%d” ,a);
} // конец ветви else, относящейся
// к внешнему оператору условия
Сокращенные варианты записи
При программировании обыденной является ситуация, когда требуется некоторое действие в ответ на сложившиеся условия. Например, если получены неверные исходные данные от пользователя, то выдать сообщение об ошибке и выйти из программы. В таких случаях используется сокращенная запись оператора условия с отсутствующим блоком else. Общая форма записи:
if (условие)
{
блок операторов;
}
Здесь в случае истинности условия управление передается блоку операторов в фигурных скобках. В случае ложности условия этот блок пропускается.
Составные логические выражения
В программировании распространены двойные условия, которые в математике записываются в виде f<b<c. В программе такие условия должны быть переформулированы с использованием простых операций сравнения и логически операций «И», «ИЛИ», «НЕ». Обозначение логических операций приведено в таблице 2.
Таблица 2.
Логическая операция | Знак С | Наименование знака |
И | && | двойной амперсанд |
ИЛИ | || | двойная вертикальная черта |
НЕ | ~ (!) | не |
Например:
if ((a>b) && (a>c)) // если а больше b и а больше с
printf ("a=%f",a); // вывести значение переменной а
else // иначе
{
if ((b>a) && (b>c)) // если b больше а и b больше с
prinrtf("b=%f",b); // вывести значение переменной b
else
prinrtf("c=%f",c); // иначе вывести значение
} // переменной с
Оператор switch используется в том случае, если в программе присутствует большое дерево ветвлений и все ветвления зависят от значения какой-либо одной переменной.
Общий формат записи:
switch (n)
{
case 1:
оператор 1;
break;
case 2:
оператор 2;
break;
case 3:
оператор 3;
break;
…………….
}
где n – целочисленная или символьная переменная;
1, 2, 3 – целочисленная или символьная константа;
Оператор 1 – тело первого case;
Оператор 2 – тело второго case;
Оператор 3 – тело третьего case;
вreak – (прервать) оператор завершает выполнение ветвления switch, если значение переменной в операторе switch совпадает с одним из значений констант, указанных внутри ветвления. Если значение переменной в операторе switch не совпадет ни с одним из значений констант, то управление будет передано в конец switch без выполнения каких-либо действий. В случае отсутствия оператора break управление будет передано операторам, относящимся к другим веткам switch.
Условная операция
Существует распространенная в программировании операция: переменной необходимо присвоить одно значение в случае выполнения некоторого условия и другое значение в случае невыполнения этого условия. С помощью конструкции if … else это будет выглядеть следующим образом:
if (alfa<beta)
min=alfa;
else
min=beta;
Подобные действия на практике настолько распространены, что была специально разработана условная операция, выполняющая эти действия. Эта операция записывается с помощью двух знаков и использует три операнда.
С помощью условной операции можно записать предыдущий фрагмент следующим образом: min = (alfa<beta) ? alfa : beta;
Правая часть оператора (alfa<beta) ? alfa : beta представляет собой условное выражение. Знак? и двоеточие : обозначают условную операцию. Условие стоит перед знаком вопроса (alfa<beta) и является условием проверки. Это условие вместе с операндами alfa и beta составляют тройку операндов условной операции.
Если значение проверяемого условия истинно, то условное выражение становиться равным значению alfа, в противном случае beta. Скобки в чтобы визуально упростить читаемость этого оператора.
Пример выполнения лабораторной работы: требуется разработать программу, которая вычисляет значение функции
.
Анализ задачи показывает, что программу можно строить как последовательность подзадач. Следовательно, на первом шаге декомпозиции с использованием метода пошаговой детализации [1] получаем следующую структурную схему программы, представленную на рис. 1а.
Подзадачу Вычисление значения функции можно оформить в виде функции. Эта же программа может быть реализована и без использования функций.
Выполнять детализацию алгоритма основной программы не будем из-за его очевидной простоты. Выполним детализацию алгоритма функции. Исходные данные такой функции – значения переменных a, b. Функция не должна менять их значения, поэтому значения переменных можно передать как параметры-значения или параметры-константы.
На рисунках 1б, 1в приведена схема алгоритма проектируемой программы с использованием подпрограммы типа функция. На рисунке 2 приведена схема алгоритма программы без использования функции.
Из-за очевидной простоты алгоритма основной программы проведем модульное тестирование по критерию комбинаторного покрытия условий [2] только одного компонента программы – вычисление значения функции m (рис. 1в). На рис.3 представлен граф передачи управления, соответствующий схеме алгоритма функции (рис. 1в). Из построенного графа видно, что для функции по критерию комбинаторного покрытия условий необходимо покрыть тестами восемь комбинаций:
1) а>1, b=0; 5) а = 2, b> 1;
2) а>1,b≠0; 6) а = 2, b≤1;
3) а≤ 1,b=0; 7) а≠2, b> 1;
4) а≤ 1,b≠0; 8) а ≠2, b≤1.
![]() |
![]() |
![]() |
а
б
в
Рис.1 Алгоритм программы примера с использованием функции
Эти комбинации можно проверить четырьмя тестами:
а = 2, b = 0 — проверяет комбинацию (1);
а = 2, b=1 — проверяет комбинации (2), (6);
a=2, b=3 — проверяет комбинацию (5);
а = 1, b = 0 — проверяет комбинацию (3);
а = 1, b = 1 — проверяет комбинации (4), (8).
a=1, b=3 — проверяет комбинацию (7).
Текст программы на языке С с использованием функции:
//func. c
#include <stdio. h>
#include <locale. h>
float m (float a, float b, float x)
{
if (a==1 && b==0) x/=2;
if (a==2 || b>1)x++;
return x;
}
int main(void)
{
float a, b,x;
setlocale(LC_CTYPE, "russian");
printf ("введите a, b\n");
scanf ("%f%f%f", &a,&b);
printf ("\nm(x)=%f",m(a, b));
return (0);
}


|
Рис.1 Блок-схема алгоритма программы примера | Рис.2 Граф передачи управления для схемы алгоритма функции (в) |
Текст программы на языке С без использования функции:
#include <stdio. h>
#include <conio. h>
#include <locale. h>
int main (void)
{
float a, b,x;
setlocale(LC_CTYPE, "russian");
printf ("введите a, b,x\n");
scanf ("%f %f %f",&a,&b);
if ((a==1) && (b==0)) x/=2;
if ((a==2) || (b>1)) x++;
printf ("\nx=%f",x);
return (0);
}
Лабораторная работа № 2.
«Ветвления»
1. Цель работы
Приобретение обучающимися практических умений и навыков в работе с базовыми конструкциями структурного программирования, в тестировании и отладке программ.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 |





