Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
31
Добавлен:
04.06.2015
Размер:
2.75 Mб
Скачать

Int main()

{

const float Pi=3.1415926536;

float x, y, s_left, s_right, alfa, sin_alfa, segment;

printf(“\nx= ”);

scanf(“%f”, &x);

if (x<=1.0) //первый участок

{

y=sqrt(1.0 - (x - 1.0 ) * (x - 1.0 ));

if (x<=0.0)

y=0.0;

}

else

{ //второй участок

y=sqrt(1.0 - (x - floor(x)) * (x - floor(x)));

if (x>=2.0)

y=0.0;

}

if (x==1.0) //двойной знак равенства!

{

s_left=0.7854;

s_right=0.7854;

}

if (x<1.0) //первый участок

{

sin_alfa=y;

if (sin_alfa!=1.0)

alfa=atan(sin_alfa/sqrt(1.0 - sin_alfa*sin_alfa));

else alfa=Pi/2.0;

segment=0.5*(alfa - sin_alfa);

s_left=segment + 0.5*x*y;

s_right=Pi/2.0 - s_left;

} //x<1.0

if (x>1.0) //второй участок

{

x=2.0-x;

sin_alfa=y;

if (sin_alfa!=1.0)

alfa=atan(sin_alfa/sqrt(1.0 - sin_alfa*sin_alfa));

else alfa=Pi/2.0;

segment=0.5*(alfa - sin_alfa);

s_left=segment + 0.5*x*y;

s_right=Pi/2.0 - s_left;

} //x>1.0

printf(“\ny=%6.3f”, y);

printf(“\n s_left=%6.3f”, s_left);

printf(“\n s_right=%6.3f”, s_right);

return 0;

}

Переключатель

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

В языке Сипереключатель реализуется оператором:

switch (селектор)

{

case метка-1: оператор-1;

break;

case метка-2: оператор-2;

break;

case метка-3: оператор-3;

break;

. . . . . . . . . . . . . . . . .

default: оператор-n;

}

где switch- служебное словопереключатель,

case- служебное слововариант,

селектор- переменная или выражениецелоготипа (обязательно ставится в скобках);

метка-1, метка-2,…-метки вариантов– значения селектора –

целые числа, символы или имена констант,

break- служебное словопрервать,

default- служебное словопо умолчанию(не обязательно).

Действия оператора:

  1. вычисляется значение селектора,

  2. это значение отыскивается среди меток вариантов,

  3. выполняется оператор, стоящий за найденной меткой,

  4. если далее стоит оператор break, то осуществляется выход из переключателя, иначе выполняется следующий оператор в нем,

  5. если метка не найдена, то выполняется оператор, стоящий за словом default.

В любой ветви оператора switchмогут стоять несколько меток вариантов, разделенныхдвоеточием:

switch (селектор)

{

case метка-1: case метка-2: case метка-3: оператор-1;

break;

case метка-4: case метка-5: оператор-2;

break;

case метка-6: оператор-3;

break;

. . . . . . . . . . . . . . . . .

default: оператор-n;

}

Эту структуру можно представить в следующем виде:

switch (селектор)

{

case метка-1:

case метка-2:

case метка-3: оператор-1;

break;

case метка-4:

case метка-5: оператор-2;

break;

case метка-6: оператор-3;

break;

. . . . . . . . . . . . . . . . .

default: оператор-n;

}

Внимание!Метки вариантов не должны повторяться!

Если в переключателеубрать операторыbreak, то после выполнения оператора, стоящей за найденной меткой вариантов, выполняются все оставшиеся операторы, в том числе и оператор после словаdefault:

int i;

printf(“\nВведите цифру:”);

scanf(“%d”, &i);

switch (i)

{

case 0: printf(“\nЭто цифра ноль”);

case 1: case 2: printf(“\nЭто цифра один или два”);

default: printf(“\nЭто неизвестная цифра”);

}

При вводе цифры 0на экран будут выведены сообщения:

Это цифра ноль

Это цифра один или два

Это неизвестная цифра

Для того, чтобы после выполнения нужной ветви оператора switchдругие операторы не выполнялись, каждая ветвь должна заканчиваться операторомbreak:

int i;

printf(“\nВведите цифру:”);

scanf(“%d”, &i);

switch (i)

{

case 0: printf(“\nЭто цифра ноль”);

break;

case 1: case 2: printf(“\nЭто цифра один или два”);

break;

default: printf(“\nЭто неизвестная цифра”);

}

В этом случае после ввода цифры 0на экран будет выведено только одно сообщение:

Это цифра ноль

Если в каждой ветви switchстоит не по одному, а по нескольку операторов, то необходимо брать их в фигурные скобки:

switch (селектор)

{

case метка-1:

{

оператор;

оператор;

оператор;

break;

}

case метка-2:

{

оператор;

оператор;

break;

}

. . . . . . . . . . . . . . . . .

default:

{

оператор;

оператор;

}

}

Для улучшения читаемости программы необходимо использовать сдвиг операторов.

Можно использовать вложенные операторы switch, при этом в разных операторах могут быть одинаковые метки вариантов:

switch (n)

{

case 0: оператор;

break;

case 1: switch (m)

{

case 0: оператор;

break;

case 1: оператор;

break;

default: оператор;

}

case 3: оператор;

break;

. . . . . . . . . . . . . . . . .

default: оператор;

}

Пример: по заданному номеру месяца года определить количество дней в нем. В этом переключателе всеготриветви:

#include <stdio.h>

#include <conio.h>

#include <math.h>

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