Эти величины равны между собой




Если это значение равно нулю (ложь) – то сообщение:

Эти величины не равны между собой

Хотя и в этом случае обе переменные будут иметь одинаковые значения.

 

Часто встречающиеся ошибки программирования

1. Использование else безпервой ветви:

if (n > m)

Else...

2. Использование открывающей фигурной скобки { без закрывающей } и наоборот.

3. Отсутствие точки с запятой перед словом else:

if (n > m)

a=1

else a=0;

4. Точка с запятой после условия:

if (n > m);

a=1;

else a=0;

5. Отсутствие точки с запятой перед закрывающей фигурной скобкой } или наличие точки с запятой после нее:

if (c < 2.5)

{

a=sin(c);

b=fabs(c);

};

Else

{

a=cos(c);

b=1.0/c

}

Пример

Задан график функции f(x) – полуокружность радиуса R = 1:

Определить:

1. Значение функции y при заданном значении аргумента x.

2. Площади фигур слева и справа от линии разреза.

По теореме Пифагора:

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

s1 = 0,5 x y

и сектора

s2 = 0,5 R2 (α – sin α), где α – центральный угол в радианах,

причем

α = arcsin(y/R).

Площадь всей фигуры (полукруга) определяется выражением

S = πR2/2.

Программа решения задачи:

#include <stdio.h>

#include <conio.h>

#include <math.h>

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>

Int main()

{

int month;

printf(“\nВведите номер месяца: ”);

scanf(“%d”, &month);

Switch (month)

{

case 1: case 3: case 5:

case 7: case 8: case 10:

case 12: printf(“\n31 день”);

break;

case 4: case 6: case 9:

case 11: printf(“\n30 дней”);

break;

case 2: printf(“\n28 дней”);

break;

default: printf(“\nТакого месяца нет\n”);

}

return 0;

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: