Инструкции выбора в языке C++

Автор работы: Пользователь скрыл имя, 27 Октября 2013 в 18:20, контрольная работа

Краткое описание

В языке С++ такие понятия как операторы безусловного перехода (типа goto), ветвления (типа if), организации циклов (типа for, while) принято называть инструкциями, а операторы С++ были в основном рассмотрены на предыдущей лекции.
Специфика С++ такова, что объявление является инструкцией, а оператор присваивания и оператор вызова функции являются выражениями.

Прикрепленные файлы: 1 файл

lekc6.doc

— 80.50 Кб (Скачать документ)

Основы алгоритмизации и программирования  Лекция 6

1. Инструкции выбора в языке C++

 

В языке С++ такие понятия  как операторы безусловного перехода (типа goto), ветвления (типа if), организации циклов (типа for, while) принято называть инструкциями, а операторы С++  были в основном рассмотрены на предыдущей лекции.

 

Специфика С++ такова, что объявление является инструкцией, а оператор присваивания и оператор вызова функции являются выражениями.

 

!!! Объявления разрешается помещать в любом месте, где допустима инструкция и, кроме того, можно их размещать в условиях и в for-инструкциях.

 

Для организации ветвлений в  языке предусмотрены инструкции выбора if и switch, которые имеют следующий синтаксис: 

if (условие) инструкция

if  (условие) инструкция else инструкция

switch (условие) инструкция

 

В данном случае в if и switch соответствующие инструкции могут быть как простыми, так и составными. Составная инструкция – это последовательность инструкций, заключенных в фигурные скобки { и }.

 

При использовании if (условие) инструкция следует следить за правильным размещением знака ; (точка с запятой). Например, допустима следующая инструкция:  if(x>0); x=x+2;  В этом случае x всегда будет увеличиваться на 2 (это связано с наличием ; перед оператором присваивания, и эта ; трактуется как пустая инструкция).

 

Следующая инструкция в С++ будет ошибочной:

if (x>0) x=x+2 else x=x-2; // здесь перед else отсутствует  ; (точка с запятой)

if (x>0) x=x+2; else x=x-2; // правильная инструкция

if (x>0) x=x+2;; else x=x-2; // неправильная, лишняя ; (точка  с запятой)

 

Часто удобно вводить переменные в наименьшей возможной области видимости. Например, локальную переменную лучше объявлять в тот момент, когда ей надо присвоить значение, поскольку в этом случае исключаются попытки использования переменной до момента ее инициализации. Можно в С++ объявление разместить внутри условия, например допустима следующая последовательность инструкций:

     int y;

     cin >> y;

     if (int j=y) x=x*j+2;

 

Пример 1:  (демонстрируется использование инструкции if)

Написать программу  для определения принадлежности точки с координатами (x,y) следующей заштрихованной области (где значения a>0 и x,y вводятся с клавиатуры):

 

 

Для решения данной задачи необходимо формализовать процесс определения принадлежности точки с координатами (x,y) заштрихованной области.

 

Из рисунка  видно, что заштрихованную область можно декомпозировать на две составляющие: во II – IV четвертях область ограничивается окружностью радиуса a с центром в точке (0,0), а в I-й четверти граница определяется отрезком прямой, проходящей через точки с координатами (a,0) и (0,a).

 

Очевидно, что  координаты точек принадлежащих  заштрихованной области должны обязательно  удовлетворять условию x2+ y2<= a2. Однако для I-й четверти этого недостаточно.

 

Из курса  школьной геометрии известно, что  прямая y=kx+b разбивает плоскость на две полуплоскости, причем для всех точек из одной полуплоскости выполняется неравенство y<kx+b, а в другой полуплоскости выполняется неравенство y>kx+b. В данном случае необходимо построить уравнение прямой, проходящей через точки с координатами (a,0) и (0,a). Для этого решаем систему уравнений:

 

 
 

 

уравнение искомой прямой y=-x+a. Для удобства подставляем в левую и правую части координаты точки (0,0) и получаем: слева 0, справа 0+a. Значит, для всех точек полуплоскости выполняется неравенство y < -x+a.

 

Итак, чтобы точка с  координатами (x,y) принадлежала заштрихованной области необходимо, чтобы выполнялась cистема неравенств: , т.е. чтобы логическое выражение (x*x+y*y<=a*a) && (y<=-x+a) имело значение true.

 

 

Алгоритм  решения задачи:

  1. Ввести значение параметра a и координаты точки x и y;
  2. Вывести фразу ТОЧКА С КООРДИНАТАМИ (***, ***)
  3. Если логическое выражение !((x*x+y*y<=a*a) && (y<=-x+a)) имеет значение true, то вывести НЕ;
  4. Вывести ПРИНАДЛЕЖИТ ЗАШТРИХОВАННОЙ ОБЛАСТИ;

 

#include <iostream>

using namespace std;

 

int main()

setlocale(LC_ALL,"Russian");

   

double a,x,y; // определяем три переменные для размещения

             // значений параметра а и координаты точки

 

cout << "Введите a,x,y:"; 

cin >> a >> x >> y; // Вводим значение параметра а и

                         // координаты точки

 

cout << "\nТочка с координатами (" << x << ',' << y << ')';

 

// проверка  условия на НЕПРИНАДЛЕЖНОСТЬ заштрихованной области

if (!(x*x+y*y <= a*a && y <= -x+a)) cout << " НЕ";

 

cout << " ПРИНАДЛЕЖИТ ЗАШТРИХОВАННОЙ ОБЛАСТИ\n\n";

   

return 0;

}

 

Пример 2:  (демонстрируется вложение инструкций if)

Написать программу для вычисления значения функции f(x), где:

1) f(x)=sin(x), если x <= –10;

2) f(x)=cos(x), если x>=+10;

3) f(x)=x2, если x находится в интервале от –10  до  +10.

 

Алгоритм  решения задачи:

  1. Ввести значение аргумента x;
  2. Если x <= -10.0, то f=sin(x) и перейти на шаг 4);
  3. Если -10.0 < x <+10.0, то f= x2, а иначе f=cos(x);
  4. Вывести полученное значение f.

 

#include <iostream>

#include <math.h>

using namespace std;

 

int main()

setlocale(LC_ALL,"Russian");

 

double x,f;

 

cout << "Введите x:";  cin >> x;

   

    if (x<=-10.0) f=sin(x);  

        else

        if (x>-10.0 && x<10.0) f=x*x;  

  else   f=cos(x);

 

    cout << "Результат: f(" << x << ")=" << f << endl;

 

return 0;

 

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

 

case  целое_постоянное_выражение :

 

Обычно действие, выполняемое  после каждой метки case, заканчивается инструкций break. Если break отсутствует, то управление передается или следующей инструкции, идущей за очередным case, или default.

 

Пример 3: (фрагмент программы с инструкцией switch) 

int ocenka_examen;

switch ( ocenka_examen)

{

  case 10: case 9: cout << “Экзамен сдан отлично”; break;

 

  case 8: case 7: case 6: cout << “Экзамен сдан успешно”; break;

 

  case 5: case 4: cout << “Экзамен сдан”; break;

 

  default: cout << “Экзамен  не сдан!”;

}

 

Правила выполнения switch:

1. Вычисляется выражение  в круглых скобках, стоящих  за служебным словом switch;

2. Выполняется метка case, совпадающая с тем значением, которое было найдено на предыдущем этапе. Если нет ни одной соответствующей метки case, то выполняется метка default. Если же метки default нет, то ничего не выполняется, а инструкция switch заканчивается;

3. Выполнение switch прерывается, когда встречается инструкция break или когда достигается конец switch.

 

Пример 4:  (демонстрируется  использование инструкции  switch)

Написать программу  для вывода сезона года по введенному номеру месяца.

 

Алгоритм  решения задачи:

  1. Ввести номер месяца nomer_mes;
  2. Если nomer_mes == 1 || 2 || 12, вывести ЗИМА;
  3. Если nomer_mes == 3 || 4 || 5, вывести ВЕСНА;
  4. Если nomer_mes == 6 || 7 || 8, вывести ЛЕТО;
  5. Если nomer_mes == 9 || 10 || 11, вывести ОСЕНЬ;

 

#include <iostream>

using namespace std;

 

int main()

{

setlocale(LC_ALL,"Russian");

short nomer_mes;

 

cout << "Введите номер месяца:"; cin >> nomer_mes;

 

switch (nomer_mes)

  {

case 12: case 1: case 2: cout << "ЗИМА"; break;

case 3: case 4: case 5: cout << "ВЕСНА"; break;

case 6: case 7: case 8: cout << "ЛЕТО"; break;

default: cout << "ОСЕНЬ";

  };

cout << endl;

 

return 0;

}

 


Информация о работе Инструкции выбора в языке C++