Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Проверка правильности ввода

Не очень надейтесь на то, что пользователь всегда будет вводить правильное число или символ, даже если можно использовать и прописные и строчные буквы. Например, в главе 7 мы приводили текст программы, в которой требовалось ввести процент скидки в виде десятичной дроби. Все расчеты могут оказаться неверными, если ошибочно ввести 5 вместо 0.05 для пятипроцентной скидки. Одним из способов решения этой проблемы является введение добавочной инструкции:

if (mrkdown >1)

mrkdown = mrkdown / 100;

В главе 6 вы видели программу расчета оплаты труда. Если помните, там возникла ситуация, когда программа вычитала из заработной платы сотрудника оплату в двойном размере за каждый час, недостающий до 40-часовой рабочей недели. Программа, в которой этот недостаток исправлен, приведена в Листинге8.10. Инструкция if включает два набора инструкций: один для случая, когда количество отработанных за неделю часов было не меньше сорока, и второй для случая, когда количество отработанных часов было меньше 40. Значение любой переменной, которая будет отображаться на экране, присваивается в результате выполнения того или иного набора инструкций, так что никаких случайных величин на экране не появится.

Листинг 8.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

if age > 18 then

puts("Вы можете участвовать в выборах");

}