
3.7. Оператор – переключатель switch
Предназначен для выбора одного из вариантов выполнения действий в программе.
Форма записи:
switch ( выражение )
{
case конст.1: оператор;
. . . . . . . .
оператор;
case конст.2: оператор;
. . . . . . . .
оператор;
. . . . . . . . . . . . . . . . . .
default: оператор;
. . . . . . . .
оператор;
}
где
выражение – называется селектор, должен иметь тип int или char;
case конст.i: – выбор i–го варианта действий, конст.i – константа типа int или char;
default: - определяет действия, когда не выбран ни один из вариантов, присутствие
необязательно
Принцип работы оператора switch:
Вычисляется выражение;
Производится сравнение выражения с конст.1, конст.2, . . . .
Если найдена конст.i = = выражение, то выполняются операторы за конст.i: всё до конца switch;
Если нет совпадения выражения ни с одной конст., то выполняются операторы за default, когда default: отсутствует, ничего не выполняется.
Для выполнения операторов только для выбранного варианта, необходимо последним оператором для i-го case записать оператор break;
{
case конст.i: оператор;
оператор;
break;
case . . . . . . . . . . . .
}
Пример: вычислить и вывести на экран функцию f по одной из формул, которые выбирает пользователь
f=a*sinx (1)
f=a*cosx (2)
f=a*tgx (3)
выход (0)
Текст программы:
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main ( )
{ float f, a, x;
int num;
clrscr ( );
printf(“input a, x\n”);
scanf(“%f%f”,&a,&x);
lab1: printf(“select variant of calculation:\n”);
printf(“ 1-a*sin(x)\n 2-a*cos(x)\n 3-a*tan(x)\ 0-exit\n”);
scanf(“%d”,&num);
switch(num)
{
case1: f=a*sin(x);
break;
case2: f=a*cos(x);
break;
case3: f=a*tan(x);
break;
case0: printf(“end of program\n”);
exit(0);
default: printf(“Error of choice\n”);
printf(“Press any key to retry\n”);
getch( );
clrscr( );
goto lab1;
}
printf(“f=%.3f\n”,f);
printf(“Press any key for selection continue \n”);
getch( );
clrscr( );
goto lab1;
}
3.8. Операторы цикла
Эти операторы предназначены для организации многократных повторений наборов действий (циклов) в программах. Все операторы цикла работают следующим образом:
Переменной цикла присваивается начальное значение;
Для полученного значения переменной цикла выполняются требуемые согласно условию задачи действия и преобразования;
Значение переменной цикла изменяется на заданный шаг;
Выполняется проверка на достижение переменной цикла конечного значения.
1Приведенную
последовательность действий можно
отобразить с помощью блок-схемы:
Такая структура цикла называется цикл с постусловием.
Если проверка на окончание цикла выполняется в начале. т.е. до выполнения тела цикла, то цикл с такой структурой называется цикл с предусловием.
В соответствии с существующими структурами в Си различают 3 вида операторов цикла:
Цикл типа while
Цикл типа do…while
Цикл типа for
Оператор цикла типа while
Форма записи:
while (условие)
оператор;
где: условие – логическое выражение;
оператор – выполняемый в цикле оператор или тело цикла.
Схема работы такого цикла: пока условие является истинным (true), выполняется оператор и снова проверяется условие и т.д. Когда условие станет ложным (false) цикл завершает работу.
Такой цикл называют циклом с предусловием.
Если в теле цикла необходимо выполнять набор операторов, тогда этот набор операторов заключают в фигурные скобки и образуют составной оператор.
while(условие)
{ оператор 1;
. . . . . . . . .
оператор М;
}
Пример:
Вычислить
-x2
для -2
≤ x
≤ 2 Δx
= 0,1
определить К – количество у > 0, вывести x, y, k
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main ( )
{ float x = -2, y;
int k = 0;
while (x <= 2)
{ y = sqrt( fabs(x)) – x*x;
printf("x=%.1f y=%.3f\n", x, y);
if ( y>0) k ++;
x+ =0.1;
}
printf(“k=%d\n”,k);
}
Оператор цикла типа do…while
Форма записи:
do или do оператор; оператор1;
while (условие); . . . . . . . .
оператор М;
while (условие);
Схема работы такого цикла: сначала выполняется оператор, потом проверяется условие, если условие является истинным (true), выполняется оператор и снова проверяется условие и т.д. Когда условие станет ложным (false) цикл завершает работу.
Такой цикл называют циклом с постусловием.
Пример: Условие задачи то же самое.
do
y = sqrt ( fabs (x)) – x*x;
printf (“x=%.1f y=%.3f\n”, x, y);
if ( y > 0) k ++;
x+ = 0.1;
while ( x<=2 );
printf (“k=%d\n”,k );
Оператор цикла типа for
Форма записи:
1. for ( выражение1; выражение2; выражение3 ) оператор;
или с составным оператором в теле цикла
2. for ( выражение1; выражение2; выражение3 ) { оператор1;
. . . . . . . . .
операторМ;
}
где выражение1 – задаёт начальное значение параметру цикла, а также начальные
значения другим переменным
for ( t = -5, s=0, p=1; … ) t – параметр цикла
выражение2 – логическое выражение, которое задаёт условие работы цикла
for ( …; t<=10;… )
( …; t>=-5 && t<=10; … )
выражение3 – задаёт изменение параметру цикла, а также другим переменным
for ( …;…; t+ =0.5 )
( …;…; t+ =0.5, s+ =y, p* =y )
Схема работы такого цикла: сначала выполняется выражение1, потом проверяется выражение2, если оно истинно, то выполняются оператор и выражение3, снова проверяется выражение2 и т.д.
Пример: Условие то же самое
. . . . . . .
{ float x, y;
int k;
for ( x=-2, k=0; x<=2; x+=0.1 )
{ y=sqrt(fabs(x))-x*x;
printf (“x=. . . . “, x, y);
if ( y>0 ) k++;
}
printf (“k=. . . . “, k);
}
Использование операторов break и continue в циклах
1. Оператор break; прекращает работу цикла. Например:
while ( x<=2 )
{ . . . .
if ( y>5 ) break;
. . . .
}
2. Оператор continue; пропускает следующую за ним часть тела цикла и переходит к новому шагу цикла. Например: программа выводит на экран только положительные y и считает их количество k.
while ( x<=2 )
{ y = sqrt ( fabs (x)) – x*x;
if ( y<0 )
{ x+=0.1;
continue;
}
printf (“x=. . . .”, x, y);
k++;
x+=0.1;
}
Сложные (вложенные) циклы
Сложный цикл образуется, когда один цикл входит в другой цикл и т.д.
Уровень сложности цикла – количество вложенных друг в друга циклов.
Пример сложного цикла:
Вычислить
f = 2,7*sin(x) + 1,3*cos(y), где величины x и y изменяются следующим образом:
-3 ≤ x ≤ 3 Δx = 0,1 -4 ≤ y ≤ 4 Δy = 0,2
Рассмотрим 2 варианта реализации: 1. С использованием цикла while; 2. С использованием цикла for.
float x = -3, y;
while ( x<=3 )
{ y = -4;
while ( y <=4 )
{ f = 2.7*sin(x) + 1.3*cos(x);
printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f );
y+ = 0.2;
}
x+=0.1;
}
float x, y;
for ( x=-3; x<=3; x+=0.1)
for ( y=-4; y<=4; y+=0.2)
{
f=2.7*sin(x)+1.3*cos(y);
printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f );