ЗНАЕТЕ ЛИ ВЫ?

Операторы цикла. Цикл do while.



От двух предыдущих циклов он отличается тем, что это цикл с постусловием. Это означает, что сначала выпол­няется тело цикла и только после этого оценивается условие продолжения цикла. Если в результате оценки получается логическое значение false, тогда данный цикл завершается. В противном случае начинается но­вый этап выполнения и проверки цикла. Подобный цикл всегда выполняется, по крайней мере, один раз, поскольку процесс выполнения программы должен пройти тело цикла, прежде чем будет осуществлена проверка условия продолжения. Ниже приведен синтак­сис рассматриваемого цикла:

do

Тело цикла

while (условие продолжения цикла);

 

Тело рассматриваемого цикла может состоять из од­ного оператора или ограниченного фигурными скобка­ми блока операторов.

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

 

Пример.

int i=0;

do

{

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

i++;

}while(i<100);

 

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

Пример:

int i=0;

while(i<100);

{

i++;

// операторы

}

Здесь из-за незаметно указанного знака точки с запятой после оператора while компилятор полагает, что повторяемый в цикле оператор – это не составной оператор, заключенный в фигурные скобки, а пустой оператор. Значение i не увеличивается, и логическое выражение (i<100) при проверке всегда дает значение ИСТИНА.

 

Операторы цикла.

Операторы break и continue.

 

Операторы break и continue позволяют программе про­пускать фрагменты кода. Оператор break исполь­зуется в операторе ветвления switch,о котором речь пойдет позже, и влюбых циклах. Этот опе­ратор вызывает переход к оператору, следующему за оператором цикла.

Оператор continue ис­пользуется в циклах и приводит к тому, что программа пропускает остальную часть тела цикла и начинает но­вую итерацию цикла (см. рис.).

 

 

В цикле for оператор continue заставляет програм­му перейти непосредственно к выражению обновления, а затем к проверочному выражению. Однако в цикле while оператор continue заставляет программу перейти непосредственно к проверочному выражению. Таким образом, любое выражение обновления в теле цикла while, следующее за continue, будет пропущено. В ряде случаев это может создавать проблему.

Пример:

for(i=1;i<100;i++)

{

// операторы

if(какое-то условие) continue;

// операторы

}

While(какое-то условие)

{

// операторы

if(какое-то условие) break;

// операторы

}

 

 

Операторы ветвления.

Оператор if.

 

Когда программе C++ нужно решить, выполнять ли заданное действие, можно использовать оператор if. Этот оператор имеет две формы: if и if else. Вна­чале рассмотрим более простую форму — if. Оператор if приводит к тому, что программа выполняет оператор или группу операторов, если про­верочное условие ИСТИННО, и пропускает этот оператор или группу операторов, если условие ЛОЖНО. Синтаксис этой формы оператора if следующий:

 

if(проверочное условие)

Оператор

 

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

Чаше всего проверочное условие— это выражение сравнения, подобное тем, что используются для управ­ления циклами.

Пример:

double i,j;

if(i>0.0) j=sqrt(i);

 

Следующая форма оператора if определяет составной оператор, когда по условию выполняется группа операторов в блоке.

if(проверочное условие)

{

оператор 1;

оператор 2;

оператор n;

}

Простая форма оператора if позволяет выбрать оператор, возможно, составной, или пропустить его. Язык Си предоставляет также возможность выбрать любой из двух операторов путем использования конструкции if-else.

Общий вид оператора if-else выглядит следующим образом:

 

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

Если проверочное выражение ИСТИННО, то выполняется первый оператор и пропускается второй оператор, а если ЛОЖНО, то выполняется оператор, следующий за ключевым словом else. Операторы могут быть простыми или составными, заключенными в фигурные скобки. В случае составных операторов, в отличие от некоторых языков программирования, например, таких как BASIC или FORTRAN С++ не считает автоматически блоком все, что располагается между операторами if-else, поэтому для заключения операторов в блок необходимо использовать фигурные скобки.

 

Пример:

double i,j;

if(i>0.0){ j=sqrt(i); printf(“j=%g\n”,j);}else{ j=sqrt(fabs(i)); printf(“j=%g\n”,j);}

Итак, простая конструкция if позволяет выбрать, выполнить или нет некоторое действие; конструкция же if-else дает возможность выбрать одно из двух действий.

Конструкция if else if else

Компьютерные программы, как и реальная жизнь, мо­гут ставить вас перед необходимостью выбора более чем из двух возможных вариантов. Для удовлетворения этой потребности можно расширить возможности оператора if else C++. Как было показано ранее, за ключевым сло­вом else должен следовать единый оператор, который может быть также и блоком. Поскольку if else сам является еди­ным оператором, он может следовать за else:

int i,j;

if(i>0)

j--;

else if(i<0)

j++;

Else

j=0;

Это выглядит подобно новой управляющей структуре if else if else, но на самом деле это один оператор if else, содержащийся внутри другого.

 

Операторы ветвления.

Операторы switch break.

 

Часто возникающая в программировании задача – выбор одного варианта из многих. Это можно сделать с помощью вложенных if … else. Однако более удобный способ – использовать оператор switch, общий формат которого таков:

switch(expression) { сase constant1: statement1; break; case constant2: statement2; break; ... case constantk: statementk; break; default: statement(k+1);}

Оператор switch выполняется так. Сначала вычисляется значение выражения expression. Тип значения должен быть одним из целых – char, int, unsigned int, long int, unsigned long. Вычисленное значение сравнивается со значениями констант или константных выражений constant1,…, constantk.При совпадении значения expression с константным выражением constantkвыполняется оператор statementk.Оператор может быть единичным, а может быть представлен группой операторов. Операторы внутри группы не обрамляются фигурными скобками, а просто отделяются друг от друга точкой с запятой. После выполнения данных операторов управление передается оператору, следующему сразу после switch, если в данной ветке присутствует оператор break. Если такой оператор отсутствует, то выполняются нижеследующие ветви, пока не встретится оператор break или не будет выполнен оператор statement(k+1).

Если выражение expression не совпало ни с одной из констант constant1,…, constantk, выполняется оператор в ветви, помеченный как default. При отсутствии этой ветви выполняется следующий после switchоператор.

Пример:

 

double res;

// переменная, хранящая первую букву

// выполняемой функции

char operation;

// значение угла

double ugol_rad;

// задание operation какого-то значения

// задание ugol_rad какого-то значения

// реализация выбораswitch(operation) { сase ‘s’: сase ‘S’: res=sin(ugol_rad); printf(“Вычислен синус\n”); break; сase ‘c’: сase ‘C’: res=cos(ugol_rad); printf(“Вычислен косинус\n”); break; сase ‘t’: сase ‘T’: res=tan(ugol_rad); printf(“Вычислен тангенс\n”); break; default: printf(“Ошибка\n”);}

 

Типичная ошибка, допускаемая с оператором switch, - когда программист забывает ставить оператор break. В этом случае выполняется и данная ветка, и как минимум следующая. Например, уберем в предыдущем примере все операторы break.Если перед входом в оператор switch переменная operationимеет значение ‘s’, то на экран будет выведено следующее:

Вычислен синусВычислен косинусВычислен тангенсОшибка

 

То есть, программа пройдется по всем веткам. Если перед входом в оператор switch переменная operationимеет значение ‘t’, то на экран будет выведено следующее:

Вычислен тангенсОшибка

 

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

 

Ввод-вывод данных.

 

Ситуация с вводом-выводом в языке С++

 

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

В языках С и С++ не было и нет особых операторов для ввода или вывода данных. Причиной этого является как слишком большое разнообразие операций ввода и вывода в разных операционных системах, особенно графических, так и возможность определения новых типов данных в языке С++. Вывод даже простой строки текста в MS DOS, MS Windows и в X Window настолько различен, что пытаться придумать общие для всех них операторы было бы слишком негибко и на самом деле затруднило бы работу. Что же говорить о классах, определенных программистом, у которых могут быть совершенно специфические требования к их вводу-выводу.

Первоначально в языке С реализация ввода/вывода была оставлена на усмотрение раз­работчиков компиляторов. В результате разработчики получили творческую свободу при создании функций ввода/вывода данных, которые наилучшим образом смогут удовлет­ворять аппаратные запросы компьютера. На практике большинство разработчиков для вво­да/вывода использовали набор функций, первоначально разработанных для среды UNIX. В стандарте С было формализовано применение этого пакета, названного пакетом стандартного ввода/вывода (Standart Input/Output): он был сделан обязательным компонен­том стандартной библиотеки С. В языке C++ также поддерживается данный пакет, поэтому те, кто знаком с семейством функций С, объявленных в файле stdio.h, могут использо­вать их и в программах, написанных на C++.

Однако в C++ чаще используется ввод/вывод в стиле C++, а не в стиле языка С. Это делается при помощи набора классов, стандартно поставляемых вместе с компилятором, которые и реализуют основные операции ввода-вывода. Функционал библиотеки определен в заголовочных файлах iostream (ранее iostream.h) и fstream (ранее fstream.h). Классы – это специальные, особые типы данных, создаваемые программистом, которые в своём составе содержат как непосредственно данные, так и функции, работающие с этими данными.

 





Последнее изменение этой страницы: 2016-04-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.204.42.98 (0.008 с.)