Автор: Пользователь скрыл имя, 17 Января 2011 в 18:57, курс лекций
6 тем.
Условный оператор if используется для разветвления процесса обработки данных на два направления. Он может иметь одну из форм: сокращенную или полную.
Формат сокращенного оператора if:
if ( B ) S ;
где В –логическое или арифметическое выражение, истинность которого проверяется; S – один оператор: простой или составной.
При выполнении сокращенной формы оператора if сначала вычисляется выражение B , затем проводится анализ его результата: если B истинно, то выполняется оператор S ; если B ложно, то оператор S пропускается. Таким образом, с помощью сокращенной формы оператора if можно либо выполнить оператор S, либо пропустить его.
Формат полного оператора if:
if ( B ) S1; else S 2;
где B –логическое или арифметическое выражение, истинность которого проверяется; S1, S2 -один оператор: простой или составной.
При выполнении полной формы оператора if сначала вычисляется выражение B , затем анализируется его результат: если B истинно, то выполняется оператор S 1 ,а оператор S 2 пропускается; если B ложно, то выполняется оператор S 2 , а S 1 –пропускается. Таким образом, с помощью полной формы оператора if можно выбрать одно из двух альтернативных действий процесса обработки данных.
Рассмотрим несколько примеров записи условного оператора if :
// Сокращенная форма c простым оператором
if ( a > 0) x = y ;
// Сокращенная форма c составным оператором
if (++i)
{
x = y ;
y =2* z ;
}
// Полная форма с простым оператором
if ( a > 0 || b<0)
x = y ;
else x = z ;
//
Полная форма с составными
операторами
if ( i + j -1)
{
x = 0;
y = 1;
}
else
{
x =1;
y :=0;
}
Операторы S 1 и S 2 могут
также являться операторами if .Такие
операторы называют вложенными. При этом
ключевое слово else связывается с ближайшим
предыдущим словом if ,которое еще не
связано ни с однимelse. Рассмотрим несколько
примеров алгоритмов с использованием
вложенных условных операторов :
Пример 1 | Уровни вложенности операторов if: |
if (A< B)
if (C < D) if (E < F) X= Q; else X = R; else X= Z; else X = Y; |
Пример 2 | Уровни вложенности операторов if: |
if (A < B)
if (C < D) X =Y; elseX = Z; else if (E < F) X= R; elseX = Q; |
Оператор выбора switch предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:
switch ( <выражение> )
{ case <константное_выражение_1>:[<
case <константное_выражение_2>: [<оператор 2>]
...
case <константное_выражение_ n >: [<оператор n >]
[default: <оператор> ] }
Выражение, стоящее за ключевым словом switch, должно иметь арифметический тип или тип указатель. Все константные выражения должны иметь разные значения, но совпадать с типом выражения, стоящим послеswitch, или приводиться к нему. Ключевое слово case и расположенное после него константное выражение называют также меткой case .
Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch .Полученный результат сравнивается с меткой case. Если результат выражения соответствует метке case , то выполняется оператор, стоящий после этой метки. Затем последовательно выполняются все операторы до конца оператора switch , если только их выполнение не будет прервано с помощью оператора передачи управления break (см. пример) .При использование оператора break происходит выход из switch и управление переходит к первому после него оператору. Если же совпадения выражения ни с одной меткой case не произошло, то выполняется оператор, стоящий после слова default , а при его отсутствии управление передается следующему за switch оператору.
Пример. Известен порядковый номер дня недели. Вывести на экран его название.
#include <iostream>
using namespace std;
int main()
{
int x;
cin >>x;
switch (x)
{
case 1: cout<<" понедельник "; break;
case 2: cout <<" вторник "; break;
case 3: cout <<" среда ";break;
case4: cout <<" четверг "; break;
case 5: cout <<" пятница ";break;
case 6: cout <<" суббота ";break;
case 7: cout <<" воскресенье ";break;
default: cout <<" вы ошиблись ";
}
return 0;
}
Результат работы программы:
х Сообщение наэкране
2 вторник
4 четверг
10 вы ошиблись
Если в нашем
примере исключить операторы br
#include <iostream>
using namespace std;
int main()
{
int x;
cin>>x;
switch (x)
{
case 1: cout<<" понедельник ";
case 2: cout<<" вторник ";
case 3: cout <<" среда ";
case 4: cout <<" четверг ";
case 5: cout <<" пятница ";
case 6: cout <<" суббота ";
case 7: cout <<" воскресенье ";
default:cout <<" вы ошиблись ";
}
return 0;
}
Результат работы программы:
х Сообщение на экране
4 четверг пятница
суббота воскресенье вы
6 субботавоскресеньевы ошиблись
10 вы ошиблись
Существует одна стандартная ситуация, когда оператор break не нужен. Речь идет о случае, когда одна и та же последовательность действий должнавыполняться для нескольких меток case.В этом случае метки caseрасполагают последовательно одну за другой через двоеточие. После последней метки указывают действие, которое нужно выполнить. Например:
#include <iostream>
using namespace std;
int main()
{
int x;
cin >>x;
switch (x)
{
case 1: case2: case 3: case 4:
case 5: cout<<"рабочий день "; break;
case 6:
case 7: cout <<"выходной"; break;
default:cout <<" вы ошиблись ";
}
return 0;
}
Результат работы программы:
х Сообщение на экране
4 рабочий день
6 выходной
10 вы ошиблись
В этом примере для меток со значениями
из диапазона от 1 до 5 выполняется одно
действие, а для меток со значениями 6-7
выполняется другое действие.
3.3. Примеры использования
операторов ветвления при решении задач
1 . Для произвольных
значений аргументов вычислить
значение функции, заданной
Указанияпо решению задачи. Вся числовая прямая О x разбивается на три непересекающихся интервала, (- ∞ ; 0),[0; 1), [1; + ∞ ).На каждом интервале функция задается своею ветвью. Заданная точка x может попасть только в одиниз указанных интервалов. Чтобы определить, в какой из интервалов попала точка,пользуемся следующим алгоритмом. Если x <0, то x попадает в первый интервал, и функцию высчитываем по первой ветви, после чего проверка заканчивается. Если это условие ложно, то истинно условие x ≥0 , и для того чтобы точка попала во второй интервал достаточно, чтобы выполнялось условие x <1 . Если выполняется это условие, то точка x попадает во второй интервал и мы определяем функцию по второй ветви, после чего заканчиваем вычисления. В противном случае, точка может принадлежать только третьему интервалу, поэтому дополнительная проверка не проводится, а сразу вычисляем функцию по третьей ветви. Приведенный алгоритм можно реализовать с помощью вложенных операторов if .
# include < iostream >
#include < с math>
using namespace std;
int main()
{
float x,y;
cout <<"х="; cin >> x ;
if ( x <0)
y = pow ( pow ( x ,3)+1,2); //проверяем условие первой ветви
else
if ( x <1)
y =0; //проверяем условие второй ветви
else
y=fabs(x*x-5*x+1);
cout << "f( " << x<< ")= " <<y;
return 0;
}
Результат работы программы: координата точки ответ
0 0
1 3
-2 49
2. Дан номер фигуры
(1- квадрат, 2 – треугольник). По номеру
фигуры запросить необходимые
данные для вычисления площади,
#include <iostream>
#include < с math>
using namespace std;
int main()
{
int x ;
cout << "Программа подсчитывает площадь:\n1. квадрата;\n2. треугольника.\n3. выход из программы";
cout <<"Укажите номер фигуры или завершите работу с программой.\n";
cin >> x ;
switch ( x )
{
case 1 :{ cout << "введите длину стороны квадрата\ n " ;
float a; cin>>a;
if (a>0) cout <<
“ Площадь квадрата со
else cout <<"Квадрат не существует\n";
break;
}
case 2: { cout << "введите длины сторон треугольника\n";
float a,b,c,p,s; cin >> a >>b >>c;
if (a+b>c && a+c>b && b+c>a)
{p=(a+b+c)/2; s= sqrt(p*(p-a)*(p-b)*(p-c));
cout <<"Площадь треугольника со сторонами” << a << b << c <<”равна\ t " << s ;}
else cout <<"Треугольник не существует\n";
break ;
}
case 3: break ;
default: cout <<"Номер фигуры указан неверно\n";}
return 0;
}
3.4. Операторы цикла
Операторы цикла используются для организации многократно повторяющихся вычислений. К операторам цикла относятся: цикл с предусловием while, цикл с постусловием do while и цикл с параметром for.