По сути, в примере 1.2 уже используется один из самых часто используемых операторов языка – оператор присваивания. Он обозначается одиночным знаком равенства (=). Его структура следующая:
ИмяПеременной = Выражение;
В левой части от символа «=» пишется переменная, в правой части выражение. Как это звучит по-русски? Переменной присвоить значение выражения, стоящего справа. Обратите внимание, что оператор работает в одну сторону - слева направо. То есть операторы i=j и j=i разные (в первом случае переменной i присвоить значение переменой j, во втором случае переменной j присвоить значение переменой i).
Пример 1.3. В продолжение примера 1.1 можно написать
i=2;
j=3+2*i;
x=(Math.Sin(i)+1)/(Math.Exp(j)+2);
i=i
Как работает оператор присваивания? Первым шагом вычисляется выражение, стоящее справа. Вторым шагом проверяется на соответствие тип выражения и тип переменной. Третий шаг состоит в том, что если типы согласованы (они могут быть и разными, но согласованными), то переменной присваивается значение выражения; если же типы не согласованы, то выдается сообщение об ошибке.
В последней строке примера 1.3 в левой и в правой части оператора присваивания стоит переменная i. Это возможно? Конечно. Как это работает? Сначала будет взято значение переменной i по ее адресу в ОП. Далее к этому значению прибавят 1, проверят тип полученного выражения, а уже потом переменной i присвоят новое значение, то есть пойдут по адресу переменной i в ОП и положат туда новое значение. При этом старое значение будет потеряно.
В примере 1.3 кроме оператора присваивания используются операции умножения, сложения, деления, а также используются библиотечные функции класса Math: Sin(x) и Exp(x).
Подробнее рассмотрим арифметические операции, то есть те, результатом которых будет число.
Различают унарные и бинарные операции. Унарный знак плюс «+» перед величиной не изменяет ее значения. Унарный знак минус «-» перед величиной изменяет ее знак на противоположный. К бинарным арифметическим операциям относятся сложение, вычитание, умножение, деление, целочисленное деление (без остатка), остаток от деления, возведение в степень.
Если в выражении используются несколько данных (переменных, констант и функций), то их типы должны быть идентичными либо совместимыми. Далее об этом поговорим подробнее. Например, арифметические операции, применимые только к величинам целых и вещественных типов, приведены в табл. 1.2.
Таблица 1.2
Операция | Название |
+ | Сложение |
- | Вычитание |
* | Умножение |
/ | Деление |
% | Остаток от деления |
У операций определены (выставлены) приоритеты выполнения операций в выражении. Эти приоритеты приведены в табл. 1.3.
Таблица 1.3
Операция | Приоритет | Тип действий |
( ) | 1 | Вычисление в скобках |
Функция | 2 | Вычисление значения функции |
Унарный + или – | 3 | Унарные операции |
*; / | 4 | Операции умножения и деления |
% | 4 | Остаток от деления |
+; - | 5 | Сложение и вычитание |
В выражениях могут использоваться круглые скобки для заключения в них тех частей выражения, которые необходимо вычислить в первую очередь. Количество открывающих скобок естественно должно быть равно количеству закрывающих. Вычисление выражений выполняется в определенном порядке, установленном круглыми скобками, и в соответствии с приоритетом операций (табл. 1.3). Операции с равным приоритетом выполняют слева направо.
Операция % возвращает остаток, полученный путем деления двух операндов целого типа. Следует обратить внимание на операцию деления, в которой оба операнда целые. В этом случае результат будет тоже целого типа. Например, 10/3 – в результате получится 3; 1/3 – в результате будет 0.
1.4. Преобразование данных
Преобразование данных может быть явное и неявное . Неявно можно выполнять все преобразования, которые не приведут к потере информации. Поэтому данные типов bool , double , decimal не могут быть неявно преобразованы ни в какие типы данных. float может быть преобразован в double; int может быть преобразован в long , float , double , decimal ; long может быть преобразован в float , double , decimal.
Явное преобразование рассмотрим в примере 1.4.
Пример 1.4. Явные преобразование данных
x = (float)56.3; //число типа double преобразуется в float
d1 = (decimal)25.6; //число типа double преобразуется в decimal
i = (int)8.6; // результат i=8
Ответственность за явные преобразования несет программист. Например, следующее преобразование формально не является ошибкой x=(float)56.6e+300; несмотря на то, что преобразовываемое значение не входит в диапазон допустимых значений данных типа float. Результаты таких преобразований в общем случае не определены. Однако, присвоения short n=123456789; и n=(short)123456789; являются синтаксическими ошибками.
Преобразования также можно реализовать с использованием методов класса Convert из пространства имен System.
1.5. Ввод и вывод данных в консольном режиме.
Последовательная программа
Работа консольной программы связана с окном, которое открывается с началом выполнения программы и закрывается с окончанием программы. В это окно можно вывести данные, а вот ввести данные в консольном режиме можно с использованием клавиатуры. Для этого используются методы класса System.Console с именами WriteL i ne() для вывода строки символов в консольное окно и ReadLine () для ввода строки символовс клавиатуры. Для того чтобы их использовать, подключается пространство имен System ( using System; ).
Теперь уже можно писать первую программу, имея в виду, что операторы в программе выполняются последовательно, то есть один за другим в порядке записи. Такая программа называется последовательной.
И еще раз напомним о главном: в C# все имена перед их использованием должны быть описаны, причем описание (объявление) имен может находиться в любой точке программы по мере необходимости их использования.
Напишем программу, в которой будут продемонстрированы варианты объявления имен переменных разных типов данных: целых и действительных чисел, строк, логических данных. Пусть в этой программе будет вычисление сложного арифметического выражения с вызовом математических функций из класса Math, явные и неявные преобразования, конвертация данных с использованием класса Convert. Обязательно надо продемонстрировать работу методов WriteLine() и ReadLine() класса Console.
Пример 1.5.
Для вводимых значений действительных x,y вычислить
.
Получить приближенное целое значение Z, вычисленное по правилам арифметики, вычислить целое значение, не превосходящее Z. Проверить, совпадают ли эти целые.
Схема алгоритма решения примера приведена на рис. 1.4, а исходный код в примере 1.6
Рис. 1.4. Схема алгоритма примера 1.5
Пример 1.6. Исходный текст последовательной программы примера 1.5.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
Дата: 2019-11-01, просмотров: 198.