Лабораторная работа 1. Программа линейной структуры. Простые ветвления
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Цель лабораторной работы: научиться писать простейшие программы на языке С++.

 

Теоретические сведения

Оператор присваивания

В обычных языках программирования есть только один оператор, который фактически что-то делает, - оператор присваивания. Все другие операторы, такие как условные, циклы, операторы вызова процедур и функций, существуют только для того, чтобы управлять последовательностью выполнения операторов присваивания. К сожалению, трудно формально определить смысл оператора присваивания (в отличие от описания того, что происходит при его выполнении). Ничего подобного не встречается в математике.

В математике есть уравнения, например,

ax2 + bx = 0,               или

Ƒ sin x dx = - cos x.

Эти уравнения можно решить, выполнить соответствующие вычисления.

Скромный оператор присваивания на самом деле является очень сложным и решает три задачи:

1) вычисление значения выражения в правой части оператора,

2) вычисление выражения в левой части оператора, выражение должно определять адрес ячейки памяти,

3) копирование значения, вычисленного на шаге 1), в ячейки памяти, начиная с адреса, полученного на шаге 2).

Таким образом, оператор присваивания

a * (i + 1) = b + c; несмотря на внешнее сходство с уравнением, определяет сложное вычисление.

В языке С++ само присваивание определено как выражение. Значение конструкции

переменная = выражение;

такое же как значение выражения в правой части. Таким образом,

int v1, v2, v3;

v1 = v2 = v3 = e;

означает присвоить значение e переменной v3, затем присвоить результат переменной v2, затем присвоить результат переменной v1 и игнорировать конечный результат.

Хотя стиль программирования С и С++ использует тот факт, что присваивание является выражением, этого, вероятно, следует избегать как источник скрытых ошибок программирования.

Полезным свойством языка С++ является комбинация операции и присваивания, это операция с присваиванием, которую мы рассматривали выше.

Оператор присваивания реализует линейные алгоритмические структуры. Линейные программы могут содержать операторы присваивания, математические функции, арифметические или логические операции, действия, связанные с вводом-выводом.

Основные математические функции представлены в таблице:

 

Функция Обозначение Тип возвращаемого значения Тип аргумента Имя файла описания
Абсолютное значение   abs(x) cabs(x) fabs(x) int double float int double float <stdlib.h> <math.h> <cmath>  
арккосинус acos(x) double   double   <math.h> <cmath>  
арксинус asin(x) double   double   <math.h> <cmath>  
арктангенс atan(x) double   double   <math.h> <cmath>  
косинус cos(x) double   double   <math.h> <cmath>  
синус sin(x) double   double   <math.h> <cmath>  
экспонента exp(x) double   double   <math.h> <cmath>  
степенная функция pow(x, y) double   double   <math.h> <cmath>  
логарифм натуральный log(x) double   double   <math.h> <cmath>  
логарифм десятичный log10(x) double   double   <math.h> <cmath>  
корень квадратный sqrt(x) double   double   <math.h> <cmath>  
тангенс tan(x) double   double   <math.h> <cmath>  

 

Заголовочный файл, необходимый для работы этих функций, - <math.h> (или <сmath>).

Пример

Составить программу для вычисления объема V и площади поверхности S полого шара по заданным внешнему и внутреннему радиусам R и r, если известно, что

S = 4π(R2 + r2 ),     V = 4/3πR3 – r3).

 

#include <iostream>

#include <cmatch>

const double Pi = 3.1415926; // определение числа π

 

int main( )

{ double S, V, R, r;

cout << “Введите внешний радиус”;

cin >> R;

cout << “Введите внутренний радиус”;

cin >> r;

S = 4 * Pi * (R * R – r * r);

V = 4.0 / 3 * Pi * (pow (R, 3) – pow (r, 3));

cout << “S = “ <<  S << endl;

cout << “V = “ << V << endl;

return 0;

}

 

Редкая программа обходится без операций ввода и вывода. Мы познакомились с потоковыми операциями ввода-вывода cin и cout. Наряду с ними все еще часто используются функции, применяемые в языке С: printf( ) и scanf( ). Эти функции выполняются и в С++, их можно использовать, изучив синтаксис этих функций форматного ввода-вывода.

 

Операторы ветвления

Условный оператор if

Синтаксис оператора if, который реализует алгоритмическую структуру РАЗВИЛКА_НЕ_ПОЛНАЯ, имеет вид:

if (выражение) оператор;

если оператор, выполняемый при истинности условия выражения, единственный или

if (выражение) { оператор1;

                             оператор2;

                             …

                             оператор n;

                            }

если таких операторов несколько (составной оператор).

Здесь под выражением понимается любое логическое выражение или любое выражение, значение которого приводимо к целочисленному значению. Если его значение истинно, то есть отлично от нуля, то оператор будет выполняться.

При необходимости сравнить выражение с некоторым значением следует использовать операции отношений в виде:

if (выражение == значение) оператор;

или

if (выражение != значение) оператор;

или

if (выражение > значение) оператор;

Здесь оператор; может быть как простым, так и составным.

Оператор

if (выражение != 0) оператор;       эквивалентен оператору

if (выражение) оператор;

Пример

По номеру y > 0 некоторого года определить с – номер его столетия. Учесть, что, например, ХХI век начинается с 2001 года.

#include <iostream>

int main()

{ int y, c;

cout << “Введите год”;

cin >> y;

c = y / 100;

if (y % 100 != 0) c +=1;

cout << “Этот год принадлежит веку “ << с << endl;

return 0;

}

 

В случае алгоритмической структуры РАЗВИЛКА_ПОЛНАЯ оператор if имеет две ветви.

if (выражение) оператор1;

else оператор2;

если после if и else находится по одному оператору, или

if (выражение) { оператор1;

                             оператор2;

                             …

                             оператор n;

                            }

  else { оператор11;

                    оператор21;

                             …

                    оператор n1;

               }

если после if и else находится блок операторов (составной оператор).

В качестве внутренних операторов оператора if могут использоваться любые операторы, в том числе и условные. В результате получаются вложенные конструкции. В подобных конструкциях часть else связывается с ближайшим предыдущим if в том же блоке. Формально уровней вложенности операторов if может быть много, но реально при количестве таких вложений больше 4-5, программа становится трудно отлаживаемой.

 

Условная операция

Мы уже рассматривали ее среди операций, но здесь уместно ее сравнить с условным оператором.

Условная операция включает три операнда и имеет синтаксис:

переменная = выражение ? значение1 : значение2;

Такая запись является аналогом условного оператора

if (выражение) переменная = значение1;

else переменная = значение2;

Условный оператор и условная операция в результате компиляции формируют практически идентичный код. Разница состоит в том, что в случае условного оператора обращение к переменной происходит дважды, следовательно, дважды вычисляется ее адрес, в случае условной операции – лишь один раз. С другой стороны, программу с условными операторами понимать лучше.

Пример

… if (a > b) max = a;

   else max = b;             эквивалентно max = (a > b) ? a : b;

 

Дата: 2019-04-23, просмотров: 196.