- •Содержание
- •Глава 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 Вложенные циклы
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
7.2.3 Операторы циклов
В С# существует четыре вида циклических операторов: цикл с параметром for, цикл с предусловием while, цикл с постусловием do и цикл перебора foreach. Как уже было отмечено, все эти структуры повторения имеют как общие моменты в своей организации и функционировании, так и отличия. Далее рассмотрим все структуры повторения более подробно. Но, для того чтобы лучше уяснить общие моменты работы циклических операторов и их отличия друг от друга, реализуем алгоритмы и программы решения одной и той же пары часто встречаемых простейших задач с помощью различных циклических структур.
7.2.3.1 Оператор цикла for
Схема алгоритма цикла с параметром представлена на рисунке 7.1.
Рисунок 7.1 – Схема алгоритма цикла с параметром
Для организации цикла такой структуры в С# используется специальный оператор цикла for. Оператор цикла for – это такой оператор, где все управление циклом сосредоточено в его заголовке. Он по сравнению с другими циклическими операторами компактнее и понятнее и любим программистами.
Цикл for – это одна из наиболее гибких конструкций С#, так как допускает множество вариантов. Весьма важным в работе рассматриваемой структуры повторения является понятие: параметр цикла или управляющая переменная (переменные) цикла. Назначение их вполне очевидно – управлять работой цикла.
Общий формат записи оператора for имеет следующий вид:
for (инициализация; условие; итерация)
{последовательность операторов}
Рассмотрим составляющие этой записи.
Элемент инициализация обычно представляет собой инструкцию присваивания, которая, с одной стороны, служит для объявления параметров, используемых в цикле, а с другой стороны, устанавливает им начальные значения. Каждый параметр цикла действует в качестве счетчика. Если в части инициализация требуется записать несколько операторов присваивания, то их необходимо разделять запятой, например:
for ( int к = 5, i = 20; ... ; …)
Если переменные объявлены в части инициализации цикла, то областью их видимости является этот цикл. Вход в цикл осуществляется только через его заголовок, и инициализация выполняется один раз в начале исполнения цикла. Цикл с параметром реализован как цикл с предусловием.
Элемент условие представляет собой выражение типа bool, в котором проверяется значение управляющей переменной (переменных) цикла. Результат этого тестирования определяет, выполнится ли цикл for еще раз или нет. Цикл for будет выполняться до тех пор, пока вычисление элемента условие дает истинный результат. Как только условие станет ложным, выполнение программы продолжится с инструкции, следующей за циклом for. В общем случае в качестве логического выражения, управляющего работой цикла for, может быть использовано любое допустимое выражение, результат которого имеет тип bool. Например:
for ( int к = 5, i = 20; к<10 && i>5; ...)
Элемент итерация – это выражения, которые определяют, как изменяются значения параметров цикла после каждой итерации.
for ( int к = 5, i = 20; к<10 && i>5; к ++, i--)
Тело цикла представляет собой блок, содержащий один или несколько операторов, заключенных в фигурные скобки. Все части заголовка оператора цикла for должны отделяться точкой с запятой. Любая из частей оператора for может быть опущена. Если такая ситуация возникает, необходимо следить за тем, чтобы точки с запятой оставались на своих местах. Особый случай данного оператора (это когда опущены все части его заголовка) – бесконечный цикл.
for (;;)
{
// бесконечный цикл
}
Подобные циклические структуры должны содержать в своем теле специальные требования к их завершению.
В отличие от Pascal, в котором к параметру цикла предъявляются довольно жесткие требования, в C# все спокойнее и проще: переменная цикла может быть дробным числом, либо отсутствовать вообще, также шаг цикла может быть дробным.
В общем случае надо стремиться к минимизации области действия переменных. Это облегчает поиск ошибок в программе.
Пример 1. Известны интервал (xn xk), шаг изменения аргумента hx. Написать программу для вычисления значений функции для каждого значения аргумента (задача табуляции функции). Тип аргумента и тип значения функции – вещественные.
С точки зрения алгоритмизации задача табуляции функции является арифметическим циклом (рис. 7.2), так как число повторений цикла можно легко рассчитать.
Рисунок 7.2 – Схема алгоритма с оператором цикла for к примеру 1
В данном примере параметром цикла является вещественная переменная х, которая изменяется от хn до xk с каждой итерацией на величину hx.
Листинг 1 – К примеру 1
using System;
namespace ConsoleApplication1
{ class Program
{ static void Main(string[] args)
{
double xn, xk, hx,y;
Console.Write("Enter xn ");
xn = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter xk ");
xk = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter hx ");
hx = Convert.ToDouble(Console.ReadLine());
for (double x = xn; x <= xk; x += hx)
{
y = Math.Sin(x);
Console.WriteLine("х="+ x+" у="+ y);
}
}
}
}
Пример 2. Вычислить произведение натурального ряда чисел от 1 до 25, т.е. значение факториала 25, математическая запись которого - 25!.
Рисунок 7.3 – Схема алгоритма с оператором цикла for к примеру 2
В данной программе управляющая переменная циклом i изменяется от 1 c шагом +1, принимая последовательно все значения натурального ряда чисел до n включительно, которые и накапливаются как сомножители в произведении р. После выхода из цикла значение этого произведения и определит значение искомого факториала, которое будет выведено на экран монитора.
Листинг 2 – К примеру 2
using System;
namespace ConsoleApplication1
{ class Program
{
static void Main(string[] args)
{
int p=1,n;
Console.Write("Enter n ");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= n; i++)
p = p * i;
Console.WriteLine("p="+ p);
}
}
}
7.2.3.2 Оператор цикла с предусловием while
Не лишним будет вспомнить схему алгоритма организации цикла с предусловием, представленную на рисунке 7.4.
Рисунок 7.4 – Схема алгоритма цикла с предусловием к примеру 1
Для организации цикла такой структуры в С# используется специальный оператор цикла while. Общая синтаксическая форма данного оператора цикла имеет вид:
while (условие) {
последовательность операторов
}
Здесь под элементом последовательность операторов понимается либо одиночный оператор, либо блок операторов. Работой цикла управляет элемент условие, который представляет собой любое допустимое выражение типа bool. Элемент инструкция выполняется до тех пор, пока условное выражение возвращает значение true. Как только это условие становится ложным, управление передается оператору, который следует за этим циклом.
Рисунок 7.5 – Схема с циклом с предусловием к примеру 1
Листинг 3 – С циклом с предусловием к примеру 1
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double xn, xk, hx, y;
Console.Write("Enter xn ");
xn = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter xk ");
xk = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter hx ");
hx = Convert.ToDouble(Console.ReadLine());
double x = xn;
while ( x <= xk)
{
y = Math.Sin(x);
Console.WriteLine("х=" + x + " у=" + y);
x += hx;
}
}
}
}
Рисунок 7.6 – Схема c циклом с предусловием к примеру 2
Листинг 4 – С циклом с предусловием к примеру2
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int p=1,n,i=1;
Console.Write("Enter n ");
n = Convert.ToInt32(Console.ReadLine());
while (i <= n)
{
p = p * i;
i++;
}
Console.WriteLine("p="+ p);
}
}
}
7.2.3.3 Оператор цикла с постусловием do
Напомним схему алгоритма организации цикла с постусловием, представленную на рисунке 7.7.
Эта разновидность циклических структур характеризуется тем, что тело цикла обязательно выполняется хотя бы один раз, что может быть использовано, например, в том случае, если в цикле вводятся данные и выполняется их проверка.
Рисунок 7.7 – Схема алгоритма цикла с постусловием
Для организации цикла такой структуры в С# используется специальный оператор цикла do. Цикл с постусловием имеет следующий формат:
do
последовательность операторов
while выражение;
При входе в цикл выполняется последовательность операторов, образующих тело цикла, а затем вычисляется выражение, которое должно иметь тип bool. Если выражение имеет значение true, тело цикла выполняется еще раз, и проверка повторяется. Цикл завершается, когда выражение примет значение false. Цикл может быть завершенным принудительно, если в его теле будет выполнен какой-либо оператор передачи управления.
Листинг 5 – С циклом с постусловием к примеру 1
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double xn, xk, hx, y;
Console.Write("Enter xn ");
xn = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter xk ");
xk = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter hx ");
hx = Convert.ToDouble(Console.ReadLine());
double x = xn;
do
{
y = Math.Sin(x);
Console.WriteLine("х=" + x + " у=" + y);
x += hx;
} while (x <= xk);
}
}
}
Рисунок 7.8 – Схема алгоритма с циклом с постусловием к примеру 1
Листинг 6 – С циклом с постусловием к примеру 2
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int p = 1, n, i = 1;
Console.Write("Enter n ");
n = Convert.ToInt32(Console.ReadLine());
do
{
p = p * i;
i++;
} while (i <= n);
Console.WriteLine("p=" + p);
}
}
}
Рисунок 7.9 – Схема алгоритма с циклом с постусловием к примеру 2
7.2.3.4 Оператор цикла с перебором foreach
Цикл перебора foreach используется для просмотра всех объектов из некоторой группы данных – коллекции. В языке С# определен ряд типов коллекций, например, таковыми являются: массивы, списки или другие контейнеры. С этим оператором познакомимся несколько позже.