Листинг 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 в неделю). Как окончательно решить все проблемы, возникающие из-за ошибочного ввода, вы узнаете в следующей работе.

  Вопросы
  1. В чем различие между символами = и ==?
  2. Как выполнить несколько инструкций при соблюдении одного определенного условия?
  3. Каково назначение else?
  4. Как вы определите, находится ли число в границах допустимых значений?
  5. Объясните использование «вложенных» инструкций if.
  6. Чем отличается переключатель switch от инструкции if?
  7. Как можно использовать числа с плавающей точкой в конструкциях switch?
  8. Объясните, как можно использовать инструкцию if для проверки правильности ввода?
  Упражнения
  1. Напишите программу, в которой вводится числовое значение, а затем выдается сообщение, четное или нечетное число было введено.
  2. Напишите программу, в которой вводится число и затем выдается сообщение, находится ли значение числа в пределах от 1 до 100.
  3. Напишите программу, в которой вводится целое число, а затем выдается сообщение, в каком интервале находится значение числа: меньше 0, от 0 до 50, от 51 до 100, от 101 до 150, больше 150.
  4. Напишите программу, которая просит пользователя ввести числовые значения в переменные lownum и highnum. Значение lownum должно быть меньше чем highnum. Если числа введены не в соответствии с этим условием, программа должна поменять значения, поместив меньшее число в lownum, а большее — в highnum. Значения переменных должны быть выведены на экран.
5. Объясните, почему следующая программа написана неверно: main() { int age; printf(УкажитеВашвозраст); scanf("%f", &age); if age < 18 then puts("Вы не можете участвовать в выборах"); else ifage> 18 then puts("Выможете участвовать в выборах"); }

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: