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

Использование инструкции break

Использование флага несколько перегружает программу, так как требуется определение дополнительной переменной, введение нескольких строк для присваивания ей значения и лишняя конструкция if...else. Можно избежать этих сложностей и выполнить ту же работу, если применить цикл while. Пример такой программы приведен в Листинге9.5.

Листинг 9.5. Использование цикла while и инструкции break.

/*break*/

main()

{

int temp;

float celsius;

printf("Введите значение температуры в пределах от 0 до 100. Ввод значения 555 прекращает работу программы: ");

scanf("%d", &temp);

while (temp != 555)

{

while ((temp < 0 || temp > 100)

&& temp != 555)

{

printf("Ошибка, повторите ввод: ");

scanf("%d", &temp);

}

if (temp == 555)

break;

celsius=(5.0/9.0)*(temp-32);

printf("%d градусов по Фаренгейту соответствует %6.2f по Цельсию\n", temp, celsius);

printf("Значение введено, для прекращения работы наберите 555: ");

scanf("%d", &temp);

}

}

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

Считается, что при правильном вводе данных значения чисел лежат в промежутке от 0 до 100 или равны 555, причем ввод последнего немедленно прекращает работу программы, так как в ней записаны инструкции:

if (temp == 555)

break;

Инструкция break завершает цикл, в который она помещена, так же, как если бы условие while или условие цикла for перестало выполняться.

Все программы перевода значений температур из одной шкалы в другую, приведенные в этой главе, являются «правильными» программами. Во всех этих примерах мы применяли различный подход и использовали разные алгоритмы для выполнения одной и той же задачи. Если в программе присутствует запрос о необходимости прекращения работы, пользователю не надо помнить, какое именно специальное значение он должен ввести для прекращения работы, но зато при каждом повторе цикла он должен отвечать на дополнительный вопрос помимо ввода собственно значения температуры. Использование специальных значений, вроде числа 555 в нашем примере, избавляет от необходимости лишний раз нажимать на клавиши. Однако неудобство этого способа состоит в том, что нельзя использовать некоторые значения, которые могут оказаться корректными данными. Например, если прекращение работы программы происходит при вводе отрицательного значения, как тогда быть, если мы хотим преобразовать значения температуры ниже нуля?

Критерии «правильности» программы определяются тем, выполняется ли она без ошибок и работает ли она столько времени, сколько требуется.

<>

Вопросы

  1. Какими критериями вы будете руководствоваться при выборе цикла for, do или while?

  2. Какие функции выполняют параметры for?

  3. В каком случае прекращается выполнение цикла for?

  4. Что такое вложенный цикл?

  5. Как можно использовать флаг?

  6. Каково назначение инструкции break?

<>

Упражнения

  1. Отредактируйте текст программы из Листинга 8.10 (глава 8) таким образом, чтобы она повторялась до тех пор, пока пользователь не пожелает прекратить ввод данных.

  2. Напишите программу, которая рассчитывает сумму 6-процентного налога на продажи для товаров, имеющих стоимость в пределах от 1 до 50 долларов, и выводит информацию на экран монитора в виде таблицы

Цена Налог Итого

1 .06 1.06

2 .12 2.12

  1. Напишите программу, которая вводит десять чисел в пределах от 0 до 25.

  2. Напишите программу, которая выводит на дисплей следующий график:

* * * * *

* * * *

* * *

* *

*

* *

* * *

* * * *

* * * * *

  1. Объясните, почему следующая программа написана неправильно:

main()

{

float row, column;

puts("\t\tТаблица Пифагора\n\n");

for (row = 1; row <= 10; row++)

{

for (column = 1;

column <= 10; column+)

printf("%d", row * column);

}

putchar('\n');

}