
- •Язык c# и структура простой программы
- •Что такое .Net Framework
- •Что такое с#
- •Создание первой программы на с#
- •Пространство имен System
- •С# как язык Объектно-Ориентированного Программирования (ооп)
- •Состав и назначение файлов проекта
- •Структура сборки
- •Элементы языка c#
- •Базовый синтаксис с#
- •Переменные
- •Числа без знака
- •Числа со знаком
- •Числа для финансистов
- •Текстовые символы
- •Логический тип данных
- •Литералы с плавающей точкой
- •Символьные литералы
- •Строковые литералы
- •Выражения и операторы с#
- •Инициализация переменных и оператор присваивания
- •Значение в левой части
- •Ввод данных с консоли
- •Математические операторы
- •Вычисление остатка при целочисленном делении
- •Унарные операторы
- •Унарное логическое отрицание
- •Составные операторы
- •Поразрядные операторы
- •Поразрядное логическое и
- •Поразрядное логическое или
- •Поразрядное логическое исключающее или
- •Унарная поразрядная операция дополнения
- •Поразрядный сдвиг
- •Пример использования поразрядных операторов
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Исполнители алгоритмов
- •Исполнитель Чертежник
- •Исполнитель Робот
- •Компьютер как формальный исполнитель алгоритмов
- •Блок-схема
- •Псевдокод
- •Необходимые свойства алгоритма
- •Понятие о временной сложности алгоритма
- •Примеры
- •Правила для определения сложности
- •Тернарный условный оператор
- •Применение логических операций
- •Конструкция выбора
- •Примеры применения оператора выбора
- •Объединение меток case
- •Пропущенный break
- •Пример программы: Простые числа
- •Пример обработки одномерного массива чисел
- •Использование генератора случайных данных
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Поиск элемента в массиве
- •Многомерные массивы
- •Базовые операции со строками
- •Методы типа string
- •Копирование и клонирование строк
- •Конкатенация строк
- •Извлечение подстроки
- •Вставка подстроки
- •Замена символов и строк
- •Удаление символов из строки
- •Удаление незначащих пробелов
- •Преобразование к верхнему и нижнему регистру
- •Выравнивание по левому и правому краю поля
- •Объединение массива строк
- •Разбор строки
- •Сравнение строк
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Выходные параметры
- •Область действия переменных
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Параметры функции Main()
- •Перегрузка функций
- •Перечислимый тип
- •Определение перечислимых типов
- •Структуры
- •Описание структур
- •Использование структур в качестве параметров функций
- •Использование структур в качестве возвращаемых значений функций
- •Функции структур
- •Файлы и потоки
- •Основные классы ввода и вывода
- •Классы для работы с потоками
- •Классы для работы с потоками текстовых символов
- •Работа с текстовыми файлами
Вычисление остатка при целочисленном делении
Как мы говорили в предыдущем разделе, при целочисленном делении остаток отбрасывается. В некоторых случаях, однако, программисту нужен именно остаток от деления двух целых чисел, например чтобы узнать, делятся эти числа нацело или нет.
Для вычисления остатка при целочисленном делении в языке С# используется оператор деления по модулю %. Он применяется таким же образом, что и оператор деления, но в результате вычисляется не частное, а остаток.
Рассмотрим пример программы, демонстрирующей выполнение операций целочисленного деления и деления по модулю.
using System;
namespace MathOperators4
{
class MathOperatorsApp4
{
static void Main(string[] args)
{
System.Console.WriteLine(" 5 / 2 = {0}, 5 % 2 = {1}",
5/2, 5%2);
System.Console.ReadLine();
}
}
}
После выполнения этой программы получим:
Результат подтверждает, что если разделить 5 на 2, то частное будет равно двум, а остаток — единице. Деление по модулю на нуль, так же как и обычное целочисленное деление на нуль, в языке С# запрещено. Попытка выполнить такое деление приведет к возникновению исключительной ситуации, которую мы уже наблюдали.
Унарные операторы
До сих пор мы изучали бинарные (binary) операторы, работающие с двумя операндами. Однако в языке С# имеется также набор унарных (unary) операторов, имеющих дело только с одним операндом. Набор унарных операторов языка С# аналогичен набору унарных операторов языков С и C++:
Символ |
Оператор |
+ |
Унарный плюс |
– |
Унарный минус |
++ |
Инкремент |
– – |
Декремент |
! |
Унарное логическое отрицание |
~ |
Унарная поразрядная операция дополнения |
(<тип>) |
Преобразование типа выражения |
Унарный плюс
Результатом выполнения унарного оператора плюс над числовым операндом является значение операнда, т. е. фактически унарный плюс не выполняет никаких действий над числовыми значениями.
Унарный минус
Унарный минус изменяет знак операнда на противоположный:
int х = -5;
int у = -х;
Здесь в первой строке унарный минус добавлен в качестве префикса к числовому литералу 5, в результате чего в переменную х будет записано отрицательное значение -5.
Во второй строке оператор унарного минуса используется для того, чтобы записать в переменную у значение, равное по модулю значению переменной х, но противоположное по знаку.
Инкремент и декремент
Операторы инкремента (+ +) и декремента (– –) могут использоваться либо в префиксной форме, либо в постфиксной форме. Префиксная форма предполагает размещение оператора перед операндом, а постфиксная — после операнда.
Вот примеры использования постфиксного оператора + +:
int х = 5;
x++;
В результате выполнения этого фрагмента кода переменная х будет содержать значение 6. По выполняемым результатам унарный оператор + +, использованный во второй строке, эквивалентен следующему бинарному оператору:
х = х + 1;
Аналогично вместо унарного оператора х-- можно использовать бинарный оператор:
х = х - 1;
Если используется префиксная форма унарного оператора инкремента или декремента, то содержимое переменной изменяется до ее чтения, а если постфиксная — после. Поясним это на примере.
Ниже мы использовали префиксный оператор инкремента, поэтому вначале содержимое переменной х увеличивается на единицу, а затем ее новое значение, равное шести, используется для инициализации переменной у:
int х = 5;
int у = ++х;
При использовании постфиксного оператора инкремента все будет по-другому:
int х = 5;
int у = х++;
Вначале переменная у будет проинициализирована исходным значением, хранящимся в переменной х, равным пяти. После этого содержимое переменной х увеличится на единицу.
Таким образом, выполнение любого из приведенных выше фрагментов кода приведет к тому, что в переменную х будет записано значение 6. Однако содержимое переменной у будет различным. В первом случае оно будет равно шести, а во втором — пяти.