- •Лабораторная работа №6 управление условиями
- •If — маленькое слово с большими возможностями
- •Условия
- •Составные инструкции
- •Конструкция if...Else
- •Дополненный Опросник
- •Логическиеоператоры
- •Вложенные инструкции if
- •Конструкция switch/case/default
- •Проверка чисел с плавающей точкой и строк
- •Проектирование программы
- •Проверка правильности ввода
Проверка правильности ввода
Не очень надейтесь на то, что пользователь всегда будет вводить правильное число или символ, даже если можно использовать и прописные и строчные буквы. Например, в предыдущей работе мы приведен текст программы, в которой требовалось ввести процент скидки в виде десятичной дроби. Все расчеты могут оказаться неверными, если ошибочно ввести 5 вместо 0.05 для пятипроцентной скидки. Одним из способов решения этой проблемы является введение добавочной инструкции:
if (mrkdown>1)
mrkdown = mrkdown / 100;
В программе расчета оплаты труда возникла ситуация, когда программа вычитала из заработной платы сотрудника оплату в двойном размере за каждый час, недостающий до 40-часовой рабочей недели. Программа, в которой этот недостаток исправлен, приведена в Листинге10. Инструкция if включает два набора инструкций: один для случая, когда количество отработанных за неделю часов было не меньше сорока, и второй для случая, когда количество отработанных часов было меньше 40. Значение любой переменной, которая будет отображаться на экране, присваивается в результате выполнения того или иного набора инструкций, так что никаких случайных величин на экране не появится.
Листинг 10. Исправленная программа расчета заработной платы.
/*allhours.c*/
main()
{
float rate, hours, total,
regular, extra, d_time, overtime;
printf("Введите оплату одного часа работы: ");
scanf("%f",&rate);
printf("Введите число отработанных часов: ");
scanf("%f", &hours);
d_time = rate * 2;
if(hours <= 40)
{
regular = hours * rate;
extra = 0.0;
overtime = 0.0;
total = regular;
}
else
{
regular = 40 * rate;
extra = hours -40;
overtime = extra * d_time;
total = regular + overtime;
}
printf("Нормальныйнедельныйзаработок: %.2f\n", regular);
printf("Отработано
сверхурочных часов : %.2f\n", extra);
printf("Средняя часовая оплата сверхурочных: %.2f\n", d_time);
printf("Заработок
за сверхурочные часы: %f.2\n", overtime);
printf("Общая сумма недельного заработка: %f.2\n", total);
}
Значение оплаты сверхурочных (удвоенное значение оплаты одного часа) присваивается переменной d_time. Расчет этого значения производится перед инструкцией if, так как каждый работник имеет определенную ставку оплаты сверхурочных часов, даже если он реально и не работал больше нормы за истекший период. Соответственно, поскольку сам по себе расчет не зависит от выполнения какого-либо условия, для него не используется инструкция if.
Однако и теперь в программе не разрешены все проблемы, которые могут возникнуть. Например, вы можете ввести отрицательное значение почасовой оплаты или указать какое-нибудь несуразное количество отработанных часов (скажем, 2500 в неделю). Как окончательно решить все проблемы, возникающие из-за ошибочного ввода, вы узнаете в следующей работе.
|
Вопросы |
|
|
Упражнения |
main() { int age; printf(УкажитеВашвозраст); scanf("%f", &age); if age < 18 then puts("Вы не можете участвовать в выборах"); else ifage> 18 then puts("Выможете участвовать в выборах"); } |