
- •Язык c# и структура простой программы
- •Что такое .Net Framework
- •Что такое с#
- •Создание первой программы на с#
- •Пространство имен System
- •С# как язык Объектно-Ориентированного Программирования (ооп)
- •Состав и назначение файлов проекта
- •Структура сборки
- •Элементы языка c#
- •Базовый синтаксис с#
- •Переменные
- •Числа без знака
- •Числа со знаком
- •Числа для финансистов
- •Текстовые символы
- •Логический тип данных
- •Литералы с плавающей точкой
- •Символьные литералы
- •Строковые литералы
- •Выражения и операторы с#
- •Инициализация переменных и оператор присваивания
- •Значение в левой части
- •Ввод данных с консоли
- •Математические операторы
- •Вычисление остатка при целочисленном делении
- •Унарные операторы
- •Унарное логическое отрицание
- •Составные операторы
- •Поразрядные операторы
- •Поразрядное логическое и
- •Поразрядное логическое или
- •Поразрядное логическое исключающее или
- •Унарная поразрядная операция дополнения
- •Поразрядный сдвиг
- •Пример использования поразрядных операторов
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Исполнители алгоритмов
- •Исполнитель Чертежник
- •Исполнитель Робот
- •Компьютер как формальный исполнитель алгоритмов
- •Блок-схема
- •Псевдокод
- •Необходимые свойства алгоритма
- •Понятие о временной сложности алгоритма
- •Примеры
- •Правила для определения сложности
- •Тернарный условный оператор
- •Применение логических операций
- •Конструкция выбора
- •Примеры применения оператора выбора
- •Объединение меток case
- •Пропущенный break
- •Пример программы: Простые числа
- •Пример обработки одномерного массива чисел
- •Использование генератора случайных данных
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Поиск элемента в массиве
- •Многомерные массивы
- •Базовые операции со строками
- •Методы типа string
- •Копирование и клонирование строк
- •Конкатенация строк
- •Извлечение подстроки
- •Вставка подстроки
- •Замена символов и строк
- •Удаление символов из строки
- •Удаление незначащих пробелов
- •Преобразование к верхнему и нижнему регистру
- •Выравнивание по левому и правому краю поля
- •Объединение массива строк
- •Разбор строки
- •Сравнение строк
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Выходные параметры
- •Область действия переменных
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Параметры функции Main()
- •Перегрузка функций
- •Перечислимый тип
- •Определение перечислимых типов
- •Структуры
- •Описание структур
- •Использование структур в качестве параметров функций
- •Использование структур в качестве возвращаемых значений функций
- •Функции структур
- •Файлы и потоки
- •Основные классы ввода и вывода
- •Классы для работы с потоками
- •Классы для работы с потоками текстовых символов
- •Работа с текстовыми файлами
- •Запись двоичных данных
- •Пример программы для работы с двоичным файлом
- •Просмотр содержимого каталога
- •Получение информации о каталоге
Применение логических операций
В предыдущей программе для определения принадлежности значения переменной inputNumber интервалу [0, 100] мы использовали следующую конструкцию с логическим оператором И:
if(inputNumber > 0 && inputNumber <= 100)
System.Console.Write("Это число больше 0, но меньше или равно 100");
Аналогичного результата можно было бы добиться при помощи вложенного оператора if:
if(inputNumber > 0)
{
if(inputNumber <= 100)
{
System.Console.Write("Это число больше 0");
System.Console.Write(", но меньше или равно 100");
}
}
Если проверяется сложное условие, логические операторы позволят сократить исходный текст программы и сделать его нагляднее. Список логических операторов можно найти в одном из предыдущих разделов данного курса.
Интерпретация выражений, содержащих большое количество операторов отношений и логических операторов, может вызывать определенные трудности. Чтобы не запутаться с приоритетами операций, используйте круглые скобки, например:
if(((inputNumber > 10) && (inputNumber <= 100)) ||
! ((х > 20) && (х <= 200)))
Здесь тело оператора if будет выполнено в том случае, если число inputNumber принадлежит интервалу ]10, 100] или число х не принадлежит интервалу ]20, 200].
Наличие скобок никак не скажется на скорости компиляции или исполнения программы, но позволит улучшить ее читаемость и, в конечном счете, облегчит отладку.
Конструкция выбора
Мы уже рассмотрели пример программы, которая выполняла те или иные действия в зависимости от значения числа, введенного с клавиатуры.
Задача выбора одного действия из нескольких по результатам вычисления какого-либо выражения возникает очень часто, и в языке С# предусмотрен специальный оператор выбора switch, предназначенный для ее решения. Этот оператор используется для исполнения того или иного фрагмента программы в зависимости от значения переменной или выражения.
На блок-схеме алгоритма конструкция выбора изображается как ветвление со многими альтернативами, причем для каждой альтернативы указывается соответствующее значение выражения. Одна дополнительная альтернатива может быть указана для случая, когда значение выражения не совпадает ни с одной альтернативой:
Аналогично данная конструкция выглядит на псевдокоде:
Выбор <Выражение>
Случай <K1>
<Оператор 1>
Случай <K2>
<Оператор 2>
. . .
Случай <KN>
<Оператор N>
Иначе
<Оператор N+1>
Все-Выбор
На C# оператор switch в общем виде записывается так (квадратными скобками отмечены необязательные конструкции оператора):
switch(<Переключающее выражение>)
{
case <Выражение-константа 1>:
<Оператор 1>
[<Оператор перехода>]
[case <Выражение-константа 2>:
<Оператор 2>
[<Оператор перехода>]]
. . .
[default:]
[<Оператор N+1>]
}
Оператор switch выполняется следующим образом.
Вначале вычисляется значение выражения <Переключающее выражение>, следующего за ключевым словом switch. Это выражение должно быть целочисленным (со знаком или без знака), символьным char либо строковым string. Оно также может быть перечислением enum, созданным на базе значений указанных типов (тип string и перечисление enum в данном курсе рассматриваются позже).
Результат вычислений сравнивается с выражениями-константами блоков case (называемых также метками case). В случае совпадения значения управление передается оператору соответствующего блока case. Если совпадений не обнаружено, управление передается оператору <Оператор N+1> блока default.
Операторы, расположенные в блоках case и default , можно заключать в фигурные скобки, хотя это и не обязательно.
По сравнению с вложенным оператором if оператор выбора позволяет создавать более эффективные программы, так как компилятор соответствующим образом оптимизирует создаваемый код. В частности, для ускорения работы оператора создается специальная таблица переходов, каждый из которых соответствует своему блоку case. Вычислив условие, программа сразу получает из таблицы информацию, необходимую для исполнения соответствующего блока case или блока default. Что же касается вложенного оператора if, то он последовательно сравнивает полученный результат со всеми константными выражениями, а на это требуется больше времени.