Методичка по C# / Часть 03. Основы программирования на языке C#
2. Написать программу , которая запрашивает с клавиатуры два целых числа и выводит на экран выражение их сложения в прямом и обратном порядке :
3. Написать программу , которая запрашивает с клавиатуры три целых числа и выводит на экран сумму данных чисел :
4. Написать программу , которая запрашивает с клавиатуры два вещественных числа и выводит на экран произведение данных чисел ( вещественные числа выводятся с точностью до 1 знака после запятой ):
5. Написать программу , которая запрашивает с клавиатуры два вещественных числа , и выводит на экран результат деления первого числа на второе ( вещественные числа выводятся с точностью до 3 знаков после запятой ):
Основы программирования на языке C#
6. Написать программу , которая запрашивает с клавиатуры три вещественных числа и выводит на экран следующее сообщение ( вещественные числа выводятся с точностью до 2 знаков после запятой ):
7. Написать программу , которая запрашивает с клавиатуры номинал купюры и количество купюр , и выводит экран следующее сообщение :
8. Написать программу , которая запрашивает с клавиатуры сумму вклада и процент по вкладу , и выводит на экран начисленную в конце года сумму :
9. Написать программу , которая запрашивает с клавиатуры сумму вклада и процент по вкладу , и выводит на экран итоговую сумму вклада в конце года :
10. Написать программу , которая запрашивает с клавиатуры имя человека и его возраст , и выводит на экран следующее сообщение ( в примере текущим годом считается 2009):
Полный список операций языка С # в соответствии с их приоритетами ( по убыванию приоритетов , операции с разными приоритетами разделены чертой ) приведен в
Основы программирования на языке C#
Приложении 1. В данном разделе мы подробно рассмотрим только часть операций . Остальные операции будут вводиться по мере необходимости .
Операции языка C# можно классифицировать по количеству операндов на : унарные – воздействуют на один операнд , бинарные – воздействуют на два операнда и тернарные – воздействуют на три операнда . Некоторые символы используются для обозначения как унарных , так и бинарных операций . Например , символ « минус » используется как для обозначения унарной операции арифметического отрицания , так и для обозначения бинарной операции вычитания . Будет ли данный символ обозначать унарную или бинарную операцию , определяется контекстом , в котором он используется .
Инкремент (++) и декремент (--).
Эти операции имеют две формы записи – префиксную , когда операция записывается перед операндом , и постфиксную – операция записывается после операнда . Префиксная операция инкремента ( декремента ) увеличивает ( уменьшает ) свой операнд и возвращает измененное значение как результат . Постфиксные версии инкремента и декремента возвращают первоначальное значение операнда , а затем изменяют его . Рассмотрим эти операции на примере .
static void Main()
int i = 3, j = 4; Console.WriteLine(" ", i, j); Console.WriteLine(" ", ++i, --j); Console.WriteLine(" ", i++, j--); Console.WriteLine(" ", i, j);
Результат работы программы :
Выясните , допустимы ли следующие способы записи ++(++i), (i--)--, ++(i--) и т . д . И почему .
Используется для создания нового объекта . С помощью ее можно создавать как объекты ссылочного типа , так и размерные , например :
object z = new object();
int i = new int(); // то же самое , что и int i =0;
Арифметическое отрицание (-) – меняет знак операнда на противоположный .
Логическое отрицание (!) – определяет операцию инверсии для логического типа .
Рассмотрим эти операции на примере .
Основы программирования на языке C#
static void Main()
bool a = true, b=false; Console.WriteLine(" ", -i, -j); Console.WriteLine(" ", !a, !b);
Результат работы программы :
Выясните , допустимы ли следующие способы записи !(-i), -(!a). И почему .
Явное преобразование типа
Используется для явного преобразования из одного типа в другой . Формат операции :
Рассмотрим эту операцию на примере .
static void Main()
int i = -4; byte j = 4;
// преобразование без потери точности int a = (int)j;
// преобразование с потерей точности byte b = (byte)i; Console.WriteLine(" ", a, b);
Результат работы программы :
Объясните , почему операция (byte)i вместо ожидаемого значения -4 дала нам в качестве результата значение 252.
В Pascal, C++ и других языках допускается неявное преобразование типов , которое в рамках предыдущего примера позволило бы записать : b=i. В этом случае происходит потеря точности вычислений , о чем компилятор либо либо " умалчивает ", либо сообщает в виде предупреждения . Возможность неявного преобразования чревата вычислительными ошибками , которые очень трудно найти . Чтобы избежать подобных ошибок , в C# запрещены некоторые виды неявных преобразований . Более подробно преобразование типов мы рассмотрим в следующем разделе .
Умножение (*), деление (/) и деление с остатком (%).
Операции умножения и деления применимы для целочисленных и вещественных типов данных . Для других типов эти операции применимы , если для них возможно неявное преобразование к целым , или вещественным типам . При этом тип результата равен
Основы программирования на языке C#
« наибольшему » из типов операндов , но не менее int. Если оба операнда при делении целочисленные , то и результат тоже целочисленный .
Рассмотрим эти операции на примере .
static void Main()
int i = 100, j = 15; double a = 14.2, b = 3.5;
Console.WriteLine(" ", i*j, i/j, i%j); Console.WriteLine(" ", a * b, a / b, a % b);
Результат работы программы :
49.7 4.05714285714286 0.1999999999999999
Выполните фрагмент программы :
double a=100, b=33; Console.WriteLine(a/b); double d=100/33; Console.WriteLine(d);
И объясните полученный результат .
Выясните , чему будут равны результаты выполнения операций 1.0/0 и 1/0. Объясните полученные результаты .
Сложение (+) и вычитание (-)
Операции сложения и вычитания применимы для целочисленных и вещественных типов данных . Для других типов эти операции применимы , если для них возможно неявное преобразование к целым или вещественным типам .
Операции отношения сравнивают значения левого и правого операндов . Результат операции логического типа : true – если значения совпадают , false – в противном случае . Рассмотрим операции на примере :
static void Main()
int i = 15, j = 15; Console.WriteLine(i<j); // меньше Console.WriteLine(i<=j); // меньше или равно Console.WriteLine(i>j); // больше Console.WriteLine(i>=j); // больше или равно Console.WriteLine(i==j); // равно Console.WriteLine(i!=j); // не равно
Основы программирования на языке C#
Результат работы программы :
Выясните , чему будут равны результаты вычисления выражений 10<25<30 и true<false. Объясните полученные ответы .
Логические операции : И (&&), ИЛИ (||)
Логические операции применяются к операндам логического типа .
Результат логической операции И имеет значение истина тогда и только тогда , когда оба операнда принимают значение истина .
Результат логической операции ИЛИ имеет значение истина тогда и только тогда , когда хотя бы один из операндов принимает значение истина .
Рассмотрим операции на примере :
static void Main()
false, false, false&&false, false||false); Console.WriteLine(" ",
false, true, false&&true, false||true); Console.WriteLine(" ",
true, false, true&&false, true||false); Console.WriteLine(" ",
true, true, true&&true, true||true);
Результат работы программы :
Фактически была построена таблица истинности для логических операций И и ИЛИ .
Объясните , какое значение примет переменная t в данном фрагменте программы :
Формат : (< операнд 1>)? < операнд 2> : < операнд 3>;
Основы программирования на языке C#
Операнд 1 – это логическое выражение , которое оценивается с точки зрения его эквивалентности константам true и false . Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение операнда 2, иначе – операнда 3. Фактически , условная операция является сокращенной формой условного оператора if, который будет рассмотрен позже .
Пример использования условной операции :
static void Main()
int x = 5; int y = 10;
int max = (x > y) ? x : y; Console.WriteLine(max);
Измените программу так , чтобы вычислялось наименьшее значение из двух вещественных чисел x и y;
Измените программу так , чтобы на экран выводилось « Да », если число двузначное и « Нет » в противном случае .
Операции присваивания : =, +=, -= и т . д .
Формат операции простого присваивания (=):
операнд _2 = операнд _1;
В результате выполнения этой операции вычисляется значение операнда _1, и результат записывается в операнд _2. Можно связать воедино сразу несколько операторов присваивания , записывая такие цепочки :
Выражение такого вида выполняется справа налево : результатом выполнения c = 100 является число 100, которое затем присваивается переменной b, результатом чего опять является 100, которое присваивается переменной a.
Кроме простой операции присваивания существуют сложные операции присваивания , например , умножение с присваиванием (*=), деление с присваиванием (/=), остаток от деления с присваиванием (%=), сложение с присваиванием (+=), вычитание с присваиванием
В сложных операциях присваивания , например , при сложении с присваиванием , к операнду _2 прибавляется операнд _1, и результат записывается в операнд _2. То есть , выражение с += а является более компактной записью выражения с = с + а .
Объясните , какие значения примут переменные t и b после выполнения данного фрагмента программы :
int a=10, b=3; int t=(a++)-b; int b+=t*a;
Основы программирования на языке C#
Рассмотренные операции приведены с учетом убывания приоритета . Полный список операций приведен в приложении 1.
Выражения и преобразование типов
Выражение – это синтаксическая единица языка , определяющая способ вычисления некоторого значения . Выражения состоят из операндов , операций и скобок . Каждый операнд является в свою очередь выражением или одним из его частных случаев : константой , переменной или функций .
Список математических функций , реализованных в С #, приведен в приложении 2.
(t * Math.Sin(x)-l.05e4)/((2 * k + 2) * (2 * k + 3))
Вычисление значения выражения происходит с учетом приоритета операций ( см . Приложение 1), которые в нем участвуют . Если в выражении соседствуют операции одного приоритета , то унарные операции , условная операция и операции присваивания выполняются справа налево , остальные – слева направо . Например , а = b = с означает a=(b=c), a+b+c означает ( а + b) + с .
Если необходимо изменить порядок выполнения операций , то в выражении необходимо поставить круглые скобки .