Разветвляющиеся (условные) алгоритмы
Не всем алгоритмам достаточно для выполнения конструкции следования. Рассмотрим следующий пример: . Алгоритм решения этой задачи может быть следующим:
алг Функция нач
ввод х
если х=0 то f := 1 иначе f := .
рез f
кон
Эта управляющая конструкция носит название развилка (проверка условия, условная конструкция) –
еслиусловие тодействия при истинном условии иначедействия при ложном условии.
Условная конструкция в языке Си
Для организации ветвления алгоритма в Си используется оператор проверки условия if (логическоевыражение) {действия при истинном значении выражения}else {действия при ложном значении выражения}. Оператор else может отсутствовать, если это обусловлено алгоритмом.
Логическое условие может быть сложным, т.е. может состоять из нескольких условий, связанных между собой логическими операциями:
— «И» (конъюнкция), в Си оператор , все логическое выражение считается истинным только в том случае, если истинны все простые выражения.
— «ИЛИ» (дизъюнкция), в Си оператор ||, все логическое выражение считается ложным только в том случае, если ложны все простые выражения.
Например, запишем следующее условие «Если переменная x меньше переменной y и переменная x меньше переменной z»: x
Если в блоках программы, выполняющихся при истинности или ложности условия необходимо выполнить два и более действий, эти блоки определяются фигурными скобками. Приведем примеры.
— Если x
if (x
{ printf(“Сумма == %d”,x+y);
x = 10;
}
— Если x не равно y вывести на экран соответствующее сообщение, в противном случае вывести на экран значения переменных переменную x увеличить в два раза.
if(x!=y)
printf(“Переменные имеют неравные значения”);
else {
printf(“x = %d, y = %d\n”,x,y);
x*=2;
}
3. Возможности функции scanf()
При некорректном вводе (введены данные, несовпадающие с указанным спецификатором) не возникает ошибка выполнения. Но при этом дальнейшая работа программы не предсказуема. Такие ошибки можно отследить, проанализировав результат работы функции scanf. При успешном вводе результат работы функции – количество введенных верно полей. Например, проверку ошибок ввода можно выполнить, следующим образом:
…
int y,n;
printf(“Введите значение переменной n: ”);
y = scanf(“%d”,n);
if (y!=1) {printf(“Введены неверные данные…\n ”);
system(“pause”);
exit(0);
}
else { …}
В рассмотренном примере количество вводимых полей – 1 (вводится одна переменная n). Следовательно, если переменная y не принимает значение один – произошла ошибка ввода. На экран выводятся соответствующие сообщения. Программа ожидает нажатия клавиши и заканчивает работу (exit). В случае успешной работы выполняется часть программы, описанная в блоке else.
При одном вызове функции возможно ввести более одной переменной. В этом случае спецификаторы формата пишутся один за другим, без пробелов. Каждому спецификатору должен соответствовать свой адрес переменной. При этом scanf при успешном вводе возвращает количество успешно считанных полей. Например:
…
float x,y,z;
printf(“Введите значения переменных x,y и z: ”);
int m = scanf(“%f%f%f”,x,y,z);
…
После успешного выполнения программы значение переменной m примет значение 3.
Задание на лабораторную работу
Составить и записать алгоритм решения индивидуального задания с проверкой корректности данных. По составленному алгоритму написать программу на языке Си.