Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DOROGOVA.pdf
Скачиваний:
245
Добавлен:
05.06.2015
Размер:
853.4 Кб
Скачать

4. Операторы

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

Все операторы языка С (кроме составных) заканчиваются знаком ";" (точкой с запятой). Операторы языка С можно условно разделить на следующие категории:

1. Структурные операторы это наименьшая исполняемая единица программы, они служат основными строительными блоками программы. В конце каждого структурного оператора ставится ";", к ним можно отнести:

операторы ветвления (if, switch );

операторы цикла (for,while,do…while);

операторы перехода (break, continue, return, goto);

другие операторы (оператор "выражение", пустой оператор). 2. Операторы, используемые в выражениях.

Арифметические.

Сравнения.

Логические.

Битовые.

Специальные (присваивания, преобразования типов).

4.1. Оператор выражение

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

Примеры:

 

b=a+5;

/* b присвоить 5 */

t++;

/* к t прибавить 1 */

printf("\n %s",mes);

/* печать сообщения */

/* в следующем операторе результат не используется и потому компилятор выдаст предупреждение*/ (a+5)/7;

4.2. Пустой оператор

Пустой оператор состоит из символа ";". Этот оператор используется в двух случаях.

Во-первых в составе других операторов (например в операторах do, for, while, if) в том месте, где по синтаксису необходим оператор, но по смыслу программы он не требуется.

Во-вторых при необходимости пометить закрывающуюся фигурную скобку.

Синтаксис языка С требует, чтобы после метки обязательно следовал оператор. Фигурная же скобка оператором не является. Поэтому, если надо передать управление на фигурную скобку, необходимо использовать пустой оператор.

Пример: int main ( )

{

:

{if (...) goto F; /* переход на скобку */

{...

}

F: ; } /* помеченый пустой оператор */ return 0;

}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

4.3. Объявления и составной оператор

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

При объявлении переменной компилятор выделяет память в соответствии с её типом, в этот момент переменная создается.

Так как объявления являются операторами языка, то могут использоваться там, где возможен любой другой оператор С++, напимер:

 

s = 0.3; d /= s;

// операторы- выражения

char sim;

// объявление переменной sim

int k = 5;

// объявление и задание начального значения переменной k;

d = s+2*k;

 

double f=s+d;

// одновременное объявление и использование переменной f;

f*=k;

Предполагается, что переменные s и d были объявлены ранее.

Составной оператор (или блок) представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:

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

Составной оператор должен использоваться там, где синтаксис языка требует наличие лишь одного оператора, а логика программы сразу нескольких. Заметим, что в конце составного оператора точка с запятой не ставится.

Пример составного оператора:

{i=5;

c=sin(i*x);

c++;

}

Пример блока:

{ double y; y= i*sin(x);

printf ("\n %e",y);

}

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

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

Имеется две формы условного оператора (схемы представлены на рис. 4.1.):

if (выражение) оператор1 else оператор2;

if (выражение) оператор.

Выполнение оператора if начинается с вычисления выражения. Далее выполнение осуществляется по следующей схеме:

1.если выражение истинно (отлично от 0), то выполняется оператор_1;

2.если выражение ложно (равно 0),то выполняется оператор_2;

3.если выражение ложно и отсутствует конструкция со словом else, то выполнение оператора if завершается.

true

Условие

false

true

Условие

false

 

 

Блок

 

Блок

Блок

 

 

операторов

 

операторов

операторов

 

 

Рис. 4.1. Схемы условного оператора

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Примеры:

 

if (a > b)

 

c = a - b;

// выполняется, если a > b

else c = b - a;

// выполняется, если a < b

… …

 

if (i < j)

 

i++;

 

else

 

{j = i - 3; i ++;}

// выполняется блок операторов

Воператорах if могут использоваться составные операторы (блоки операторов) там, где логика программы требует последовательности операторов. Допускается вложение оператора if, как в конструкцию if, так и в конструкцию else другого оператора if. Если во вложенных конструкциях фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.

Пример: int main ( )

{

int t=2, b=7, r=3; if (t>b)

{

if (b<r) r=b;

}

else r=t; return (0);

}

Врезультате выполнения этой программы r = 2, так как оператор else связан с первым оператором if. Если же в программе опустить фигурные скобки, стоящие после оператора if, то логика программы

изменится.

int main ( )

{

int t=2,b=7,r=3; if ( a>b )

if ( b<c ) t=b; else r=t; return (0);

}

В этом случае r = 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if. Аналог программы можно записать в следующем виде:

int main ( )

{

int t=2,b=7,r=3; if ( a>b )

{if ( b<c ) t=b; else r=t;

}

return (0);

}

Количество вложенных операторов if не ограничено, следующий фрагмент программы и схема (рис. 4.2.) иллюстрирует это:

char ZNAC; int x,y,z;

if (ZNAC == '-') x = y - z;

else

if (ZNAC == '+') x = y + z;

else

if (ZNAC == '*') x = y * z;

 

else

if (ZNAC == '/') x = y / z;

...

 

else ….

 

 

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

 

 

 

условие 1

 

 

 

 

 

 

true

false

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

условие 2

 

 

 

 

 

 

 

true

 

false

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок

 

Блок

 

 

 

 

Блок

операторов 1

 

операторов 2

 

 

 

 

операторов 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.2. Схема вложенных операторов if

Пример показывает, что конструкции со вложенными операторами if, фактически обеспечивают выбор одного варианта из многих возможных, на блок-схеме каждая альтернатива выбора это блок операторов. Однако такое решение представляется довольно громоздким и не всегда достаточно надежным. Другим

способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.

4.5. Оператор выбора switch

Если в алгоритме присутствуют более трех вариантов (альтернатив) выбора, то следует использовать оператор switch. Его часто называют селективным оператором, переключателем или

оператором выбора. Оператор switch передает управление одному из нескольких помеченных специальными метками операторов в зависимости от значения целочисленного выражения. Специальные метки начинаются с ключевого слова case и являются целочисленными константами.

Оператор имеет следующий вид: switch (целое_выражение )

{ [объявления]

[case константное_выражение1:] [операторы]

[case константное_выражение2: ] [операторы]

. . .

[case константное_выражение n:] [операторы]

[default:] [операторы]

}

Выражение в круглых скобках, может быть любым допустимым выражением языка С, значение которого должно быть целым.

Схема выполнения оператора switch представлена на рис. 4.3.:

Вычисляется выражение в круглых скобках (назовем его селектором).

Значение селектора последовательно сравнивается с метками в теле оператора switch , если селектор и константное выражение метки равны, то управление передается оператору, помеченному данной меткой.

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

Если default отсутствует, то управление передается следующему за switch оператору.

Пример: int x;

...

switch (x)

{case 5: printf("x равно 5\n"); break;

case 2:

case 10: printf("x равно либо 2, либо 10\n");

 

break;

default:

rintf("x не равно 5, 2, 10\n");

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

break;

}

Рис. 4.3. Селективный оператор switch

Каждый вариант оператора switch начинается меткой (case 5, case 2, case 10 или default) и заканчивается оператором break. Исключение составляет вариант case 2: у которого нет "своих" операторов. Дело в том, что switch, выбрав один из вариантов, не заканчивает автоматически выполнение, дойдя до следующего варианта он исполняет все операторы, идущие дальше, вплоть до конца своего блока или до ключевого слова break, которое прекращает выполнение оператора. Если мы уберем, например, первый break, то при х==5 увидим сначала сообщение от первого printf(), затем от второго.

Следующий пример показывает, что оператор switch представляет собой структуру, построенную по принципу меню, он содержит варианты условий и инструкции, которые следует выполнить в каждом конкретном случае.

Пример: Программа реализующая функции калькулятора "+" "-" "*" "/" #include <iostream.h>

#include <stdio.h> void main() { char znak; double x, y, z;

do {

cout<<"Задайте знак операции + - * / \n"; cin>>znak;

cout<<"Задайте x и y \n"; cin>>x>>y;

switch (znak)

{case '+': z= x + y; break; case '-': z= x - y; break; case '*': z= x * y; break; case '/': if ( y == 0 )

cout<<"Делить на нуль нельзя!\n";

else z = x / y; break;

default: { cout<<"Неизвестная операция!\n"; continue;

}

}

cout<<x<<znak<<y<<'='<<z<<endl;

}

while (znak!='&');

}

Программа запрашивает информацию (знак операции и два числа) и проводит соответствующую операцию, пока вместо знака не введут символ &. Если вводится знак, отличный от разрешённых ("+""- ""*""/"), то программа выдает сообщение об ошибке и начинает новый проход цикла (по директиве continue). При корректном вводе на экран выдается формула и результат вычисления.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

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