Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
разд_3.doc
Скачиваний:
4
Добавлен:
03.03.2016
Размер:
102.4 Кб
Скачать

3.7. Оператор – переключатель switch

Предназначен для выбора одного из вариантов выполнения действий в программе.

Форма записи:

switch ( выражение )

{

case конст.1: оператор;

. . . . . . . .

оператор;

case конст.2: оператор;

. . . . . . . .

оператор;

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

default: оператор;

. . . . . . . .

оператор;

}

где

выражение – называется селектор, должен иметь тип int или char;

case конст.i: – выбор i–го варианта действий, конст.i – константа типа int или char;

default: - определяет действия, когда не выбран ни один из вариантов, присутствие

необязательно

Принцип работы оператора switch:

  1. Вычисляется выражение;

  2. Производится сравнение выражения с конст.1, конст.2, . . . .

  3. Если найдена конст.i = = выражение, то выполняются операторы за конст.i: всё до конца switch;

  4. Если нет совпадения выражения ни с одной конст., то выполня­ются операторы за 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. Переменной цикла присваивается начальное значение;

  2. Для полученного значения переменной цикла выполняются требуемые согласно условию задачи действия и преобразования;

  3. Значение переменной цикла изменяется на заданный шаг;

  4. Выполняется проверка на достижение переменной цикла конечного значения.

1

Приведенную последовательность действий можно отобразить с помощью блок-схемы:

Такая структура цикла называется цикл с постусловием.

Если проверка на окончание цикла выполняется в начале. т.е. до выполнения тела цикла, то цикл с такой структурой называется цикл с предусловием.

В соответствии с существующими структурами в Си различают 3 вида операторов цикла:

  1. Цикл типа while

  2. Цикл типа do…while

  3. Цикл типа 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);

}

Оператор цикла типа dowhile

Форма записи:

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.

  1. 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;

}

  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 );