
- •Язык c# и структура простой программы
- •Что такое .Net Framework
- •Что такое с#
- •Создание первой программы на с#
- •Пространство имен System
- •С# как язык Объектно-Ориентированного Программирования (ооп)
- •Состав и назначение файлов проекта
- •Структура сборки
- •Элементы языка c#
- •Базовый синтаксис с#
- •Переменные
- •Числа без знака
- •Числа со знаком
- •Числа для финансистов
- •Текстовые символы
- •Логический тип данных
- •Литералы с плавающей точкой
- •Символьные литералы
- •Строковые литералы
- •Выражения и операторы с#
- •Инициализация переменных и оператор присваивания
- •Значение в левой части
- •Ввод данных с консоли
- •Математические операторы
- •Вычисление остатка при целочисленном делении
- •Унарные операторы
- •Унарное логическое отрицание
- •Составные операторы
- •Поразрядные операторы
- •Поразрядное логическое и
- •Поразрядное логическое или
- •Поразрядное логическое исключающее или
- •Унарная поразрядная операция дополнения
- •Поразрядный сдвиг
- •Пример использования поразрядных операторов
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Исполнители алгоритмов
- •Исполнитель Чертежник
- •Исполнитель Робот
- •Компьютер как формальный исполнитель алгоритмов
- •Блок-схема
- •Псевдокод
- •Необходимые свойства алгоритма
- •Понятие о временной сложности алгоритма
- •Примеры
- •Правила для определения сложности
- •Тернарный условный оператор
- •Применение логических операций
- •Конструкция выбора
- •Примеры применения оператора выбора
- •Объединение меток case
- •Пропущенный break
- •Пример программы: Простые числа
- •Пример обработки одномерного массива чисел
- •Использование генератора случайных данных
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Поиск элемента в массиве
- •Многомерные массивы
- •Базовые операции со строками
- •Методы типа string
- •Копирование и клонирование строк
- •Конкатенация строк
- •Извлечение подстроки
- •Вставка подстроки
- •Замена символов и строк
- •Удаление символов из строки
- •Удаление незначащих пробелов
- •Преобразование к верхнему и нижнему регистру
- •Выравнивание по левому и правому краю поля
- •Объединение массива строк
- •Разбор строки
- •Сравнение строк
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Выходные параметры
- •Область действия переменных
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Параметры функции Main()
- •Перегрузка функций
- •Перечислимый тип
- •Определение перечислимых типов
- •Структуры
- •Описание структур
- •Использование структур в качестве параметров функций
- •Использование структур в качестве возвращаемых значений функций
- •Функции структур
- •Файлы и потоки
- •Основные классы ввода и вывода
- •Классы для работы с потоками
- •Классы для работы с потоками текстовых символов
- •Работа с текстовыми файлами
Логические операторы
Логические операторы предназначены для выполнения операций над данными, объявленными в программе при помощи ключевого слова boo1.
Напомним, что логические переменные могут принимать одно из двух значений — true (истина) или false (ложь). В языке С# эти значения никак не соотносятся с числами 1 и 0. Результатом выполнения логического оператора всегда является логическое значение true или false .
В языке С# имеется три логических оператора:
Символ |
Оператор |
&& |
Логический оператор И |
|| |
Логический оператор ИЛИ |
! |
Унарное логическое отрицание |
Если оба операнда логического оператора И равны true, то результатом выполнения этой операции будет true . В противном случае результат будет false. Если хотя бы один из операндов логического оператора ИЛИ равен true, то результатом выполнения этой операции будет true. Если же оба операнда равны false, то и результат будет тоже равен false.
Вот пример использования логических операторов:
bool op = true;
bool result1 = op && false;
bool result2 = op || false;
bool result3 = !op;
В результате выполнения этих операторов в переменных result1 и result3 будет храниться значение false , а в переменной result2 — значение true.
Логические операторы широко используются в различных управляющих конструкциях языка, о которых вы узнаете в следующем разделе данного курса.
Операторы отношения
Эти операторы иначе именуются операторами сравнения и знакомы из курса элементарной математики. Результат выполнения бинарных операторов отношения представляется в виде логических значений true или false.
Символ |
Оператор |
== |
Равно |
!= |
Не равно |
< |
Меньше |
<= |
Меньше или равно |
> |
Больше |
>= |
Больше или равно |
Операторы отношения позволяют сравнивать значения переменных и выражений между собой. Например, результат вычисления выражения 2 < 4 будет true , а результат вычисления выражения 1 = = 2 будет равен false.
Операторы отношения, так же как и рассмотренные ранее логические операторы, используются в условных операторах, рассказ о которых мы отложим до следующего раздела.
Приоритеты операторов
В программах часто используются выражения из нескольких операторов. Не исключено, что в этих выражениях будут встречаться унарные и бинарные операторы.
Вот пример такого составного выражения:
int х = 1;
int у = 2;
int result = 2 + х * 3 / 5 + у++ / 2;
Рассматривая такое выражение, трудно сразу сказать, какое значение получит переменная result после его вычисления. Проблема состоит в том, что далеко не всегда очевиден порядок выполнения отдельных операторов в составном выражении. Однако в зависимости от порядка выполнения операторов может получиться разный результат.
Приведем более простой пример. Пусть нам нужно вычислить значение переменной х после выполнения следующей строки кода:
int х = 2 + 3 * 4;
Если вычислять это выражение слева направо, то сначала нужно сложить числа 2 и 3, а затем результат умножить на 4. После подобных вычислений значение переменной х будет равно 20.
Если же вычислять это выражение справа налево, то сначала нужно умножить 3 на 4, а затем к результату добавить 2. При этом в переменную х будет записано значение 14.
Чтобы избежать неоднозначности, все операторы в языке С# (как, впрочем, и в других языках программирования) имеют свой приоритет. Более приоритетные операторы выполняются в первую очередь. В приведенном выше примере оператор умножения имеет высший приоритет по сравнению с оператором сложения, поэтому в результате вычисления получится значение 14.
При необходимости мы можем задать порядок вычислений в составных выражениях подобного рода при помощи скобок, например:
int х = ( 2 + 3 ) * 4;
Таким образом мы сообщаем компилятору, что вначале нужно сложить числа 2 и 3, а затем умножить полученный результат на 4. Для наглядности мы рекомендуем в сложных выражениях всегда задавать порядок выполнения операций явным образом. Это поможет избежать ошибок, связанных с неправильной оценкой приоритетов операторов.
Сведем в единую таблицу приоритеты всех операторов С#. С некоторыми операторами, представленными в ней, вы уже знакомы, а с некоторыми познакомитесь позже.
Операторы |
Категория |
х.у f(x) а[х] х++ х-- new typeof checked unchecked |
Простые операторы |
+ - ! ~ ++x --x (T) x |
Унарные операторы |
* / % |
Операторы умножения и деления |
+ – |
Аддитивные операторы |
<< >> |
Операторы сдвига |
< > <= >= is as |
Операторы отношения и проверки типа |
== != |
Операторы равенства и неравенства |
& |
Поразрядный оператор И |
^ |
Поразрядный оператор ИСКЛЮЧАЮЩЕЕ ИЛИ |
| |
Поразрядный оператор ИЛИ |
&& |
Логический оператор И |
|| |
Логический оператор ИЛИ |
?: |
Оператор условия |
= *= /= %= += -= <<= >>= &= ^= |= |
Операторы присваивания |
Как видите, по приоритету вначале выполняются простые операторы, затем унарные, после них — операторы умножения и деления, затем — сложения и сдвига. Операторы отношения, равенства и неравенства, а также логические операторы имеют низкий приоритет. Но самый низкий приоритет отдается операторам присваивания (простым и составным).
Алгоритмизация и решение задач
Понятие алгоритма
Решение любой задачи, связанной с вычислениями, включает в себя выполнение ряда действий в определенном порядке. Процедура решения задачи в виде действий, которые надлежит выполнить, и порядка, в котором эти действия должны быть выполнены, называется алгоритмом. Следующий пример показывает важность правильного определения порядка, в котором должны выполняться действия.
Рассмотрим «алгоритм активного пробуждения», которому следует некий студент для того, чтобы встать с постели и отправиться на занятия:
Встать с постели.
Снять пижаму.
Принять душ.
Одеться.
Позавтракать.
Отправиться на занятия.
В результате этой последовательности действий студент приходит на занятия хорошо подготовленным для учебы. Предположим, однако, что те же самые шаги выполняются в несколько ином порядке:
Встать с постели.
Снять пижаму.
Одеться.
Принять душ.
Позавтракать.
Отправиться на занятия.
В этом случае наш студент появится на занятиях мокрым до нитки. Задание порядка, в котором должны выполняться элементарные действия (операторы), называется управлением (программой).