Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операторы цикла. Цикл 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; просмотров: 815; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.6.144 (0.008 с.) |