
- •1.Структура программы
- •1.1. Типы данных
- •1.1.1. Целые типы
- •1.1.2. Дробные (вещественные) типы
- •1.1.3. Логический тип
- •1.1.4. Строковый тип
- •1.1.5. Арифметические операторы
- •1.1.6. Нечисловые простые типы
- •1.1.7. Текстовые типы
- •2. Операторы ввода/вывода
- •2.1. Операторы ввода
- •2.2. Операторы вывода
- •2.3. Форматированный вывод
- •3. Логические выражения
- •3.1. Операции сравнения
- •3.2.1.Поразрядные операции » и «
- •3.2.2.Булевские операции присваивания
- •4.Ветвления
- •4.1. Тернарная операция
- •4.2.1. Оператор if
- •4.2.1. Внутристроковый условный оператор
- •4.3.1. Оператор switch
- •5. Организация циклов
- •5.1.Циклы do
- •5.2. Циклы while
- •5.3. Циклы for
- •5.4. Прерывание циклов
- •5.5. Бесконечные циклы
- •6. Преобразование типов
- •6.1. Неявное преобразование
- •6.2. Явное преобразование
- •6.3. Явные преобразования с помощью команд Convert
- •7. Массивы
- •7.1. Объявление массива
- •7.2 Циклы foreach
- •7.3. Многомерные массивы
- •7.4. Массивы массивов
- •8.Строки
- •8.Структуры (доделать)
- •9.Функции и процедуры
- •10.Метод Main()
- •11.Работа с файлы
- •12.Обработка ошибок и исключений(try.. .Catch.. .Finally)
7.2 Циклы foreach
Цикл foreachпозволяет обращаться к каждому элементу в массиве с помощью
такого простого синтаксиса:
foreach ( <базовый_тип> <имя> in <массив> )
{
// можно использовать <имя> для каждого элемента
}
Этот цикл будет осуществлять проход по всем элементам и помещать каждый из
них по очереди в переменную <имя> безо всякого риска получения доступа к
недопустимым элементам. Такой подход позволяет не беспокоиться о том, сколько элементов содержится в массиве, и быть уверенным, что каждый из них будет использован в цикле. Например:
static void Main(string[] args)
{
string[] friendNames = { "Петя ", "Вася", "Витя" };
Console.WriteLine("Моих друзей {0} их зовут :", friendNames.Length);
foreach (string friendName in friendNames)
{
Console.WriteLine(friendName);
}
Console.ReadKey();
}
Главное отличие между применением цикла foreach и стандартного цикла for состоит в том, что foreach предоставляет к содержимому массива доступ только для чтения, что не позволяет изменять значения элементов.
7.3. Многомерные массивы
Многомерным называется такой массив, в котором для получения доступа к
элементам применяется несколько индексов. Например, предположим, что требуется нарисовать карту высот холма по замеренным позициям.
Позицию можно задать двумя координатами — х и у. Эти две координаты можно
представить в виде индексов, дабы в массиве с именем hillHeight могли храниться
значения высоты, соответствующие каждой паре координат. В такой ситуации может
помочь многомерный массив.
Массивы такого типа объявляются следующим образом:
<базовый_тип> [,] <имя>;
Массивы с большим количеством измерений объявляются с использованием
большего количества запятых:
<базовый_тип> [,,,] <имя>;
Эта строка показывает, как объявить четырехмерный массив. Для присваивания
значений применяется похожий синтаксис, в котором запятые служат для разделения
размеров. Объявить и инициализировать двухмерный массив hi11Heightс базовым типомdoubleи размерностью координаты х, равной 3, а координаты у — 4, можно
следующим образом:
double{ , ] hillHeight = new double[3,4];
В качестве альтернативного варианта для начального присваивания можно
использовать литеральные значения. Эти значения должны иметь вид вложенных блоков,
заключенных в фигурные скобки, и быть отделены друг от друга запятыми:
double[ , ] hillHeight = {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}};
Данный массив имеет те же самые измерения, что и предыдущий, т.е. три строки
и четыре столбца. Благодаря предоставлению литеральных значений, эти измерения
определяются неявным образом.
Для получения доступа к отдельным элементам многомерного массива
указываются отделенные запятой индексы:
hillHeight[2,1]
7.4. Массивы массивов
Многомерные массивы, о которых рассказывалось в предыдущем разделе,
считаются прямоугольными, потому что каждая "строка" имеет одинаковый размер. Например, в последнем рассмотренном случае любой из возможных координат х могла
соответствовать координата у от 0 до 3.
Однако массивы еще могут быть зубчатыми, т.е. "строки" могут иметь разные
размеры. Для этого каждый элемент в массиве должен являться тоже массивом. При
желании можно также создавать и массивы массивов, состоящие из прочих массивов, или
даже еще более сложные массивы. Однако все эти варианты возможны только при
условии наличия у массивов одного и того же базового типа.
Синтаксис для объявления массивов, состоящих из массивов, подразумевает
указание в объявлении массива нескольких пар квадратных скобок:
int[][] Res;
Инициализация подобных массив не является такой же простой процедурой, как инициализация многомерных массивов.
Существуют всего два возможных варианта. Первый — инициализировать сначала
массив, содержащий другие массивы (которые далее для ясности будут называться
просто подмассивами), а затем по очереди инициализировать подмассивы:
Res = new int[2][];
Res[0] = new int[3];
Res[1] = new int[4];
Второй вариант — использовать модифицированную версию приводившейся выше
операции литерального присваивания:
Res = new int[3][] {new int[] {1, 2, 3}, new int[] {1},
new int[] {1, 2} };
Инициализировать массив можно и в той же строке, в которой он объявляется:
int[][] Res = {new int[] {1, 2, 3}, new int[] {1}, new int[] {1, 2}};
С зубчатыми массивами можно использовать циклы f oreach, но их часто нужно
делать вложенными для того, чтобы они добирались до фактических данных. Например,
предположим, что имеется показанный ниже зубчатый массив, содержащий 10 других
массивов, каждый из которых, в свою очередь, тоже содержит массив целых чисел,
представляющих собой делители целого числа в диапазоне от 1 до 10:
int[][] Res10 = {new int[] {1},
new int[] {1, 2},
new int[] {1, 3},
new int[] {1, 2, 4},
new int[] {1, 5},
new int[] {1, 2, 3, 6},
new int[] {1, 7},
new int[] {1, 2, 4, 8},
new int[] {1, 3, 9},
new int[] {1, 2, 5, 10} };