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

Оператор switch (переключатель)

Общая форма записи:

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

{

case <значение 1>: <операторы 1>

case <значение 2>: <операторы 2>

case <значение 3>: <операторы 3>

. . .

default : <операторы def>

}

Если значение выражения равно значение 1, то выполняются операторы 1, если значение 2, то выполняются операторы 2 и т.д. Если значение выражения не совпадает ни с одним <значение i>, и включена конструкция default, то будут выполняться операторы def. Для завершения данного case используется оператор break. В противном случае будут выполняться последовательно все операторы внутри switch.

Пример: ввод дня недели в целом формате и печать дня недели в символьном виде.

main()

{

int i;

do

{

scanf("%d",&i);

switch(i)

{

case 1: printf("Понедельник\n");

break;

case 2: printf("Вторник\n");

break;

case 3: printf("Среда\n");

break;

case 4: printf("Четверг\n");

break;

case 5: printf("Пятница\n");

break;

case 6: printf("Суббота\n");

break;

case 7: printf("Воскресенье\n");

}

}

while((i>0)&&(i<8));

}

Операторы передачи управления

Они предназначены для изменения последовательности выполнения операторов программы.

Оператор return

Общая форма записи:

return <выражение>;

Этот оператор осуществляет выход из функции в вызвавшую ее функцию и передает ей значение выражения (если оно нужно). Если этот оператор выполняется в функции main, то передается управление в вызвавшую ее программу (или ДОС).

Оператор break

Общая форма записи:

break;

Осуществляется выход из любого оператора цикла (for,while, do ... while).

Пример: выход из бесконечного цикла при достижении заданного значения. Программа вычисляет и печатает значение величины от 0 с шагом 0,1 и ее квадрата до тех пор, пока значение квадрата не превысит 100000.

main()

{

double a,b;

a=0.;

while (1) /* можно использовать также конструкцию for(;;) */

{

b=a*a;

if (b>100000.) break;

printf("\na=%f b=%f",a,b);

a+=0.1;

}

}

Оператор continue

Общая форма записи:

continue;

Производится пропуск всех операторов до конца цикла (for, while, do...while) и продолжается выполнение цикла.

Пример: смена знаков элементов массива, меньших нуля, и уменьшение на 5, если <5.

main()

{

int f[10],d;

/* ввод значений элементов массива и их проверка */

for (d=0; d<10; d++)

{

printf("\n Введите %d-й элемент массива: ",d+1);

scanf("%d",&f[d]);

if (f[d]>=5) continue;

if (f[d]<0) f[d]=-f[d];

else f[d]-=5;

}

. . .

}

Оператор goto

Общая форма записи:

goto (имя метки);

Переход на оператор с указанной меткой.

Имя метки записывается следующим образом: идентификатор метки, затем двоеточие. Идентификатор метки не описывается, его имя подчиняется тем же требованиям, что и имена объектов программы.

Пример:

goto lb1;

. . .

lb1: a+=6;

. . .

В программе, написанной на языке С, всегда можно избежать использования этого оператора.

Условный оператор

Общая форма записи:

<выражение 1> ? <выражение 2> : <выражение 3>

Если выражение 1 верно, то вычисляется выражение 2, в противном случае выражение 3.

Пример: тот же, что и в операторе continue.

main()

{

int f[10],d;

/* ввод значений элементов массива и их проверка */

for (d=0; d<10; d++)

{

printf("\n Введите %d-й элемент массива: ",d+1);

scanf("%d",&f[d]);

if (f[d]>=5) continue;

f[d]=(f[d]<0) ? -f[d] : f[d]-5;

}

. . .

}

Функции

В С все подпрограммы рассматриваются как функции. Все функции возвращают значения, за исключением случаев, когда не указан тип функции. В этом случае она считается пустой.

Имена функций подчиняются тем же требованиям, что и имена остальных объектов в программе.

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

Классический формат определения функции имеет вид:

<тип> <имя функции>(имена параметров через запятую)

определение параметров;

{

локальные описания;

операторы;

}

Примеры:

1. функция, вычисляющая значение sin(x)+4*cos(x).

double tr(x)

double x;

{

return (sin(x)+4.*cos(x));

}

main()

{

double x,y;

x=1.6;

y=tr(x);

printf("\nsin(x)+4*cos(x) при x=%f равно %f",x,y);

}

2. функция, выводящая на экран сообщение "ошибка".

_err()

{

printf("\nошибка");

}

main()

{

_err();

}

Примечания:

а. Если функция, не возвращающая значений, не имеет оператора return; , то выполнение ее заканчивается при достижении закрывающей скобки функции и происходит возврат в вызвавшую ее функцию или в ДОС.

б. Все данные символьного типа при передаче в функцию преобразуются к целому типу (со знаком или без соответственно).

в. Все данные типа float при передаче в функцию преобразуются к типу double.

Современный формат определения функции (расширенная версия С, предложенная комитетом ANSI) имеет вид:

<тип> <имя функции>(информация о параметрах через запятую)

{

локальные описания;

операторы;

}

Пример 1 из предыдущего раздела:

double tr(double x)

{

return (sin(x)+4.*cos(x));

}

main()

{

double x,y;

x=1.6;

y=tr(x);

printf("\nsin(x)+4*cos(x) при x=%f равно %f",x,y);

}

Пример: Вычисление факториала

long fact(int i)

{

int j;

long k;

k=1;

for (j=2; j<=i; j++) k*=j;

return(k);

}

main()

{

int i=10;

printf("\n%d! = %ld",i,fact(i));

}

Пример: Вычисление факториала с использованием рекурсии. Рекурсия - это прием программирования, при котором какая-либо функция в ходе своего выполнения вызывает сама себя. В данном примере используется формула n!=n[(n-1)!], где 0!=1.

long fact(int i)

{

if (i<=1) return 1L;

else return i*fact(i-1);

}

void main(void)

{

int i=10;

printf("\n%d! = %ld",i,fact(i));

}

Примечание: в качестве типа функции, если функция не возвращает никаких значений, допустимо описать ее тип как void. Пустой список параметров тоже можно описать как void.

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