О программировании ветвлений в С++

Исследование особенностей организации системы ветвлений в языке программирования С++. Анализ базового уровня данной системы. Описание формата инструкции if. Правила построения логических выражений. Инструкция switch (структура множественного выбора).

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 21.01.2018
Размер файла 16,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

О программировании ветвлений в С++

Дмитриев Владислав Леонидович

В самом простом случае компьютерная программа выполняется по порядку, строка за строкой. Однако в подавляющем большинстве случаев на каком-то этапе выполнения потребуется изменить ход выполнения программы в зависимости от результатов, полученных в предыдущих выражениях. В таком случае необходимо проверить выполнение некоторых условий, и изменить ход выполнения программы в соответствии с ними. Для программирования ветвлений в языке C++ имеются инструкции if…else и switch, а также тернарная операция (?:).

Инструкция выбора if…else

Выполняет указанное в ней действие, только если условие истинно и пропускает его в ином случае. Инструкция (структура) if…else позволяет определить различные действия, которые должны выполняться в случаях, если условие истинно или ложно. Допускается использование вложенных инструкций if. Формат инструкции if имеет вид

if (логическое выражение) выражение-1; else выражение-2;

или

if (логическое выражение) выражение-1;

При этом выражение-1 и выражение-2 могут быть составными (т.е. представлять собой совокупность последовательно выполняемых выражений, заключенных в операторные скобки), или в более общем случае -- структурированными. Отметим также, что вложенная структура if…else может работать гораздо быстрее, чем серия структур if с единственным выбором вследствие возможности быстрого выхода после удовлетворения одному из условий.

При построении логических выражений участвуют логические операторы, наиболее часто используются операторы (&&), (||), (!). Операторы (&&) и (||) вычисляют второй аргумент только в случае, если в этом есть необходимость. Так, например, в выражении

if (a>b && c>100) a=c;

вначале проверяется первое условие a>b, а проверка условия c>100 будет осуществляться только в том случае, если первое условие истинно. В выражении

if (a>b || c!=0) a=c;

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

При написании условий можно объявлять переменную прямо в условии. В этом случае область видимости такой переменной будет простираться от точки ее объявления до конца инструкции, контролируемой условием. Если в инструкции if есть ветвь else, область видимости такой переменной простирается на обе ветви. При этом объявление в условии должно объявлять и инициализировать единственную переменную или константу.

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

Ниже в качестве примера приводится текст программы, выводящей на экран значение корня из указанного числа, если число является полным квадратом, и "No" в противном случае.

#include

#include

#include

using namespace std;

long f (long a)

{long s=pow(a,0.5);

if (s*s == a) return s; else return 0;}

int main()

{ long ch;

cout<<"ch= "; cin>>ch;

if (long sum = f(ch)) cout<<"Yes: "< else cout<<"No";

getch(); return 0;}

Ясно, что для решения такой простой задачи нет смысла писать отдельную функцию, -- в данном случае это сделано лишь для демонстрации возможности объявления переменной в условии.

Условная операция ?:

В С++ имеется еще условная операция (?:) -- единственная тернарная операция в С++ с тремя операндами, которая близка к структуре if…else. Первый операнд является условием, второй -- содержит значение условного выражения в случае, если условие истинно, а третий операнд равен значению условного выражения, если условие ложно. Например, оператор вывода

cout << ( a >=10 ? "Да" : "Нет");

содержит условное выражение, равное строке "Да", если условие a>=10 истинно, и равно строке "Нет", если оно ложно. Т.к. условная операция имеет низкое старшинство, в приведенном выражении потребовались скобки. Значения условного выражения могут быть также некоторыми исполняемыми действиями.

Например, условное выражение

a >=10 ? cout << "Да \n" : cout << "Нет \n";

следует понимать так: «Если значение переменной a больше или равно 10, то выдать строку "Да", иначе строку "Нет"».

Инструкция switch (структура множественного выбора)

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

Инструкция switch состоит из ряда меток case и необязательной метки default. Структура инструкции имеет вид:

switch (a) {

case a1: выражение-1; break;

case a2: выражение-2; break;

…………………………...;

case aN: выражение-N; break;

default: выражение-0; break; }

Здесь a -- выражение любого целого типа (в том числе и символьного), значение которого вычисляется; a1, a2, …, aN -- константы, с которыми сравнивается значение выражения a; выражение-0 -- выражение, которое выполняется, если значение выражения a не совпадает ни с одной из констант a1, a2, …, aN.

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

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

Как было отмечено выше, важной особенностью языка C++ является то, что символы могут храниться в любом целом типе данных, поскольку они представляются как однобайтовое целое. Это означает, что можно трактовать символ или как целое, или как символ, в зависимости от его использования. Например, выражение

cout<<"Символ (a) в ASCII имеет значение "< ('a');

напечатает символ a и его целочисленное представление в таблице ASCII (American Standard Code for Information Interchange) в виде:

Символ (a) в ASCII имеет значение 97

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

Пример использования инструкции switch приведен ниже.

Задача

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

#include

#include

#include

using namespace std;

int main()

{ float a,h,S; //сторона, высота и площадь треугольника

float r,R; //радиус вписанной и описанной окружностей

int variant; //номер сделанного выбора (вариант выбора)

system("cls");

cout<<"Выберите известный параметр из списка: "<>variant;

system("cls");

switch (variant) {

case 1: cout<<"Введите сторону треугольника"<>a;

cout<<"Высота треугольника h="

<>h;

cout<<"Сторона треугольника a="<<2*h/sqrt(3)<>S;

cout<<"Сторона треугольника a="

<>r;

cout<<"Сторона треугольника a="<<2*r*sqrt(3)<>R;

cout<<"Сторона треугольника a="<

Инструкция goto (безусловного перехода)

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

Одной меткой можно пометить только одно выражение. Метка от помеченного выражения отделяется двоеточием. Имя метки -- это идентификатор. Формат инструкции следующий:

goto имя-метки;

………………..;

имя-метки: выражение;

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

Размещено на Allbest.ru


Подобные документы

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

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

    курсовая работа [1,5 M], добавлен 25.01.2016

  • Состав операционной системы Windows. Объектно-ориентированные особенности языка Delphi. Основные типы данных. Анализ предметной области. Операторы организации ветвлений. Процедуры, массивы, записи, указатели, списки, модули. Комплекс технических средств.

    курсовая работа [2,1 M], добавлен 14.10.2014

  • Приемы работы с инструментальной средой программирования С++. Кодирование арифметических и логических выражений с использованием стандартных библиотечных функций ввода, вывода в С++. Описание переменной вещественного типа в языке программирования С++.

    лабораторная работа [137,9 K], добавлен 13.06.2014

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

    курсовая работа [75,0 K], добавлен 21.03.2013

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

    презентация [187,9 K], добавлен 02.04.2014

  • Ознакомление с формой записи и работой операторов условного if (если) и безусловного а goto (идти к) переходов как способами организации ветвления в программе. Изучение оператора выбора альтернативы - switch (переключатель). Использование функции default.

    лабораторная работа [72,0 K], добавлен 15.07.2010

  • Разработка программ с использованием оператора выбора Switch. Программирование компьютерной игры в карты. Составление программы, которая по введенным значениям и номеру действия выполняет действия над числами. Тестирование работоспособности программы.

    лабораторная работа [1,2 M], добавлен 23.11.2014

  • Инструкции выбора if, switch, цикла for, while, do-while, перехода break, continue, goto и возврата return. Понятие и функциональные особенности указателя, операции над ними, передача параметров функции. Связь массивов и указателей – генерация указателя.

    презентация [94,8 K], добавлен 19.10.2014

  • Описание структуры микроконтроллера AT90mega103 и интегрированной системы его программирования на языке Ассемблер. Создание нового файла и его сохранение. Инициализация микропроцессорной системы командой Ran/Program/Reset/, описание шагов программы.

    лабораторная работа [330,6 K], добавлен 26.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.