Операция используется для явного преобразования величины из одного типа в другой. Это требуется в том случае, когда неявного преобразования не существует. При преобразовании из более длинного типа в более короткий возможна потеря информации. Формат операции:
(тип) выражениеЗдесь тип — это имя того типа, в который осуществляется преобразование, а выражение чаще всего представляет собой имя переменной, например:
long b = 300;int a = (int) b; // данные не теряютсяbyte d = (byte) a; // данные теряютсяУсловная операция
Условная операция (?:) имеет три операнда. Ее формат:
операнд_1? операнд_2: операнд_3Первый операнд — выражение, для которого существует неявное преобразование к логическому типу. Если результат вычисления первого операнда равен true, то результатом условной операции будет значение второго операнда, иначе — третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться.
Тип результата операции зависит от типа второго и третьего операндов. Если операнды одного типа, он и становится типом результата операции.
Математические функции — класс Math
Самая простая программа, которую можно себе представить (не считая "Hello, World!"), состоит из ввода исходных данных, вычислений по каким-то формулам и вывода результата. В выражениях, из которых состоят формулы, часто используются математические функции, например, синус или возведение в степень. Они реализованы в классе Math, определенном в пространстве имен System. Описание методов и полей класса приведено в таблице.
Таблица – Основные поля и статические методы класса Math
Имя | Описание | Результат | Пояснения |
Abs | Модуль | Перегружен | |x| записывается как Abs(x) |
Acos | Арккосинус | double | Acos(double x) |
Asin | Арксинус | double | Asin(double x) |
Atan | Арктангенс | double | Atan2(double x, double y) — угол, тангенс которого есть результат деления y на x |
BigMul | Произведение | long | BigMul(int x, int y) |
Ceiling | Округление до большего целого | double | Ceiling(double х) |
Cos | Косинус | double | Сos(double x) |
Cosh | Гиперболический косинус | double | Cosh(double x) |
DivRem | Деление и остаток | Перегружен | DivRem(x, y, rem) |
E | База натурального логарифма (число е) | double | 2,71828182845905 |
Exp | Экспонента | double | ex записывается как Exp(x) |
Floor | Округление до меньшего целого | double | Floor(double х) |
IEEERemainder | Остаток от деления | double | IEEERemainder(double x, double y) |
Log | Натуральный логарифм | double | logex записывается как Log(x) |
Log10 | Десятичный логарифм | double | log10x записывается как Log10(x) |
Max | Максимум из двух чисел | Перегружен | Max(x, y) |
Min | Минимум из двух чисел | Перегружен | Min(x, y) |
PI | Значение числа ![]() | double | 3,14159265358979 |
Pow | Возведение в степень | double | xy записывается как Pow(x, y) |
Round | Округление | Перегружен | Round(3.1) даст в результате 3 Round (3.8) даст в результате 4 |
Sign | Знак числа | int | Аргументы перегружены |
Sin | Синус | double | Sin(double x) |
Sinh | Гиперболический синус | double | Sinh(double x) |
Sqrt | Квадратный корень | double | √x записывается как Sqrt(x) |
Tan | Тангенс | double | Tan(double x) |
Пример
Пример применения методов класса Math.
private void button1_Click(object sender, EventArgs e)
{
double x,y;
x = double.Parse(textBox1.Text);
y = double.Parse(textBox2.Text);
label3.Visible = true;
label3.Text = "Максимум из х и y: " + Math.Max(x, y);
label4.Visible = true;
double z = Math.Pow(Math.Sin(x), 2) + Math.Pow(Math.Sin(y), 2);
label4.Text = "Сумма квадратов синусов х и y: " + z;
}
Рис. Результат работы программы
Операторы
Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор; (он используется, когда по синтаксису оператор требуется, а по смыслу — нет). Примеры:
i++; // выполняется операция инкрементаa *= b + c; // выполняется умножение с присваиваниемfun(i, k); // выполняется вызов функцииwhile(true); // цикл из пустого оператора (бесконечный)Блок, или составной оператор, — это последовательность описаний и операторов, заключенная в фигурные скобки. Блок воспринимается компилятором как один оператор и может использоваться всюду, где синтаксис требует одного оператора, а алгоритм — нескольких. Блок может содержать один оператор или быть пустым.
Условный оператор if
Условный оператор if используется для разветвления процесса вычислений на два направления.
Формат оператора:
if (логическое_выражение) оператор_1; [ else оператор_2; ]Сначала вычисляется логическое выражение. Если оно имеет значение true, выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать.
Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок. Блок может содержать любые операторы, в том числе описания и другие условные операторы, но не может состоять из одних описаний.
Примеры условных операторов:
if (a < 0) b = 1; // 1if (a < b && (a > d || a == 0)) b++; else { b *= a; a = 0; } // 2if (a < b) if (a < c) m = a; else m = c; else if (b < c) m = b; else m = c; // 3if (b > a) max = b; else max = a; // 4Если требуется проверить несколько условий, их объединяют знаками логических условных операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Оператор в примере 3 вычисляет наибольшее значение из трех переменных. Обратите внимание, что компилятор относит часть else к ближайшему ключевому слову if.
Пример
Подсчет количества очков после выстрела по мишени.
private void button1_Click(object sender, EventArgs e)
{
double x,y;
x = double.Parse(textBox1.Text);
y = double.Parse(textBox2.Text);
int kol = 0;
if (x * x + y * y < 1) kol = 2;
else if (x * x + y * y < 4) kol = 1;
label3.Visible = true;
label3.Text="Результат ="+kol+" очков";
}
Рис. Результат работы программы
Оператор выбора switch
Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений.
Формат оператора:
switch (выражение){ case константное_выражение_1: [ список_операторов_1 ] case константное_выражение_2: [ список_операторов_2 ]... case константное_выражение_n: [ список_операторов_n ] [ default: операторы ]}Выполнение оператора начинается с вычисления выражения. Тип выражения чаще всего целочисленный (включая char) или строковый. Затем управление передается первому оператору из списка, помеченному константным выражением, значение которого совпало с вычисленным. Если совпадения не произошло, выполняются операторы, расположенные после слова default, а при его отсутствии управление передается следующему за switch оператору.
Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно одним из операторов break, goto или return:
- оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do;
- оператор goto выполняет переход на указанную после него метку, обычно это метка case одной из нижележащих ветвей оператора switch;
- оператор return выполняет выход из функции, в теле которой он записан.
Пример
Пример программы, реализующей простейший калькулятор на четыре действия.
private void button1_Click_1(object sender, EventArgs e)
{
double a, b, res;
a = double.Parse(textBox1.Text);
b = double.Parse(textBox3.Text);
char op = char.Parse(textBox2.Text);
bool ok = true;
switch (op)
{
case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
case '/': res = a / b; break;
default: res = double.NaN; ok = false; break;
}
label3.Visible = true;
if (ok) label3.Text = "Результат: " + res;
else label3.Text = "Недопустимая операция";
}
Рис. Результат работы программы