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

Проверка чисел с плавающей точкой и строк

Мы уже говорили, что в ветви case значение условия должно быть целым числом или символом. Поэтому нельзя написать инструкцию типа case 12.87: или case "Adam". Строки будут подробно рассматриваться в главе 10. Что касается значений типа float, то если вы хотите проверить такое значение, оно должно быть каким-то образом преобразовано в формат целого числа или символа.

В большинстве случаев для преобразования формата можно использовать конструкцию if...else. В Листинге8.8 приведен текст программы, в которой конструкция if...else присваивает целочисленное значение переменной level, основываясь на значении типа float, присвоенном переменной income.

Листинг 8.8. Использование вложенных инструкций if для преобразования чисел с плавающей точкой.

/*switch.c*/

main()

{

float income;

char level;

printf("Введите сумму Вашего годового дохода: ");

scanf("%f", &income);

if(income<= 20000.00)

level = '1';

else

if(income<= 60000.00)

level = '2';

else

if(income<= 120000.00)

level = '3';

else

level = '4';

switch(level)

{

case '1':

puts("Ставка налога = 15%");

break;

case '2':

puts("Ставка налога = 28%");

break;

case '3':

puts("Ставка налога = 32%");

break;

case '4':

puts("Ставка налога = 36%");

break;

default:

puts("Вы

неправильно ввели сумму дохода");

}

}

На первый взгляд, кажется неразумным использовать несколько конструкций if...else и переключатель switch, в то время как можно было поместить все инструкции в if...else. Действительно, в простых программах, таких, как эта, можно без труда так и поступить, но когда инструкции, выполняемые в каждом случае, становятся более сложными, имеющими собственные вложенные инструкции if, использование переключателя switch является, несомненно, более удобным. Задание ветвей case позволит легко определить, сколько именно условий следует проверить и какие именно действия должны быть выполнены в каждом случае. Оформление процедуры присваивания значения с помощью серии последовательных конструкций if...else стоит той дополнительной работы, которую придется ради него проделать.

Проектирование программы

Как вы могли убедиться, существует несколько способов создания одной и той же программы: использование нескольких инструкций if, вложенных инструкций if, логических операторов или конструкции switch. В Листинге8.9 в качестве примера показано, как текст программы Опросника (в котором раньше использовался переключатель switch) теперь переделан с использованием вложенных инструкций if...else. В данном случае выбор одного из вариантов определяется вашим личным вкусом. Никто не может сказать, что ваш способ является ошибочным, до тех пор, пока ваша программа делает все, что от нее требуется. Разумеется, если в результате работы программы мы получаем неправильные результаты, значит в ней есть ошибочные инструкции, но при этом совершенно не обязательно, что ошибка была вызвана именно неправильным выбором структуры программы.

Листинг 8.9. Программа Опросника, в которой используются вложенные инструкции if...else.

/*quiz4.c*/

main()

{

int answer;

puts("Си это: \n");

puts("1. Язык, на котором говорят на юге Франции\n");

puts("2. Язык, который используется только для написания \

больших компьютерных программ\n");

puts("3. Компилирующий язык, легко совместимый с любыми системами\n");

puts("4. Ничего из перечисленного\n");

puts("Введите номер ответа\n");

answer = getchar();

putchar('\n');

if(answer == '1')

{

puts("К сожалению, Вы ошиблись.\n");

puts("На юге Франции говорят на языке Паскаль\n");

}

else

if(answer == '2')

{

puts("Вы ошибаетесь, язык Си используют для написания программ\n");

puts("любых типов и размеров\n");

}

else

if(answer == '3')

{

puts("Очень хорошо, Вы дали правильный ответ\n");

puts("Си является компилирующим языком и может использоваться\n");

puts("с любыми компьютерными системами\n");

}

else

if(answer == 4)

puts("К сожалению, Вы ошибаетесь, правильный ответ - номер 3\n");

else

puts("Вы ввели символ, не соответствующий номеру ответа\n");

}

Выбирайте тот метод, который кажется вам более удобным и позволяет написать более стройную программу без использования излишне усложненных конструкций. Имейте в виду, часто бывает так, что лучший метод требует использования большего количества инструкций, а самая короткая программа не всегда является самой лучшей. И не забывайте о том, что какой бы метод вы ни выбрали для создания программы, всегда следует проверять правильность ввода.