Автор работы: Пользователь скрыл имя, 27 Октября 2013 в 18:20, контрольная работа
В языке С++ такие понятия как операторы безусловного перехода (типа goto), ветвления (типа if), организации циклов (типа for, while) принято называть инструкциями, а операторы С++ были в основном рассмотрены на предыдущей лекции.
Специфика С++ такова, что объявление является инструкцией, а оператор присваивания и оператор вызова функции являются выражениями.
Основы алгоритмизации и программирования Лекция 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.
Алгоритм решения задачи:
#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.
Алгоритм решения задачи:
#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)
Написать программу для вывода сезона года по введенному номеру месяца.
Алгоритм решения задачи:
#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;
}