Главная страница

Lab2_Операторы и выражения. Лабораторная работа 2 Операторы и выражения Варианты заданий


Скачать 0.63 Mb.
НазваниеЛабораторная работа 2 Операторы и выражения Варианты заданий
Дата11.02.2023
Размер0.63 Mb.
Формат файлаpdf
Имя файлаLab2_Операторы и выражения.pdf
ТипЛабораторная работа
#930770


Лабораторная работа 2. Операторы и выражения.
DK’2016 1
Лабораторная работа 2
2. Операторы и выражения
Варианты заданий
Выполнить задания 1-4 по предложенным вариантам:
№ Задания
1 2
3 4
Вариант 1 1.I
2.I
3.I
4.I
Вариант 2 1.II
2.II
3.II
4.II
Вариант 3 1.III
2.III
3.III
4.III
Вариант 4 1.I
2.II
3.II
4.I
Вариант 5 1.II
2.I
3.III
4.II
Вариант 6 1.III
2.II
3.I
4.I
Вариант 7 1.I
2.III
3.I
4.II
Вариант 8 1.I
2.I
3.II
4.III
Вариант 9 1.II
2.III
3.I
4.II
Вариант 10 1.III
2.I
3.III
4.I
Задание 1.
При вычислениях не использовать класс Math. Только операции умножения.
I.
Дано число x. Вычислите число x
6
при помощи трех операций умножения.
II.
Дано число x. Вычислите число x
8
при помощи трех операций умножения.
III.
Дано число x. Вычислите число x
7
при помощи четырех операций умножения.
Задание 2.
При вычислениях не использовать класс Math. Только арифметические операции.
I.
Дано натуральное число. Найдите число десятков в его десятичной записи (то есть вторую справа цифру его десятичной записи)
II.
Дано трехзначное число. Найдите сумму его цифр.
III.
Присвоить целой переменной d первую цифру из дробной части положительного вещественного числа (так, если х=32.975, то d=9).
Задание 3.
Приложение вычисляет значение x и выводит его на консоль, где m, n, p, a, b, c, d, e – это имена изменяемых параметров (вводятся пользователем с

Лабораторная работа 2. Операторы и выражения.
DK’2016 2 консоли). Вычисление выражения построить так, чтобы минимизировать время его вычисления. Использовать класс Math.
Оцените время вычисления выражения в условных единицах (уе), исходя из следующих предположений: присваивание - 1 уе, операции сдвига -2 уе, сложение, вычитание - 3 уе, умножение - 5 уе, деление - 7 уе, вызов стандартной функции - 13 уе.
I.
2 2
3
(123 527 * /
) *(123 527 * /
)
856
*
* (
lg 6)
p
p
n
m
a b
a b
x
c
d
e





II.
1/
2,5 2,5 2
*(12,3 52, 7 *
/
) *(12,3 52, 7 *
/
)
ln( 132,5 sin
) cos(
* )
n
n
n
m
p
a
b
a
b
x
e
d
c





III.
3 2 (sin( ) cos( * /
) *(sin( ) cos( * /
)
lg(
* /
)
/ 2
n
m
m
m
p
a
b c d
a
b c d
x
a b c d
e





Задание 4. (Необходимые для решения задачи значения введите самостоятельно).
I.
Российские ученые из Сколково разработали ПО для марсохода. Чтобы доставить марсоход с наименьшими затратами, необходимо дождаться 2018 года, когда Марс приблизится к Земле на минимальное расстояние. Т.к. это отечественная разработка, используются исторические, проверенные временем единицы измерения длины. Для правильной доставки необходимо рассчитать минимальное расстояние между Землей и Марсом в аршинах.
II.
Капитан Джек Воробей всегда точно рассчитывает расстояние до горизонта, пользуясь формулой S = [(R+h)
2
- R
2
]
1/2
где:

R - радиус Земли;
 h - высота глаз наблюдателя над поверхностью в метрах.
Оказавшись на необитаемом острове Кокос, сможет ли он увидеть сушу с самой высокой точки острова.
III.
Филиальные сети крупных компаний охватывают все бОльшие территории.
Однако при открытии офисов в отдаленных районах развивающихся стран многие сталкиваются со слаборазвитой ИТ-инфраструктурой. В этом случае для передачи медиаконтента придумали использовать специально обученных собак, переносящих террабайтные жесткие диски со средней скоростью 12 км/ч. Между каждыми 2-мя офисами курсирует одна собака. К прибытию собаки в офисе успевают накопиться данные, чтобы заполнить диск полностью. На каком расстоянии должны находиться офисы, чтобы сравнительно выгоднее (с точки зрения времени передачи) было передавать данные по оптоволоконной сети со скоростью 1 Гигабит/с.

Лабораторная работа 2. Операторы и выражения.
DK’2016 3
Методические указания
Оглавление
2.
Операторы и выражения ............................................................................................................... 1
Варианты заданий ................................................................................................................................. 1
Методические указания ........................................................................................................................ 3 2.1.
Выражения и операции ......................................................................................................... 3 2.2.
Выражения в скобках ............................................................................................................. 4 2.3.
Инкремент и декремент ........................................................................................................ 5 2.4.
Методы .................................................................................................................................. 6 2.5.
Арифметические операции ................................................................................................... 7 2.6.
Именованные константы ....................................................................................................... 8 2.7.
Операции отношения ............................................................................................................ 8 2.8.
Логические операции ............................................................................................................ 9 2.9.
Класс Math и его функции ..................................................................................................... 9
Код приложений в C# состоит из операторов, состоящих из ключевых слов, выражений и операторов.
Для ввода числовых значений используются преобразования класса Convert, либо метода Parse() для каждого из числовых типов.
Например:
string
buf =
Console
.ReadLine();
//считываем строку – буфер для ввода числа
int
x1 =
Convert
.ToInt32(buf);
// целое число (1 вариант)
int
x2 =
Int32
.Parse(
Console
.ReadLine());
// считываем и преобразовываем целое
// число сразу (2 вариант)
// для вещественных чисел - аналогично
double
y1 =
Convert
.ToDouble(
Console
.ReadLine());
// (1 вариант)
double
y2 =
Double
.Parse(
Console
.ReadLine());
// (2 вариант)
Стоит помнить, что в коде в качестве разделителя для вещественного числа выступает точка, а в консоли – запятая.
2.1. Выражения и операции
Выражения строятся из операндов - констант, переменных, функций, - объединенных знаками операций и скобками. При вычислении выражения определяется его значение и тип. Большинство операций в языке C#, их приоритет и порядок наследованы из языка
C++.

Лабораторная работа 2. Операторы и выражения.
DK’2016 4
Приведем таблицу приоритетов операций, в каждой строке которой собраны операции одного приоритета, а строки следуют в порядке приоритетов, от высшего к низшему.
Таблица 2.1. Приоритеты операций языка C#
Приоритет
Категория
Операции
Порядок
0
Первичные
(expr), x.y, x->y, f(x), a[x], x++, x-
-, new, typeof(t), checked(expr), unchecked(expr)
Слева направо
1
Унарные
+, -, !,

, ++x, --x, (T)x, sizeof(t)
Слева направо
2
Мультипликативные
(Умножение)
*, /, %
Слева направо
3
Аддитивные (Сложение)
+, -
Слева направо
4
Сдвиг
<< ,>>
Слева направо
5
Отношения, проверка типов
<, >, <=, >=, is, as
Слева направо
6
Эквивалентность
==, !=
Слева направо
7
Логическое И (AND)
&
Слева направо
8
Логическое исключающее ИЛИ
(XOR)
^
Слева направо
9
Логическое ИЛИ (OR)
|
Слева направо
10
Условное логическое И
&&
Слева направо
11
Условное логическое
ИЛИ
||
Слева направо
12
Условное выражение
? :
Справа налево
13
Присваивание
Склеивание с null
=, *=, /=, %=, +=, -=, <<=, >>=,
&=, ^=, |=
??
Справа налево
14
Лямбда-оператор
=>
Справа налево
Рассмотрим подробнее операции из таблицы 2.1, отнесенные к высшему приоритету и выполняемые в первую очередь.
2.2.
Выражения в скобках
Любое выражение, взятое в скобки, получает высший приоритет и должно быть вычислено, прежде чем к нему будут применимы какие-либо операции. Скобки позволяют изменить стандартный порядок вычисления выражения и установить порядок, необходимый для вычисления в данном конкретном случае. В сложных выражениях скобки полезно расставлять даже в том случае, если стандартный порядок совпадает с требуемым, поскольку наличие "лишних" скобок зачастую увеличивает наглядность записи выражения.
Вот классический пример выражения со скобками:
result = (x1 + x2) * (x1 - x2);

Лабораторная работа 2. Операторы и выражения.
DK’2016 5
Понятно, что если убрать скобки, то первой выполняемой операцией будет операция умножения и результат вычислений будет совсем другим.
Поскольку согласно стандартному порядку выполняются вначале арифметические операции, потом операции отношения, а затем логические операции, то можно было бы не ставить скобки в следующем выражении:
bool
temp = x1 + x2 > x1 - x2 && x1 - 2 < x2 + 1;
Однако для наглядности иногда скобки лучше расставлять:
bool
temp = ((x1 + x2) > (x1 - x2)) && ((x1 - 2) < (x2 + 1));
2.3. Инкремент и декремент
Операции увеличения и уменьшения на 1 (++ и --). Имеют две формы записи – префиксную и постфиксную. В префиксной форме сначала изменятся операнд, а затем его значение становится результирующим значением выражения, а в постфиксной форме значением выражения является исходное значения операнда, после чего он изменяется.
static
void
Main()
{
int
x = 3, y = 3;
Console
.WriteLine(
"Значение префиксного выражения: {0} \n"
, ++x);
Console
.WriteLine(
"Значение постфиксного выражения: {0} \n"
, y++);
Console
.WriteLine(
"Значение х после приращения: {0} \n"
, x);
Console
.WriteLine(
"Значение у после приращения: {0} \n"
, у);
}
Результат работы программы:
Значение префиксного выражения: 4
Значение постфиксного выражения: 3
Значение х после приращения: 4
Значение у после приращения: 4
В справочной системе утверждается, что к высшему приоритету относятся постфиксные операции x++ и x--, это нашло отражение в таблице 2.1. Префиксные операции имеют на единицу меньший приоритет.
Следует также заметить, что запись в C# выражения “ --x++ ” приведет к ошибке.
Важнее помнить, что хороший стиль программирования рекомендует использовать эти операции только в выражениях, не содержащих других операндов. Еще лучше вообще не использовать их в выражениях, а применять их только как операторы:
x++; y--;
В этом случае фактически исчезает побочный эффект изменения значения, являющийся опасным средством, и операции используются как краткая запись операторов:
x = x + 1;
y = y - 1;

Лабораторная работа 2. Операторы и выражения.
DK’2016 6
2.4. Методы
Для выполнения определенных блоков кода используются методы. Методы бывают двух типов:
 функции, т.е. методы, возвращающие значения;
 процедуры – методы, не возвращающие значения.
Например, для вывода на консоль используется метод WrileLine() класса Console. Для передачи данных в метод используются параметры метода.
Для реализации вызова методов в программе C# без создания экземпляра класса используются т.н. «статические» методы с использованием ключевого слова static. На данном этапе изучения языка будем использовать только статические методы. С помощью ключевого слова static обозначаются также «глобальные» переменные (в кавычках, т.к. данная переменная является глобальной только в пределах текущего класса – в языке C# глобальные переменные отсутствуют по определению).
Рассмотрим простой пример программы, вычисляющей квадрат числа, с использованием функции Square() и выводящей значение на консоль.
class
Program
{
///

///
Статический метод возведения числа в квадрат
///

///


параметр метода


///

возвращает целое значение, равное квадрату
параметра

static
int
Square(
int
x)
{
int
res = x * x;
return
res;
//возврат значения
}
static
void
Main()
{
int
a=3;
int
a2 = Square(a);
//вызов метода, результат выполнения
записывается в переменную a2
Console
.WriteLine(a2);
}
}
Значение, возвращаемое методом, записывается после ключевого слова return.
Обратите внимание, что в отдельные методы желательно выносить только вычислительную логику программы (формулы циклы, обработку данных). Вывод на консоль реализовывать в методе main.
Процедуры описываются с помощью ключевого слова void. Т.е. методы типа void значений не возвращают. Использование статических переменных является признаком плохого тона, поэтому лучше реализовывать передачу значений через методы.

Лабораторная работа 2. Операторы и выражения.
DK’2016 7
2.5. Арифметические операции
В языке C# имеются обычные для всех языков арифметические операции - "+, -, *, /,
%". Все они перегружены. Операции "+" и "-" могут быть унарными и бинарными.
Операция деления "/" над целыми типами осуществляет деление нацело, а для типов с плавающей точкой - обычное деление. Операция "%" возвращает остаток от деления нацело и определена не только над целыми типами, но и над типами с плавающей точкой.
Тип результата зависит от типов операндов. Приведем пример вычислений с различными арифметическими типами:
///

///
Арифметические операции
///

static
void
Ariphmetic()
{
byte
b1 = 7, b2 = 3, b3;
b3 = (
byte
)(b1 / b2);
int
n = -7, m = 3, p, q, r;
p = n / m; q = n % m; r = p * m + q;
Console
.WriteLine(
"Операции над типом int"
);
Console
.WriteLine(
"n = {0}, m = {1}, p = n/m = {2}, "
+
"q = n % m = {3}, r = p*m + q = {4}"
,
n, m, p, q, r);
Console
.WriteLine(
"Операции над типом double"
);
double
x = 7.5, y = 3.5, u, v, w;
u = x / y; v = u * y;
w = x % y;
Console
.WriteLine(
"x = {0}, y = {1}, u = x/y = {2}, "
+
"v = u*y = {3}, w = x % y = {4}"
,
x, y, u, v, w);
Console
.WriteLine(
"Операции над типом decimal"
);
decimal
d1 = 7.5M, d2 = 3.5M, d3, d4, d5;
d3 = d1 / d2; d4 = d3 * d2;
d5 = d1 % d2;
Console
.WriteLine(
"d1 = {0}, d2 = {1}, d3 = d1/d2 = {2}, "
+
"d4 = d3*d2 = {3}, d5 = d1 % d2 = {4}"
,
d1, d2, d3, d4, d5);
}
//Ariphmetica
Результаты вычислений показаны на рис. 2.1.

Лабораторная работа 2. Операторы и выражения.
DK’2016 8
Рис. 2.1. Результаты работы вызова метода Ariphmetic
2.6. Именованные константы
Введение констант уменьшает время вычислений, поскольку константы, заданные выражениями, вычисляются еще на этапе компиляции.
Рассмотрим в качестве примера вычисление значений переменных x и y, заданных следующими выражениями:
Вычислять эти выражения, точно следуя приведенной записи, не следует. Вот как можно организовать эти вычисления:
static
void
EvalXY(
double
a,
out
double
x,
out
double
y)
{
const
double
C1 = 53.5 * 33 / (37 * 37);
const
double
C2 = 133 + C1, C3 = 1.0 / 3;
double
t1 = a + C1, t2 = a - C1;
x = t1 * t2 /
Math
.Pow(C2, C3);
y = t1 / t2;
}
Заметьте, константы будут вычислены еще на этапе компиляции, так что для вычисления выражений потребуется 5 арифметических операций и один вызов стандартной функции. Выигрыш кажется незначительным при тех скоростях, которыми обладают компьютеры. Но стоит учесть, что метод EvalXY() может вызываться многократно. И главное - даже не выигрыш во времени вычислений. Более важно, что запись выражения становится простой и позволяет легко обнаруживать ее ошибки.
Многие из студентов совершают типичную ошибку, записывая, например, выражение для вычисления x следующим образом:
x = t1 * t2 /
Math
.Pow(133 + C1, 1 / 3);
Ошибка связана с вычислением второго аргумента функции возведения в степень Pow. Здесь применяется операция деления, операнды которой - целые числа, потому результат деления нацело будет равен нулю. Обнаружить ошибку студенты могут далеко не сразу. В процедуре EvalXY ошибка становится видна мгновенно, стоит только взглянуть на значения констант, вычисленных еще на этапе компиляции.
2.7. Операции отношения
Операции отношения стоит просто перечислить, в объяснениях они не нуждаются.
Всего операций 6 (==, !=, <, >, <=, >= ), все они возвращают результат логического типа bool. Операции перегружены, так что их операнды могут быть разных типов.

Лабораторная работа 2. Операторы и выражения.
DK’2016 9
Понятно, что перед вычислением отношения может потребоваться преобразование типа одного из операндов.
Следует обратить внимание на запись отношения эквивалентности, задаваемое двумя знаками равенства. Типичной ошибкой является привычная для математики запись:
if
(a = b) //неправильно!
Выражение в скобках синтаксически корректно и воспринимается, как запись операции присваивания, допустимой в выражениях. К счастью, в большинстве случаев возникнет ошибка на этапе компиляции при попытке преобразования значения операнда b к типу bool. Но, если a и b - переменные логического типа, то никаких сообщений об ошибке выдаваться не будет, хотя результат выполнения может быть неправильным.
2.8. Логические операции
Логические операции в языке C# делятся на две категории: одни выполняются только над операндами типа bool, другие - как над булевскими, так и над целочисленными операндами.
Операций, которые выполняются только над операндами булевского типа, три ( !, &&,
||). Высший приоритет среди этих операций имеет унарная операция отрицания ! x, которая возвращает в качестве результата значение, противоположное значению выражения x. Поскольку неявных преобразований типа к типу bool не существует, то выражение x задается либо переменной булевского типа, либо, как чаще бывает, выражением отношения. Возможна ситуация, когда некоторое выражение явным образом преобразуется к булевскому типу.
Следующая по приоритету бинарная операция (x && y) называется конъюнкцией, операцией "И" или логическим умножением. Она возвращает значение true в том и только в том случае, когда оба операнда имеют значение true. В остальных случаях возвращается значение false.
Следующая по приоритету бинарная операция (x || y) называется дизъюнкцией, операцией "ИЛИ" или логическим сложением. Она возвращает значение false в том и только в том случае, когда оба операнда имеют значение false. В остальных случаях возвращается значение true.
2.9. Класс Math и его функции
Кроме переменных и констант, первичным материалом для построения выражений являются функции. Большинство их в проекте будут созданы самим программистом, но не обойтись и без встроенных функций. Умение работать в среде Visual Studio .Net предполагает знание встроенных возможностей этой среды, знание возможностей каркаса
Framework .Net, пространств имен, доступных при программировании на языке C#, а также соответствующих встроенных классов и функций этих классов. Продолжим знакомство с возможностями, предоставляемыми пространством имен System. В первой лабораторной мы уже познакомились с классом Convert этого пространства и частично с классом Console. Давайте рассмотрим еще один класс – класс Math, содержащий стандартные математические функции, без которых трудно обойтись при построении

Лабораторная работа 2. Операторы и выражения.
DK’2016 10 многих выражений. Этот класс содержит два статических поля, задающих константы E и
PI, а также 23 статических метода. Методы задают:
 тригонометрические функции - Sin, Cos, Tan;
 обратные тригонометрические функции - ASin, ACos, ATan, ATan2 (sinx, cosx);
 гиперболические функции - Tanh, Sinh, Cosh;
 экспоненту и логарифмические функции - Exp, Log, Log10;
 модуль, корень, знак - Abs, Sqrt, Sign;
 функции округления - Ceiling, Floor, Round;
 минимум, максимум, степень, остаток - Min, Max, Pow, IEEERemainder.
Описание методов и полей класса приведено в таблице 2.2.
Таблица 2.2. Основные поля и статические методы класса 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 e x записывается как
Exp(x)
Floor
Округление до меньшего целого double
Floor(double х)
IEEERemainder
Остаток от деления double
IEEERemainder(double x
, double y)
Log
Натуральный логарифм double log e
x записывается как
Log(x)
Log10
Десятичный логарифм double log
10
x записывается как
Log10(x)
Max
Максимум из двух чисел
Перегружен
Max(x
, y)
Min
Минимум из двух чисел
Перегружен
Min(x
, y)
PI
Значение числа double
3,14159265358979
Pow
Возведение в степень double x
y записывается как
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)

Лабораторная работа 2. Операторы и выражения.
DK’2016 11
Tanh
Гиперболический тангенс double
Tanh(double x)
Далее приведен пример применения методов класса Math.
using
System;
namespace
ConsoleApplication1
{
class
Class1
{
static
void
Main()
{
Console
.Write(
"Введите х: "
);
double
x =
double
.Parse(
Console
.ReadLine());
Console
.Write(
"Введите y: "
);
double
y =
double
.Parse(
Console
.ReadLine());
Console
.WriteLine(
"Максимум из х и y : "
+
Math
.Max(x, y));
double
z =
Math
.Pow(
Math
.Sin(x), 2) +
Math
.Pow(
Math
.Sin(y), 2);
Console
.WriteLine(
"Сумма квадратов синусов х и y : "
+ z);
}
}
}

Лабораторная работа 2. Операторы и выражения.
DK’2016 12
Источники:
1. Биллиг
В.
Основы программирования на
С#.
Режим доступа: http://www.intuit.ru/studies/courses/2247/18/info
2. Павловская Т.А. Программирование на C#. Учебный курс. Режим доступа: http://ips.ifmo.ru/courses/csharp/index.html


написать администратору сайта