- •Разветвляющие программы методические указания
- •If ( условие ) {
- •If ( условие )
- •1.2 Оператор выбора switch
- •2 Задание
- •3 Контрольные вопросы
- •Приложение а Задания на вычисление значения выражений с использованием условного оператора If
- •Приложение б Задания на вычисление значения выражений с использованием оператора выбора switch
- •Продолжение приложения б
- •Приложение в Задания для самостоятельной работы по разветвляющимся алгоритмам
If ( условие )
Оператор1;
Если логическое выражение истинно, то выполняется <оператор1>, в противном случае программа переходит к выполнению операторов, следующих за оператором IF. Если условие ложно, то выполняются следующие за IF операторы.
В программах условные операторы часто встречаются группами, например:
if (total_test_score < 50)
cout << "Вы не прошли тест. Выучите материал как следует.\n";
else if (total_test_score < 65)
cout << "Вы прошли тест со средним результатом.\n";
else if (total_test_score < 80)
cout << "Вы хорошо выполнили тест.\n";
else if (total_test_score < 95)
cout << "Вы показали отличный результат.\n";
else {
cout << "Вы сдали тест нечестно!\n";
total_test_score = 0;
}
1.2 Оператор выбора switch
Еще одна конструкция, позволяющая проверять условие и выполнять в зависимости от этого различные действия, — это switch. На русский язык название данного оператора можно перевести как «переключатель». Смысл у него именно такой. В зависимости от того, какое значение имеет переменная, он переключается между различными блоками действия. Структуру switch можно записать следующим образом:
switch (выражение или переменная) {
case значение1:
блок_действий1
break;
case значение2:
блок_действий2
break;
…
default:
блок_действий_по_умолчанию
}
В отличие от if, здесь значение выражения не приводится к логическому типу, а просто сравнивается со значениями, перечисленными поcле ключевых слов case (значение1, значение 2 и т.д.). Если значение выражения совпало с каким-то вариантом, то выполняется соответствующий блок_действий — от двоеточия после совпавшего значения до конца switch или до первого оператора break, если таковой найдется. Если значение выражения не совпало ни с одним из вариантов, то выполняются действия по умолчанию (блок_действий_по_умолчанию), находящиеся после ключевого слова default. Выражение в switch вычисляется только один раз, а в операторе elseif - каждый раз, поэтому, если выражение достаточно сложное, то switch работает быстрее.
Пример. Написать программу, определяющую, какая из курсорных клавиш была нажата. В составе библиотеки, унаследованной от языка С, есть функция getch (), возвращающая код нажатой пользователем клавиши. В случае нажатия функциональных или курсорных клавиш эта функция возвращает 0 либо 0хЕ0 (в зависимости от компилятора), а ее повторный вызов позволяет получить расширенный код клавиши.
#include <stdio.h>
#include <conio.h>
main(){
int key;
printf("\n Нажмите одну из курсорных клавиш:\n");
key = getch();
key = getch();
switch (key){
case 77: printf("стрелка вправо\n"); break;
case 75: printf("стрелка влево\n"); break;
case 72: printf("стрелка вверх\n"); break;
case 80: printf("стрелка вниз\n"); break;
default: printf(“нe стрелка\n");
};
getch();
}
2 Задание
2.1 Составить и отладить программу для решения следующей задачи: даны координаты точки, не лежащей на координатных осях OX и OY. Определить номер координатной четверти, в которой находится данная точка.
Использовать фрагмент программы вида:
cout << "Введите координаты точки.\n";
cin >> x >> y;
if (x >0 && y>0)
cout << "Точка лежит в 1 координатной четверти.\n";
if (x <0 && y>0)
cout << "Точка лежит во 2 координатной четверти.\n";
if (x <0 && y<0)
cout << "Точка лежит в 3 координатной четверти.\n";
if (x >0 && y<0)
cout << "Точка лежит в 4 координатной четверти.\n";
2.2 Решить задачи, указанные преподавателем из Приложения А.
2.3 Составить и отладить на компьютере задачу определения значения Y в зависимости от значения текущей переменной N для некоторого заданного действительного числа x:
Для других значений N выдать сообщение «Функция не определена».
Фрагмент программы с использованием оператора switch:
cout << "Введите значение x: \n";
cin >> x;
cout << "Введите номер функции: \n";
cin >> n;
switch (n) {
Case 1 : y= sin(x); break;
Case 2 : y=cos(x); break;
Case 3 : y=log(x); break;
Case 4: y= abs(x); break;
Default:
Cout <<”Функция не определена”;
}
Cout <<”y=”<< y ;
2.4 Решить задачи, указанные преподавателем из Приложения Б.
2.5 Определить, принадлежит ли точка с координатами (x, y) заданному множеству точек на координатной плоскости, включая его границу (заштрихованная область на рисунке).
Рассмотрим различные варианты области.
а) область задана прямой:
В данном случае, очевидно, что точка (x, y) попадает на линию графика, если у=x. Точка попадает в закрашенную область (лежит выше линии графика) если y>x. Наконец, точка (x, y) лежит ниже линии графика, если y<x. Таким образом, условие попадания точки в закрашенную область:
if (y>=x) сout <<”Попадает”;
else сout <<”Не попадает”;
б) если область задана прямой, проходящей через две точки - A(x1, y1) и B(x2, y2). Тогда уравнение прямой выводится из соотношения:
в) область задана уравнением
Фрагмент программы:
if (y>=x*x) сout <<”Попадает”;
else сout <<”Не попадает”;
г) Рассмотрим попадание точки в круг. Уравнение окружности: x2+y2=r2, в представленном на рисунке случае r=1.
Точка (x, y) лежит на линии окружности, если расстояние до нее , если l=r. Если l>r, то точка лежит вне окружности. Если l<r, то точка — внутри круга.
Фрагмент программы:
l=sqrt(x*x+y*y);
if (l<1) Cout <<”Попадает”;
else Cout <<”Не попадает”;
д) если область задана окружностью с центром в точке С(a, b) и радиусом, равным R, то уравнение выводится из соотношения:
(x - a)2 + (y - b)2 = R2.
е) несколько областей
Уравнение прямой по двум точкам: Y =-1/2 X +1
Уравнение окружности: Y =
Отсюда получаем условия попадания точки в область:
(( y <=-1/2+1) и ( x >=0) и ( x <=2)) или (( y <= ) и ( y <0) и ( x >0))
Блок-Схема:
Текст программы:
#include <iostream.h>
#include<conio.h>
#include <math.h>
main() {
float x, y;
cin >> x>>y;
if (((y<=-1/2+1)&&(x>=0)&&(x<=2)) || (y<=sqrt(1-x*x)&&(y<=0)&&(x<=0)))
cout <<”Попадает”;
else cout <<”Не попадает”;
getch();
}
2.6 Решить задачи, указанные преподавателем из Приложения В.