Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Си.doc
Скачиваний:
38
Добавлен:
27.03.2016
Размер:
2.8 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>