Разветвляющиеся (условные) алгоритмы
Не всем алгоритмам достаточно для выполнения конструкции следования. Рассмотрим следующий пример: . Алгоритм решения этой задачи может быть следующим:
алг Функция нач
ввод х
если х =0 то f:= 1 иначе f:= .
рез f
кон
Эта управляющая конструкция носит название развилка (проверка условия, условная конструкция) –
если условие то действия при истинном условии иначе действия при ложном условии.
Условная конструкция в языке Си
Для организации ветвления алгоритма в Си используется оператор проверки условия if ( логическоевыражение ) { действия при истинном значении выражения }else { действия при ложном значении выражения }. Оператор else может отсутствовать, если это обусловлено алгоритмом.
Логическое условие может быть сложным, т.е. может состоять из нескольких условий, связанных между собой логическими операциями:
- «И» (конъюнкция), в Си оператор &&, все логическое выражение считается истинным только в том случае, если истинны все простые выражения.
- «ИЛИ» (дизъюнкция), в Си оператор ||, все логическое выражение считается ложным только в том случае, если ложны все простые выражения.
Например, запишем следующее условие «Если переменная x меньше переменной y и переменная x меньше переменной z »: x<y && x<z. Следующее условие демонстрирует операцию дизъюнкции «Если переменная m < 10 или переменная m равна переменной x »: m<10 || m == x.
Если в блоках программы, выполняющихся при истинности или ложности условия необходимо выполнить два и более действий, эти блоки определяются фигурными скобками. Приведем примеры.
- Если x<y, то вывести на экран значение суммы x и y, значение переменной x заменить на 10.
|
if (x<y)
{ 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.
Задание на лабораторную работу
Составить и записать алгоритм решения индивидуального задания с проверкой корректности данных. По составленному алгоритму написать программу на языке Си.