Автор работы: Пользователь скрыл имя, 12 Января 2014 в 17:21, лабораторная работа
Цель работы: изучение основных средств языка программирования С++, необходимых для кодирования алгоритма с разветвляющейся структурой.
Задачи работы:
- изучить написание логических выражений на языке С++;
- научиться использовать операцию условия, условный оператор if … else, переключатель switch для организации разветвления в программе;
- научиться применять операторы передачи управления break, return;
- освоить использование средств автоматизации процесса отладки в интегрированной среде программирования Microsoft Visual C++ 2005 Express Edition.
Программная реализация разветвляющихся алгоритмов
Цель работы: изучение основных средств языка программирования С++, необходимых для кодирования алгоритма с разветвляющейся структурой.
Задачи работы:
4.1. Порядок выполнения работы
- титульный лист;
- цель лабораторной работы;
- постановку задачи;
4.2. Общие сведения
Вычислительный процесс
Для организации разветвлений в программах на языке С++ используются так называемые операторы выбора (иначе, операторы управления потоком выполнения программы), к которым относятся:
- условный оператор (if...else);
- переключатель (switch).
Каждый из этих операторов служит для выбора пути выполнения программы (разветвления). Чтобы применять эти операторы, необходимо знать, что такое логические выражения и как они вычисляются.
4.2.1. Логические значения и выражения
Язык Си++ унаследовал от языка Си соглашение, согласно которому целочисленные значения и, соответственно, арифметические выражения, дающие целочисленный результат, могут в зависимости от контекста трактоваться как логические, если они встречаются там, где предусмотрено наличие логического значения (выражения-условия в условных операторах и операторах цикла). Целое значение 0 считается логическим "false" (ложное значение), а ненулевое целое – логическим "true" (истинным значением). Кроме того, в языке Си++ был еще добавлен специальный логический тип bool. Переменные типа bool могут принимать значения true и false, которые при необходимости автоматически преобразуются в выражениях в значения 1 и 0. Тип данных bool можно использовать в программах точно так же, как и другие базовые типы, такие как int, char, float, double и др. (например, для описания переменных, принимающих логические значения, или для создания функций, возвращающих значения типа bool).
В языке С++ определены следующие логические операции:
&& И
|| ИЛИ
! НЕ
Операции && и || являются бинарными, а операция ! – унарной. Типы первого и второго операндов могут быть различными. Операнды логических выражений вычисляются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, то второй операнд не вычисляется.
Приоритет у логических && и || операций ниже, чем у операций отношения.
Логическая операция И (&&) вырабатывает значение 1 (истина), если оба операнда имеют ненулевое значение. Если один из операндов равен 0 (ложь), то результат также равен нулю. В табл. 4.1 показаны результаты логической операции И для различных значений операндов.
Таблица 4.1 – Результаты логической операции И
операнд1 |
операнд2 |
операнд1 && операнд2 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
Если значение первого операнда равно нулю, то второй операнд не вычисляется.
Логическая операция ИЛИ (||) вырабатывает значение 0, если оба операнда имеют значение 0. Если какой-либо из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется. В табл. 4.2 показаны результаты логической операции ИЛИ для различных значений операндов.
Таблица 4.2 – Результаты логической операции ИЛИ
операнд1 |
операнд2 |
операнд1 || операнд2 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
Логическая операция НЕ (!) вырабатывает значение 1 (истинно), если операнд имеет значение ложно ( 0 ) и наоборот.
Интуитивно логические выражения наподобие "2<7", "1.2!=3.7" и "6>=9" воспринимаются человеком как утверждения, которые могут быть "истинными (true)" или "ложными (false)" (логическая операция "!=" означает "не равно"). Допускается объединение нескольких подобных выражений в более сложное выражение с помощью логических операций "&&" ("И"), "||" ("ИЛИ") и "!" ("НЕ").
В табл. 4.3 приводятся примеры сложных логических выражений, в которых используются логические операции и операции отношения (сравнения).
Таблица 4.3. – Примеры логических выражений
Выражение |
Значение выражения |
(6 <= 6) && (5 < 3) (6 <= 6) || (5 < 3) (5 != 6) (5 < 3) && (6 <= 6) || (5 != 6) (5 < 3) && ((6 <= 6) || (5 != 6)) !((5 < 3) && ((6 <= 6) || (5 != 6))) |
false true true true false true |
По приоритетам от высшего к низшему операции отношения и логические операции располагаются следующим образом:
!
> >= < <=
||
В таблице в четвертом примере выражение истинно, поскольку приоритет операции "&&" выше, чем у "||". Приоритет (порядок выполнения) различных операций Си++ можно узнать в учебнике или руководстве по языку Си++, а также в справочной системе Visual C++ (тема Operator Precedence). Если у вас возникают сомнения относительно приоритета операций, применяйте круглые скобки (). Применение этих скобок облегчает чтение программ.
Составные логические выражения обычно применяются в качестве условий в операторах if и в циклах for. Например:
...
...
if ( total_test_score >= 50 && total_test_score < 65 )
cout << "Вы прошли тест со средним результатом.\n";
...
...
Поскольку в Си++ истинное значение ("true") представляется в виде целого числа 1 (большинство компиляторов любое положительное число считают истинным значением), а ложное значение ("false") – в виде значения 0, то это может привести к ошибкам. Например, легко напечатать "=" вместо "= =". Поэтому фрагмент программы
...
if ( number_of_people = 1 )
cout << "Есть только один человек.\n";
...
всегда будет выводить сообщение "Есть только один человек", даже если до оператора if переменная "number_of_people" была больше 1.
4.2.2. Условная операция
В отличие от других операций языка С++ условная операция используется с тремя операндами, поэтому она называется тернарной. В изображении условной операции два размещенных не подряд символа ' ? ' и ' : ', которые связывают три операнда-выражения:
выражениие_1 ? выражение_ 2 : выражение_ 3
Первым вычисляется значение выражения_1. Если оно истинно, т.е. не равно нулю, то вычисляется значение выражения_2, которое становится результатом условной операции. Если при вычислении выражения_1 получится 0, то в качестве результата берется значение выражения_3. Классический пример:
х < 0 ? -х : х ;
Данное выражение возвращает абсолютное значение переменной х.
Применение условной операции зачастую может служить заменой условному оператору if … else, если требуется в дальнейшем использовать тот результат, который дает выполнение указанной операции.
4.2.3. Условный оператор
Условный оператор может иметь одну из двух форм: или полную форму – if … else, или сокращенную форму – if …(т.е. без else).
В случае полной формы синтаксис условного оператора имеет вид:
if (выражение-условие)
оператор1
else
оператор2
Такой условный оператор работает следующим образом. Вычисляется выражение-условие, и, если оно истинно (т.е. значение выражения отлично от нуля), то выполняется оператор1, а если выражение-условие ложно (значение выражения равно нулю), то выполняется оператор2.
Пример 4.1.
/*Выполнение деления в программе
с проверкой делителя на равенство нулю*/
#include <stdio.h>
#include < conio.h >
int main()
{ float x,y ;
puts( "Введите делимое и делитель");
scanf("%f %f", &x, &y);
if (y==0.0)
puts("На нуль делить нельзя !");
else
printf( "Частное равно %f \n", x/y);
getch();
return 0; }
В условном операторе в качестве оператора1 и/или оператора2 могут использоваться несколько операторов, тогда эту группу операторов следует заключить в фигурные скобки, чтобы превратить несколько операторов в один составной оператор (или блок).
Пример 4.2.
/* Эта программа запрашивает у пользователя текущий год, возраст
пользователя и еще один год. Затем программа вычисляет возраст
пользователя, который будет у него во втором введенном году.*/
#include <iostream>
#include < conio.h >
using namespace std;
int main()
{
int year_now, age_now, another_year, another_age;
cout << "Введите текущий год и нажмите ENTER.\n";
cin >> year_now;
cout << "Введите свой возраст (в годах).\n";
cin >> age_now;
cout << "Введите год, для которого вы хотите узнать свой возраст.\n";
cin >> another_year;
another_age = another_year - (year_now - age_now);
if (another_age >= 0)
{
cout << "В " << another_year << " году вам ";
cout << another_age << "\n";
}
else
{
cout << "В " << another_year << " вы еще не родились!\n";
}
getch();
return 0; }
Синтаксис сокращенной формы условного оператора выглядит так:
if (выражение-условие)
оператор
В этом случае работа условного оператора заключается в следующем: если выражение-условие истинно, то выполняется оператор из тела оператора if, а если выражение ложно, то никакие действия в теле оператора if не выполняются, и управление сразу передается на оператор, следующий по тексту программы за оператором if.
Пример 4.3.
/*Программа, выполняющая
по возрастанию*/
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
float a,b,c,h;
cout<<"Введите 3 числа";
cin>>a>>b>>c;
cout<<"Исходная последовательность a="<<a;
cout<<" b="<<b<<" c="<<c<<endl;
if(a>b)
{
h=a;
a=b;
b=h;
}
if(a>c)
{
h=a;
a=c;
c=h;
}
if(b>c)
{
h=b;
b=c;
c=h;
}
cout<<"Упорядоченная по возрастанию последовательность a="<<a;
cout<<" b="<<b<<" c="<<c<<endl;
getch(); }
Условные операторы могут быть вложенными друг в друга, когда один условный оператор располагается в теле другого условного оператора, причем глубина вложенности может быть любой. Вложенные условные операторы позволяют организовать в программе так называемое "множественное ветвление".
Пример 4.4.
//Фрагмент программы,
//вложенных друг в друга условных операторов
...
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)
Информация о работе Программная реализация разветвляющихся алгоритмов