Цель лабораторной работы: научиться писать простейшие программы на языке С++.
Теоретические сведения
Оператор присваивания
В обычных языках программирования есть только один оператор, который фактически что-то делает, - оператор присваивания. Все другие операторы, такие как условные, циклы, операторы вызова процедур и функций, существуют только для того, чтобы управлять последовательностью выполнения операторов присваивания. К сожалению, трудно формально определить смысл оператора присваивания (в отличие от описания того, что происходит при его выполнении). Ничего подобного не встречается в математике.
В математике есть уравнения, например,
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, просмотров: 226.