Конструкция 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-22; просмотров: 679;