2810

Операторы как конструкторы языка

Лекция

Информатика, кибернетика и программирование

Лекция Операторы Оператор – это конструкция языка C, которая определяет для компилятора конечный набор действий. Пустой оператор. Пустой оператор состоит только из точки с запятой. Форма записи, При выполнении этого оператора ничего не п...

Русский

2012-10-19

62 KB

8 чел.

Лекция 9-10

Операторы

Оператор – это конструкция языка C, которая определяет для компилятора конечный набор действий.

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

Пустой оператор состоит только из точки с запятой.

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

;

При выполнении этого оператора ничего не происходит. Он обычно используется в следующих случаях:

  •  в операторах do, for, while, if в строках, когда по синтаксису требуется хотя бы один оператор, но никаких действий производить не нужно;
  •  при необходимости пометить фигурную скобку.

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

Пример 1

{

if (...) goto a;  

 { ...

}

a: ;

}

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

Любое выражение, которое заканчивается точкой с запятой, является оператором. Действия при выполнении такого оператора – вычисление выражения.

Форма записи: выражение;

Составной оператор (блок-оператор).

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

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

{

}

В конце составного оператора точка с запятой не ставится. Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.

Условные операторы «if-else».

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

if(условие) оператор1

else оператор2

Если значение условия «истинно» (ненулевое), то выполняется оператор1, если «ложно» (нулевое) - то выполняется оператор2. После этого выполняется следующий по тексту оператор программы. В качестве условия может стоять произвольное выражение. Оператор1 и оператор2 могут быть любыми операторами языка C, в том числе составными или пустыми операторами. Возможна иная форма записи, когда вторая часть отсутствует:

if(условие) оператор1

В этом случае, если значение условия «истинно», то выполняется оператор1, если «ложно» - то выполняется следующий по тексту оператор программы.

Пример 2

int a=1,b=0;

if(a==1)

{

printf("a");

b++;

}

else printf("b");

printf("c");

if(b) printf("d");

На экране будет напечатано: acd

Операторы «if-else» допускают вложенность, уровень вложенности не ограничен. Вложенными будут следующие конструкции:

if(условие1)

 if(условие2) оператор1

 else оператор2

или

if(условие1) оператор1

 else if(условие2) оператор2

В этой форме условия операторов «if-else» проверяются сверху вниз, действия операторов те же, что и в обычной форме записи.

Пример 3

int a=1,b=0,c=0;

if(a)

if(b)printf("a");

else if(c);

       else printf("c");

На экране будет напечатано: c

Каждый оператор «else» ассоциируется с ближайшим предшествующим ему оператором «if» из того же блока, что и «else», с которым еще не ассоциирован никакой оператор «else». Сначала устанавливаются ассоциации для пары операторов «if-else», которые ни имеют в себе других составных операторов «if-else». Каждый оператор «else» должен иметь оператор «if», с которым его можно было бы ассоциировать. Для уменьшения вероятности совершения ошибки рекомендуется при вложении оператора «if» в другие операторы «if» использовать составные операторы.

Пример 4

int a=0,b=0;

if(a)

if(b)printf("a");

else printf("b");

else printf("c");

На экране будет напечатано: c

Пример 5

int a=1,b=0;

if(a)

if(b)printf("a");

else printf("b");

else printf("c");

На экране будет напечатано: b

Пример 6

int a=0,b=1;

if(a)

{

if(b)printf("a");

}

else printf("c");

На экране будет напечатано: c

Пример 7

int a=1,b=0;

if(a)

{

if(b)printf("a");

else printf("b");

else printf("c");

}

При компиляции будет выдана ошибка.

Оператор множественного выбора «switch» и оператор разрыва «break».

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

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

{   

объявления

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

 break;

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

 break;

:

default: список_операторов

 break;

}

Оператор «switch» осуществляет выбор одной из нескольких ветвей программы в зависимости от значения выражения в круглых скобках, которое может быть любым выражением, допустимым в языке C, значение которого должно быть целым. Тело оператора «switch» состоит из нескольких списков операторов, помеченных ключевым словом «case» с последующим константным выражением, в качестве которого обычно используются целые или символьные константы. За константным выражением следует двоеточие ‘:’. Все константные выражения должны быть уникальны в пределах оператора «switch». Кроме списков операторов, помеченных ключевым словом «case», может быть, но обязательно один, список операторов, помеченный ключевым словом «default». Список операторов может быть пустым, либо содержать последовательность операторов, которую не требуется заключать в фигурные скобки, в данном списке не рекомендуется использовать условные и циклические операторы. В операторе «switch» можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом «case», однако в объявлениях не должна использоваться инициализация.

Схема выполнения оператора «switch» следующая:

  •  вычисляется выражение в круглых скобках;
  •  вычисленное значение последовательно сравнивается с константными выражениями, следующими за ключевыми словами «case»;
  •  если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом «case», и выполняются все следующие за ним операторы в теле «switch», а все следующие ключевые слова «case» и «default» игнорируются, и записанные после них операторы выполняются независимо от значений меток;
  •  если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом «default», а в случае его отсутствия управление передается на следующий после «switch» оператор.

Для прерывания выполнения последовательности операторов, соответствующих определённой метке «case» или «default», используется оператор «break». Оператор «break» обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов «switch», «do», «for», «while». Использование оператора «break» позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора «switch» путем передачи управления оператору, следующему за «switch».

Пример 8

int a=1;

switch(a)

{

int b;

case 0:

 b=a+1;

 printf("0 ");

 break;

case 1:

 printf("1 ");

 break;

case 2:

 printf("2 ");

 break;

default:

 printf("unknown");

}

На экране будет напечатано: 1

Конструкция со словом «default» может быть не последней в теле оператора «switch».

Пример 9

int a=1;

switch(a)

{

 case 0:

 printf("0 ");

 default:

 printf("unknown");

 case 1:

 printf("1 ");

case 2:

 printf("2 ");

 break;

 case 3:

 printf("3 ");

}

На экране будет напечатано: 1 2

Слова «case», «break» и «default», а также объявления внутренних переменных могут отсутствовать.

Пример 10

switch(0)

{

}

Оператор пошагового цикла «for».

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

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

Выражение1 является инициализирующим выражением и вычисляется один раз при вхождении в цикл, может содержать объявление и инициализацию переменных. Выражение2 является условным выражением выхода из цикла и вычисляется всякий раз перед началом новой итерации цикла. Выражение3 является модифицирующим выражением и вычисляется всякий раз по окончании очередной итерации цикла. Оператор может быть любым оператором языка C, обычно он называется телом цикла.

Схема выполнения оператора «for»:

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

2. Вычисляется выражение2, и если его значение «ложно», выполнение цикла прекращается, управление передаётся следующему за телом цикла оператору.

3. Если значения выражения2 «истинно» (отлично от нуля), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2.

Цикл «for» может иметь любое количество уровней вложенности.

В общем случае может отсутствовать любое выражение (в том числе и все). Если выражение2 отсутствует, то оператор «for» образует бесконечный цикл, выйти из которого можно, используя операторы «break», «goto», «return» или функции, завершающие выполнение программы (например, exit()).

Пример 11

for(int a=1;a<0;a++)

printf("a");

for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

{

 printf("%d ",j);

 if(j==1)

  j++;

 }

На экране будет напечатано: 0 1 0 1

Пример 12

for(int i=0;;i++)

{

printf("%d ",i);

if(i==2)

 break;

}

На экране будет напечатано: 0 1 2

Циклы с предусловием (оператор «while») и с постусловием (операторы «do-while»).

Форма записи цикла с предусловием:

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

Форма записи цикла с постусловием:

do оператор

while(выражение);

Выражение является условным выражением выхода из цикла. Оператор (тело цикла) – любой оператор языка C.

Схема выполнения оператора «while»:

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

2. Если выражение «ложно», то выполнение оператора «while» заканчивается и выполняется следующий по порядку оператор. Если выражение «истинно», то выполняется тело оператора «while». Процесс повторяется с пункта 1.

Схема выполнения оператора «do-while»:

1. Выполняется тело цикла.

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

3. Если выражение «ложно», то выполнение оператора «do-while» заканчивается и выполняется следующий по порядку оператор. Если выражение «истинно», то выполнение оператора продолжается с пункта 1.

Операторы «while» и «do-while» могут быть вложенными, уровень вложенности не ограничен.

Отличие оператора «do-while» от «while» и «for» заключается в том, что тело цикла выполнится хотя бы один раз, независимо от условного выражения.

Пример 13

int i=0;

do{

printf("%d ",i);

i++;

}while (i!=2&&i!=0);

while(i!=0)

{

printf("%d ",i);

 i--;

}

На экране будет напечатано: 0 1 2 1

Использование оператора «break» в циклах.

Оператор «break» может быть использован в программе для немедленного прекращение выполнения самого внутреннего из объединяющих его циклических операторов вне зависимости от условия выхода из цикла.

Пример 14

for(int i=0;i<2;i++)

for(int j=0;j<5;j++)

{

 printf("%d ",j);

 if(j==2)

  break;

 }

На экране будет напечатано: 0 1 2 0 1 2

Оператор продолжения «continue».

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

continue;

Оператор «continue» используется для завершения текущей итерации цикла и передачи управления на начало следующей итерации (в циклах «while» и «do-while» – на проверку условия, в цикле «for» – на приращение). Этот оператор используется, если необходимо закончить текущую итерацию цикла без выхода из цикла и не выполнять оставшиеся операторы.

Пример 15

for(int i=0;i<5;i++)

{

if(i>2)

 continue;

printf("%d ",i);

}

На экране будет напечатано: 0 1 2

Оператор безусловного перехода «goto».

Использование оператора безусловного перехода «goto» в практике программирования на языке C настоятельно не рекомендуется, так как он затрудняет понимание программ и возможность их модификаций.

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

goto метка;

Метка – это идентификатор, за которым следует двоеточие. Метка должна находиться в той же функции, что и оператор «goto», и быть в пределах функции уникальной. Появления оператора «goto» в некотором месте программы приводит к передаче управления на оператор, стоящий за меткой. Оператор «goto» не может передать управление в тело оператора «switch». Метка на ход выполнения программы не влияет.

Пример 16

int i=0;

start:

i++;

if(i==2)

goto finish;

printf("%d ",i);

goto start;

finish:

printf("%d ",i);

На экране будет напечатано: 1 2


 

А также другие работы, которые могут Вас заинтересовать

21502. ИНФУЗИОННО-ТРАНСФУЗИОННАЯ ТЕРАПИЯ ПРИ КРИТИЧЕС 24.5 KB
  Влияние инфузионной терапии на организм. Методы и техника проведения инфузионной терапии. Техническое обеспечение инфузионной терапии. Осложнения инфузионной терапии.
21503. Инфузионно-трансфузионная терапия при критических состояниях 136 KB
  Ее развитие определялось прежде всего уровнем научных разработок по изучению электролитного состава крови для поддержания ионного равновесия плазмы придания ей коллоидных и питательных свойств и создания в конечном итоге оптимальных по составу кровезамещающих растворов пригодных для терапии тех или иных заболеваний. Поэтому в это время появляются ряд новых препаратов созданных на основе солевых растворов с добавлением гомогенной или обработанной физическими или химическими методами гетерогенной плазмы крови жидкость Петрова сыворотка...
21504. Коррекция нарушений водно-солевого обмена 263 KB
  Скорость внутривенного введения К не более 20 ммоль ч 1 г КCl соответствует 136 ммоль К; при более быстром введении возникает опасность остановки сердца. Концентрация Na в плазме крови становится выше 147 ммоль л точно отражает дефицит свободной воды.массу тела кг 142 где сNaпл концентрация Na в плазме крови больного ммоль л; 142 концентрация Na в плазме крови ммоль л в норме; 06 60 содержание всей воды в организме по отношению к массе телал. Изотоническая дегидратация означает истинный дефицит Na в организме так как...
21505. ИНЖЕНЕРНО-ТЕХНИЧЕСКОЕ И МЕТРОЛОГИЧЕСКОЕ ОБЕСПЕЧЕНИЕ СРЕДСТВ ИЗМЕРЕНИЙ АППАРАТОВ ИСКУССТВЕННОЙ ВЕНТИЛЯЦИИ ЛЕГКИХ И ИНГАЛЯЦИОННОГО НАРКОЗА 183 KB
  ЦЕЛЕВОЕ НАЗНАЧЕНИЕ ЛЕКЦИИ: представить данные свидетельствующие значимость проблемы инженернотехнического и метрологического обеспечения средств измерений аппаратов ИВЛ ИН; ознакомить слушателей с необходимостью срочного решения проблемы в лечебных учреждениях; представить основные пути совершенствования инженернотехнического и метрологического обеспечения средств измерений аппаратов ИВЛ ИН; ознакомить с протоколом действий €œМетрологической проверки средств измерений аппаратов ИВЛ ИН. Состояние инженернотехнического и...
21506. Структурно-функциональные связи легких, воздухоносных путей и паренхимы легких 226 KB
  Структурнофункциональные связи легких воздухоносных путей и паренхимы легких 1.1 Структура воздухоносных путей паренхимы легких Механика дыхания Распределение вентиляции 2. Легочное кровообращение и его отношение к вентиляции Легочное кровообращение Вентиляционноперфузионные отношения Обмен газов и их транспорт Обмен газов в легких Транспорт газов к периферическим тканям и в обратном направлении Регуляция дыхания Основная функция легких обмен газов: поглощение кислорода из окружающей среды удаление из организма двуокиси кислорода....
21507. РЕСПИРАТОРНЫЙ ДИСТРЕСС-СИНДРОМ ВЗРОСЛЫХ 366 KB
  Этиология РДСВ.Petti описал РДСВ ARDSкак синдром острой дыхательной недостаточности характеризуемой некардиогенным отеком легких с тяжелой гипоксемией вызываемой интрапульмональным шунтированием справа налево с вторичным ателектазированием и заполнением воздушного пространства отечной жидкостью. О распостранености РДСВ дают представления следующие данные: в США частота распостранения РДСВ составляет 06 1000при этом летальность на 150000 случаев РДСВ приблизительно равна 5060 в то же время WebsterCohen и...
21508. Деполяризующий и недеполяризующий блок 41 KB
  Механизм действия Деполяризующие миорелаксанты по структуре напоминающие ацетилхолин взаимодействуют с нхолинорецепторами и вызывают потенциал действия мышечной клетки. Однако в отличие от ацетилхолина деполяризующие миорелаксанты не гидролизуются ацетилхолинэстеразой и их концентрация в синаптической щели достаточно долго не снижается что вызывает длительную деполяризацию конечной пластинки. Деполяризующие и недеполяризующие миорелаксанты Деполяризующие миорелаксанты Недеполяризующие миорелаксанты Короткого действия Длительного...
21509. МИОРЕЛАКСАНТЫ, ИХ ПРИМЕНЕНИЕ В АНЕСТЕЗИОЛОГИИ И РЕАНИМАТОЛОГИИ 186 KB
  Классификация миорелаксантов по химической структуре Дериваты изохинолина Дериваты стероидов Другие препараты Атракурий Доксакурий Метокурий Мивакурий Тубокурарин Панкуроний Пипекуроний Рокуроний Векуроний Галламин Сукцинилхолин По механизму действия миорелаксанты подразделяют на 2 класса: деполяризующие и недеполяризующие. Таблица 2 Классификация миорелаксантов по механизму и длительности действия Деполяризующие Недеполяризующие Короткого действия сукцинилхолин дитилин декаметоний мивакурий мивакрон Средней продолжительности атракурий...
21510. НОВЫЕ ФАРМАКОЛОГИЧЕСКИЕ СРЕДСТВА И МЕТОДЫ ПРИ ОКАЗАНИИ АНЕСТЕЗИОЛОГИЧЕСКОЙ ПОМОЩИ 117 KB
  ФАРМАКОЛОГИЧЕСКИЕ АСПЕКТЫ КЛИНИЧЕСКОГО ПРИМЕНЕНИЯ КЛОФЕЛИНА В АНЕСТЕЗИОЛОГИИ Клофелин клонидин синтезирован в 1962 г. Фармакологические эффекты клофелина: как агонист постсинаптических Ф2АР в ЦНС вызывает гипотензию брадикардию аналгезию седативный эффект способствует высвобождению гормонов роста. Периферическое действие клофелина проявляется в усилнии сокращений гладких мышц агрегации тромбоцитов липолизу угнетению секреции ринина и инсулина. При приеме внутрь абсорбция клофелина составляет практически 100.