- •Содержание
- •Глава 1. Основные принципы разработки алгоритмов и программ 8
- •Глава 2. Знакомство с технологией .Nет 30
- •Глава 3. Установка visual studio. Консольные приложения 42
- •Глава 4. Введение в язык c# 52
- •Глава 5. Операции и выражения. Программы линейной структуры 67
- •Глава 6. Программирование ветвящихся процессов 85
- •Глава 7. Программирование циклических процессов 92
- •Предисловие
- •Введение
- •Глава 1. Основные принципы разработки алгоритмов и программ
- •1.1 Этапы решения задач на эвм
- •1.1.1 Постановка задачи
- •1.1.2 Формализация или математическая постановка задачи
- •1.1.3 Выбор или разработка метода решения
- •1.1.4 Разработка алгоритма
- •1.1.5 Программирование
- •1.1.6 Отладка
- •1.1.7 Вычисление и обработка результатов
- •1.2 Формы записи алгоритмов
- •1.2.1 Словесное описание
- •1.2.2 Запись алгоритма с помощью схем
- •1.2.3 Псевдокоды
- •1.2.4 Способ записи на языке программирования
- •1.3 Свойства, которыми должны обладать алгоритмы
- •1.4 Характеристики качества программного продукта
- •1.5 Технология программирования хороших программ
- •1.5.1 Способы проектирования алгоритмов и программ
- •1.5.2 Основные идеи структурного программирования
- •При разработке алгоритма нужно руководствоваться следующими рекомендациями:
- •1.5.3 Дополнительные рекомендации
- •1.6 Контрольные вопросы
- •Глава 2. Знакомство с технологией .Nет
- •2. 1 Причины появления новой платформы и нового языка
- •2.2 Платформа .Nет Framework
- •2.3 Интегрированная среда разработки Visual Studio
- •2.3.1Общеязыковая среда выполнения clr
- •2.3.2 Новации Visual Studio 2010
- •2.4 Основные понятия объектно-ориентированной технологии
- •2.4.1 Инкапсуляция
- •2.4.2 Полиморфизм
- •2.4.3 Наследование
- •2.4.4 Классы
- •Контрольные вопросы
- •Глава 3. Установка visual studio. Консольные приложения
- •3.1 Установка Visual Studio
- •3.2 Разработка приложений
- •3.2.1 Консольные приложения
- •3.2.1.1 Создание проекта. Основные окна среды
- •Контрольные вопросы
- •Глава 4. Введение в язык c#
- •4.1 Историческая справка
- •4.2 Основы языка с#
- •4.2.1 Алфавит языка
- •4.2.2 Лексемы языка, директивы препроцессора и комментарии
- •4.3 Типы данных
- •4.3.1 Классификация типов данных
- •4.3.2 Встроенные типы данных
- •4.3.2.1 Целые типы
- •4.3.2.2 Вещественные типы
- •4.3.2.3 Логический тип
- •4.3.2.4 Символьный тип
- •4.3.2.5 Финансовый тип
- •4.3.3 Литералы
- •4.4 Переменные
- •4.4.1 Объявления переменных
- •4.4.2 Инициализация переменных
- •4.4.3 Область видимости переменных
- •4.5 Именованные константы
- •Контрольные вопросы
- •Глава 5. Операции и выражения. Программы линейной структуры
- •5.1 Выражения
- •5.1.1 Операции
- •5.1.1.1 Арифметические операции
- •5.1.1.2 Операции отношения, сдвига с#
- •5.1.1.3 Поразрядные и логические операции с#
- •5.1.1.4 Операции присваивания
- •5.1.1.5 Условная операция
- •5.2 Преобразование и приведение типов
- •5.2.1 Присвоение переменной одного типа значения другого типа
- •5.2.2 Явное преобразование типа
- •5.2.3 Преобразование типов в выражениях
- •5.3 Класс Math
- •Математические функции можно использовать только с величинами числовых типов. Углы тригонометрических функций должны быть представлены в радианах.
- •5.4 Линейные алгоритмы и программы
- •5.4.1 Простейшие способы вывода
- •5.4.2 Простейшие способы ввода с клавиатуры
- •5.5 Примеры
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 6. Программирование ветвящихся процессов
- •6.1 Условные операторы
- •6.2 Алгоритмы и программы разветвленной структуры
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 7. Программирование циклических процессов
- •7.1 Понятие цикла
- •7.2 Операторы управления
- •7.2.1 Оператор goto
- •7.2.2 Специальные операторы управления
- •7.2.3 Операторы циклов
- •7.3 Программирование вычислительных процессов усложненной структуры
- •7.3.1 Итерационные циклы
- •7.3.2 Вложенные циклы
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
5.1.1.2 Операции отношения, сдвига с#
Все заявленные в заголовке подраздела операции в порядке убывания приоритета представлены в таблице 5.2.
Таблица 5.2 – Операции отношения, сдвига С#
-
Знак операции
Название
<<
>>
Сдвиг влево
Сдвиг вправо
<
>
<=
>=
Меньше
Больше
Меньше или равно
Больше или равно
= =
! =
Равно
Не равно
Сдвиговые операции. Эта группа операций, имеющая наивысший приоритет из представленных в этой таблице, относится к поразрядным специальным бинарным операциям, которые применимы к целочисленным операндам типов: Int, UInt, ULong, Long. Они сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом. Фактически учитывается только 5 младших битов второго операнда, если первый имеет тип int или uint, и 6 битов, если первый операнд имеет тип long или ulong.
I << J – означает сдвиг цифр содержимого I на J битов влево, освобождающиеся младшие разряды заполняются нулями;
I >> J – означает сдвиг цифр содержимого I на J битов вправо, освобождающиеся старшие разряды заполняются нулями, где I и J – выражения любого целого типа. Так происходит, если первый операнд беззнакового типа. При сдвиге вправо значения со знаковым разрядом знаковый бит сохраняется. В этот бит записывается 0 для положительных чисел и 1 – для отрицательных. Таким образом, сдвиговые операции не являются циклическими и потерянные биты невозможно восстановить.
Следующие шесть операций – это операции отношения. Операции отношения предназначены для сравнения двух величин. Естественно, что величины должны быть сравнимых типов. Результат сравнения имеет логический тип. Эти операции часто используются вместе с логическими операциями.
В полном своем составе операции отношения применимы только к тем типам, которые поддерживают отношения упорядоченных значений. Таковыми являются все числовые типы. Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.
Логические же значения true и false C# не рассматривает как упорядоченные, а, следовательно, к ним применимы только две операции отношения: == (равно) и != (не равно). Указанные две операции в C# можно применять вообще к любым объектам.
5.1.1.3 Поразрядные и логические операции с#
Все заявленные в заголовке подраздела операции в порядке убывания приоритета представлены в таблице 5.3.
Таблица 5.3 – Поразрядные и логические операции С#
-
Знак операции
Название
&
^
|
~
Поразрядная конъюнкция (И)
Поразрядное исключающее ИЛИ
Поразрядная дизъюнкция (ИЛИ)
Поразрядное отрицание
&&
| |
Логическое И
Логическое ИЛИ
Поразрядные операции. Операции &, |, ^, ~ используются в C# для реализации над целыми числами типов: Int, UInt, ULong, Long базовых логических операций И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ. Характеристика основных логических операций приведена ниже в таблице 5.4. Тип результата указанных операций при этом определяется типом операнда, имеющего наименьший размер.
Таблица 5.4 Таблица истинности логических операций
-
X
Y
X & Y
X | Y
~ (X)
X ^ Y
True
True
True
True
False
False
True
False
False
True
False
True
False
True
False
True
True
True
False
False
False
False
True
False
В применении к целым числам эти операции имеют следующий смысл:
-
~ – инверсия всех битов целого числа;
-
& – побитовая логическая операция И двух целых чисел;
-
| – побитовая логическая операция ИЛИ двух целых чисел;
-
^ – побитовая логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ (сложение по модулю 2) двух целых чисел.
В отличие от поразрядных логических операций условные логические операции: «&&», «||» выполняются в C# по специальной сокращенной форме, позволяющей получать более эффективный код, уменьшая время выполнения программы.
Сокращенная форма выполнения логических операций «&&», «||» базируется на том факте, что в некоторых ситуациях значение результата операции определяется значением только первого операнда, а, следовательно, отсутствует необходимость в вычислении значения второго операнда, которое само по себе может быть достаточно сложным.
Например, если первый операнд операции «&&» имеет значение false, то каково бы не было значение второго операнда, значение результата операции будет false (табл. 5.4). Например: значение выражения:
(y<=1) && (y>=0) при y>1 – всегда будет равно false.
В свою очередь, при выполнении операции «||», если значение первого операнда – true, то при любом значении второго операнда, значение результата операции будет true (табл. 5.4), поэтому вычисление значения второго операнда оказывается излишним и его можно опустить. Например: значение выражения (y>=0) || (y>=abs(x)) при y>=0 будет равно true.