Правила записи программы на языке Си 5 Правила формального описания синтаксиса языка программирования 6
Вид материала | Лекции |
Содержание8.5.Оператор прерывания цикла 8.6.Оператор продолжения цикла 8.7.Пример организации простейшего меню 8.8.Множественный выбор. Оператор переключения |
- Правила преобразований из одного типа в другой и правила приведения типов в языке Object, 19.03kb.
- Оформление программы на языке Паскаль. Оператор вывода. Описание переменных. Оператор, 186.34kb.
- Программа наименование дисциплины Латинский язык (1,2 уровни), 154.48kb.
- Экзаменационные вопросы по курсу "Методы программирования", 32.44kb.
- Вопросы по курсу Программирование на языке высокого уровня (яву), 102.97kb.
- Структура программы в языке программирования С++. Обмен данными между функциями (параметры, 37.24kb.
- Программа курса " Азы программирования", 26.19kb.
- Структура программы языка Турбо Паскаль Программа на языке Турбо Паскаль имеет вид, 792.5kb.
- Эволюция языков программирования, 493.92kb.
- Структура программы на языке Turbo Pascal, 26.15kb.
8.5.Оператор прерывания цикла
Предыдущая программа имеет существенный недостаток: перебираются все значения синуса, хотя цикл можно остановить, когда появится первое отрицательное значение. Этот недостаток можно исправить, как показано в следующем фрагменте:
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;
}
8.6.Оператор продолжения цикла
Оператор "continue;" вызывает переход к следующей итерации цикла, т.е. к очередной проверке условия. Естественно, все операторы тела цикла, находящиеся между continue и концом тела цикла пропускаются:
while( ... )
{
...
if(...) continue;
... /* операторы пропускаются */
}
Операторы break и continue позволяют избавиться от необходимости применения оператора goto, поэтому последний в этом методическом пособии не рассматривается.
8.7.Пример организации простейшего меню
Современный стиль программирования предписывает использовать в программах различного рода меню, которые предоставляют пользователю возможность выбора одного из предложенных действий. Следующая программа вычисляет sin(x), cos(x), tan(x) в зависимости от выбора пользователя:
#include
#include
/* Организация простейшего меню */
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.
8.8.Множественный выбор. Оператор переключения
В предыдущей программе осуществлялся так называемый "множественный выбор", когда в зависимости от значения некоторой переменной целого типа выбиралось одно из нескольких действий.
Для осуществления подобных операций в языке Си существует специальный оператор "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, и компилятор не выдаст никакой диагностики.