Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_Si_SUA.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
542.21 Кб
Скачать

7.4.Оператор прерывания цикла

Предыдущая программа имеет существенный недостаток: перебираются все значения синуса, хотя цикл можно остановить, когда появится первое отрицательное значение. Этот недостаток можно исправить, как показано в следующем фрагменте:

x = xn;

minus = 0;

while( x < xk && !minus )

{

...

}

В языке Си есть специальный оператор для прерывания цикла. Это оператор break;. Выполнение его в программе немедленно прерывает цикл, в котором он находится и управление передается на следующий за циклом оператор. Используя оператор break, цикл предыдущей программы можно переписать в виде:

x = xn;

minus = 0;

while( x < xn )

{

if( sin(x) < 0 ) { minus = 1; break; }

x += h;

}

7.5.Оператор продолжения цикла

Оператор "continue;" вызывает переход к следующей итерации цикла, т.е. к очередной проверке условия. Естественно, все операторы тела цикла, находящиеся между continue и концом тела цикла пропускаются:

while( ... )

{

...

if(...) continue;

... /* операторы пропускаются */

}

Операторы break и continue позволяют избавиться от необходимости применения оператора goto, поэтому последний в этом методическом пособии не рассматривается.

7.6.Пример организации простейшего меню

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

Пример. Следующая программа вычисляет sin(x), cos(x), tan(x) в зависимости от выбора пользователя:

#include <math.h>

#include <stdio.h>

/* Организация простейшего меню */

void main ( void )

{

int loop; /* Флаг, который сигнализирует о конце работы */

int choice; /* Текущий выбор пункта меню */

double fun, x; /* Значения функции и аргумента */

printf( "\nВведите аргумент x=" );

scanf( "%lf", &x );

loop=1;

while ( loop )

{

printf ( "\n Введите номер функции:\n" );

printf ( "1. sin(x)\n2. cos(x)\n" );

printf ( "3. tan(x)\n4. Конец работы\n" );

scanf ( "%d", &choice );

if (choice==1) fun=sin(x);

else if (choice==2) fun=cos(x);

else if (choice==3) fun=tan(x);

else if (choice==4) { loop=0; continue; }

else { printf( "Неверный выбор\n" ); continue; }

printf( "Значение функции %lf\n", fun );

}

}

Данная программа выводит на экран дисплея список возможных действий. Пользователь должен выбрать нужное, введя его номер.

Для управления выходом из цикла и организации конца работы программы используется флаг loop.

7.7.Множественный выбор. Оператор переключения

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

Для осуществления подобных операций в языке Си существует специальный оператор переключатель switch. Используя этот оператор, вместо вложенных if в предыдущей программе можно записать следующую конструкцию:

switch ( choice )

{

case 1 : fun=sin(x); break;

case 2 : fun=cos(x); break;

case 3 : fun=tan(x); break;

case 4 : loop=0; break;

default: printf( "Неверный выбор\n" ); break;

}

Здесь ключевое слово case (случай) указывает на то, что следующая константа является значением переменной choice, для которого выполняются соответствующие действия.

Оператор break; осуществляет выход из оператора switch, а не из цикла. Именно поэтому для выхода из цикла пришлось использовать специальный флаг loop.

Ключевое слово default ( умолчание ) означает, что следом записаны действия, выполняющиеся, если значение choice не совпадет ни с одной из констант, указанных за case.

Оператор switch в общем виде выглядит так:

switch ( выражение )

{

case константа : { оператор }

case константа : { оператор }

[ "default" : { оператор } ]

}

В качестве выражения можно использовать любое выражение, имеющее символьный или целый тип. Константы тоже должны быть символьного или целого типа, например case 4 , case 'A'.

Допускается использовать несколько констант для пометки одной группы операторов, например

case 2 :

case 4 :

case 8 : f = sin(x); break;

Если группа операторов не завершается оператором break, то будут выполняться все последующие операторы независимо от наличия case с константами до ближайшего break или другого оператора, прерывающего естественную последовательность действий. Иными словами ключевое слово case с константой надо рассматривать как метку для передачи управления. Так, в следующем операторе

switch( ch )

{

case 'A' :

case 'B' : x++;

case 'C' :

case 'D' : f = sin(x); break;

case 'E' : f = cos(x); break;

}

будет вычислено f=sin(x+1), при ch равном 'A' или 'B'; f=sin(x), при ch равном 'C' или 'D'; f=cos(x), при ch равном 'E'.

При использовании оператора switch необходимо внимательно следить за правильностью написания ключевого слова default и за тем, чтобы между ключевым словом case и числовой константой обязательно имелся пробел. В противном случае, эти конструкции будут приняты за правильно записанные метки для оператора goto, и компилятор не выдаст никакой диагностики.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]