Язык си массивы
Одномерные массивы
Пожалуйста, приостановите работу AdBlock на этом сайте.
Массив – это простейший составной тип данных. Когда мы обсуждали переменные, у нас была хорошая аналогия с коробкой. Вернёмся к ней. Если переменная – это один ящик, то массив – это несколько пронумерованных одинаковых ящиков, которые имеют одно и то же имя, а различаются между собой только порядковым номером.
Рис.1 Переменные и массивы. Аналогия с коробками.
На картинке выше изображено три массива:
- целочисленный массив из 8 элементов с именем arr_int
- вещественный массив из 11 элементов с именем arr_float
- символьный массив из 6 элементов с именем arr_char
У массива, как и у переменной, имеются свои имя и тип данных. Кроме того, у массива ещё есть одна дополнительная характеристика – размер массива. Размер массива – количество элементов, которые могут в нём храниться. В нашей аналогии с коробочками это количество коробок.
Нумерация элементов массива начинается с нуля, а не с единицы.
Объявление и инициализация массива
Объявление массива очень похоже на объявление переменной. Отличие лишь в том, что следует дополнительно указать размер массива в квадратных скобках. Вот несколько примеров:
На имя массива накладываются ограничения, аналогичные тем, которые накладываются на имя переменной.
Правило именования массивов
Имя массива – любая последовательность символов, цифр и знака нижнего подчеркивания «_», которая начинается с буквы. Регистр букв важен.
Вот ещё несколько примеров объявления массивов:
Массиву, как и любой переменной, можно присвоить начальные значения при объявлении. Если элементам массива не присвоить никакого значения, то в них будет храниться мусор, как и в обычных переменных.
Если нужно присвоить нулевые значения всем элементам массива, то можно сделать вот так:
Работа с отдельными элементами массива
Чтобы обратиться к отдельному элементу массива, необходимо написать его имя и порядковый номер в квадратных скобках. Не забывайте, что нумерация начинается с нуля, а не с единицы.
Давайте, например, выведем элементы массива из пяти элементов на экран.
Конечно, если массив будет очень большой, то выводить его поэлементно подобным образом то ещё удовольствие. Да и с маленькими массивами так никто не делает. Лучше и правильнее использовать циклы. Например:
Программа в первом цикле сохраняет в массив первую сотню чётных чисел, а во втором цикле выводит их на экран.
Вооружившись новыми инструментами, давайте перепишем нашу программу из начала урока так, чтобы она использовала массив для хранения статистики выпадения случайных чисел.
Обратите внимание на приём, который используется в этой программе.
В нулевом элементе массива хранится количество выпадений числа 0 , в первом элементе – количество выпадений числа 1 , во втором элементе – числа 2 . То есть само сгенерированное число позволяет определить, к какому элементу массива необходимо добавить единичку. Поэтому необходимость в операторе выбора switch отпадает. Удобно, не так ли?
Практика
Решите предложенные задачи:
Для удобства работы сразу переходите в полноэкранный режим
Массивы
Массивы
П усть нам необходимо работать с большим количеством однотипных данных. Например, у нас есть тысяча измерений координаты маятника с каким-то шагом по времени. Создавать 1000 переменных для хранения всех значений очень. обременительно. Вместо этого множество однотипных данных можно объединить под одним именем и обращаться к каждому конкретному элементу по его порядковому номеру.
Массив в си определяется следующим образом
[ ];
Например,
int a[100];
Мы получим массив с именем a, который содержит сто элементов типа int. Как и в случае с переменными, массив содержит мусор.
Для получения доступа до первого элемента, в квадратных скобках пишем его номер (индекс). Например
Первый элемент имеет порядковый номер 0. Важно понимать, почему. В дальнейшем будем представлять память компьютера в виде ленты. Имя массива — это указатель на адрес памяти, где располагаются элементы массива.
Рис. 1 Массив хранит адрес первого элемента. Индекс i элемента — это сдвиг на i*sizeof(тип) байт от начала
Индекс массива указывает, на сколько байт необходимо сместиться относительно начала массива, чтобы получить доступ до нужно элемента. Например, если массив A имеет тип int, то A[10] означает, что мы сместились на 10*sizeof(int) байт относительно начала. Первый элемент находится в самом начале и у него смещение 0*sizeof(int) .
В си массив не хранит своего размера и не проверяет индекс массива на корректность. Это значит, что можно выйти за пределы массива и обратиться к памяти, находящейся дальше последнего элемента массива (или ближе).
Начальная инициализация массива.
Н апишем простую программу. Создадим массив, после чего найдём его максимальный элемент.
Разберём пример. Сначала мы создаём массив и инициализируем его при создании. После этого присваиваем максимальному найденному элементу значение первого элемента массива.
После чего проходим по массиву. Так как мы уже просмотрели первый элемент (у него индекс 1), то нет смысла снова его просматривать.
Тот же пример, только теперь пользователь вводит значения
В том случае, если при инициализации указано меньше значений, чем размер массива, остальные элементы заполняются нулями.
Если необходимо заполнить весь массив нулями, тогда пишем
Можно не задавать размер массива явно, например
массив будет иметь размер 3
Размер массива
М ассив в си должен иметь константный размер. Это значит, что невозможно, например, запросить у пользователя размер, а потом задать этот размер массиву.
Создание динамических массивов будет рассмотрено дальше, при работе с указателями и памятью
В некоторых случаях можно узнать размер массива с помощью функции sizeof.
Но это вряд ли будет полезным. При передаче массива в качестве аргумента функции будет передаваться указатель, поэтому размер массива будет невозможно узнать.
Статические массивы удобны, когда заранее известно число элементов. Они предоставляют быстрый, но небезопасный доступ до элементов.
Переполнение массива
П ускай у вас есть такой код
Здесь цикл for задан с ошибкой. В некоторых старых версиях компиляторов этот код зацикливался. Дело в том, что переменная i располагалась при компиляции сразу за массивом A. При выходе за границы массива счётчик переводился в 1.
Массивы небезопасны, так как неправильная работа с индексом может приводить к доступу к произвольному участку памяти (Теоретически. Современные компиляторы сами заботятся о том, чтобы вы не копались в чужой памяти).
Если вы работаете с массивами, то необходимо следить за тем, чтобы счётчик не превышал размер массива и не был отрицательным. Для этого, как минимум,
- 1. Используйте тип size_t для индексирования. Он обезопасит вас от отрицательных значений и его всегда хватит для массива любого размера.
- 2. Помните, что массив начинается с нуля.
- 3. Последний элемент массива имеет индекс (размер массива — 1)
Никаких полноценных способов проверки, вышли мы за пределы массива или нет, не существует. Поэтому либо мы точно знаем его размер, либо храним в переменной и считываем при надобности.
Примеры
Т еперь несколько типичных примеров работы с массивами
1. Переворачиваем массив.
Здесь незнакомая для вас конструкция
макрос. Во всём коде препроцессор автоматически заменит все вхождения SIZE на 10u.
2. Удаление элемента, выбранного пользователем.
Удаление элемента в данном случае, конечно, не происходит. Массив остаётся того же размера, что и раньше. Мы просто затираем удаляемый элемент следующим за ним и выводим SIZE-1 элементов.
3. Пользователь вводит значения в массив. После этого вывести все разные значения, которые он ввёл.
Пусть пользователь вводит конечное число элементов, допустим 10. Тогда заранее известно, что всего различных значений будет не более 10. Каждый раз, когда пользователь вводит число будем проходить по массиву и проверять, было ли такое число введено.
4. Пользователь вводит число — количество измерений (от 2 до 10). После этого вводит все измерения. Программа выдаёт среднее значение, дисперсию, погрешность.
5. Сортировка массива пузырьком
6. Перемешаем массив. Воспользуемся для этого алгоритмом Fisher-Yates:
Для i от N-1 до 1 выбираем случайное число j в пределах от 0 до i и меняем местами i-й и j-й элементы.
лабы по информатике, егэ
лабораторные работы и задачи по программированию и информатике, егэ по информатике
Урок 3. Часть1: Язык Си массивы
Определение массива в Си
Массив представляет собой множество значений, которыми можно оперировать как группой, так и с отдельно каждым значением. Каждый элемент в массиве является как бы отдельной переменной, с которой можно обращаться, как с обычной переменной.
У каждого элемента в массиве есть свое положение — индекс элемента, т.е. его порядковый номер. Индекс элемента массива не имеет никакого отношения к присвоенному ему значению.
Для определения массива следует указать тип значений, которые он содержит, и максимальное количество элементов, которое может быть в него записано.
int имя_массива [макс_кол-во_элементов];
Пример:
Нумерация элементов массива начинается с .
Если определен массив, имеющий 10 элементов, значит максимальным возможным индексом является число 9.
После определения массива можно сразу присваивать начальные значения:
Работа с массивами в Си
Заполнение случайными числами в диапазоне [a;b]
A[i] = a + rand()% (b — a + 1);
Создание пользовательской функции для заполнения случайными числами:
Описание функции до main<>
int irand ( int a, int b )
Заполнение массива (псевдо)случайными целыми числами в диапазоне от 20 до 100:
3 комментария
immmax
В первую очередь хочу выразить благодарность людям, которые сделали этот сайт, и оценить их огромную работу. Всё излагается достаточно просто и доступно. Особенно для тех, кто уже знаком с программированием.
Но есть, конечно, и недочёты. Например, я думаю, лучше сразу приучать начинающих программистов к грамотному, читабельному оформлению кода, потому что иногда в примерах хрен разберёшь что к чему относится. А переучиваться, как известно, сложнее, чем учиться с нуля.
Сами фрагменты кода написаны не везде корректно. Не всё работает (может и я что-то не так сделал, хотя как только ни пытался со всей мощностью гугла).
В некоторых примерах для решения нужны дополнительные знания (например, функция sizeof() в использовании для вычисления размера массива была бы очень удобна).
Пример: Дан массив размера N. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива.
* Из задачника М. Э. Абрамян (Array103)
В этом примере, считаю, есть лишние операции в той версии решения, которая предложена на сайте. Например в строке 4 задаётся размер массива — 11. А что если пользователь захочет ввести не 11, а, скажем, 25?
Это просто бессмысленная операция, так как двумя строками ниже программа всё равно попросит пользователя ввести размер массива.
И для тестовых примеров удобнее использовать показанную в предыдущих уроках функцию для рандомного задания значений.
Ниже моя версия реализации программы.
int iRand(int a, int b)
<
return a + rand() % (b — a + 1);
>
int main(int argc, char **argv)
<
// Задание размера массива
int n;
printf(«Enter array’s size: «);
scanf(«%d», &n);
// Формирование массива
int a = -100, b = 100;
int mass[n];
for (int i = 0; i = 0)
mass[iMin — 1] = 0;
if (iMax
Ruby on Rails c нуля!
Программирование на языке Си: Использование массивов данных в Си. Указатели.
октября 31, 2011 | Published in Си и C++ | 9 Comments
Объявление массива в Си
Массив (Array) относится к вторичным типам данных. Массив в Си представляет собой коллекция явно определенного размера элементов определенного типа. то есть в отличие от массивов в Ruby массивы в Си являются однотипными (хранят данные только одного типа) и имеют заранее определенную длину (размер).
В Си массивы можно грубо разделить на 2 типа: массив чисел и массив символов. Разумеется, такое деление абсолютно условное ведь символы — это также целые числа. Массивы символов также имеют несколько иной синтаксис. Ниже приведены примеры объявления массивов:
В первом случае мы объявляем массив целых чисел (4 байта на число) размером в 100 элементов. Точнее мы резервируем память для хранения 100 элементов типа int.
Во втором случае мы определяем массив из 10 целочисленных элементов и сразу же присваиваем элементам массива значения.
В третьем случае мы определяем массив символов. В Си нету строк, но есть массивы символов, которые заменяют строки.
В последнем случае мы также объявляем массив символов с помощью специального — более лаконичного синтаксиса. Массивы ch и ch2 практически идентичны, но есть одно отличие. Когда для создания массива мы используем синтаксис со строковой константой, то в конец массива символов автоматически добавляется символ , при использовании стандартного синтаксиса обявления массива мы должны самостоятельно добавлять в качестве последнего элемента массива символов. Символ (null) используется для идентификации конца строки. О страках мы поговорим более подробно в отдельной статье.
Обращение к элементам массива в Си
В Си обращение к элементам массива достаточно тривиально и похоже на то как это делается в большинстве других языков программирования. После имени переменной ссылающейся на массив мы в квадратных скобках указываем индекс (еще его называют ключом) элемента. В примере ниже показано как мы обращаемся к первому элементу массива:
Код printf(«%dn», a[1]); напечатает 2, а не 1 потому, что индексация массивов начинается с 0 и лишнее подтверждение тому строка printf(«%cn», ch[0]); , которая напечатает символ «R» — нулевой элемент массива ch.
В общем случае объявление массива имеет следующий синтаксис:
Количество элементов массива и список элементов являются обязательными атрибутами объявления массива, точнее обязательным является любое одно из них, но не оба сразу.
Для того, чтобы вникнуть в устройство массивов необходимо познакомиться с такой концепцией как указатели в Си.
Указатели в Си
Типы данных необходимы для того, чтобы мочь выделить кусок памяти определенного размера для хранения данных и определения того, что это за данные ибо без явного определения непонятно является ли набор нулей и единиц числом, символом или чем-нибудь еще. В этом случае переменная является ссылкой на фрагмент памяти определенного размера и типа, например, int переменная ссылается на определенную область памяти объемом 4 байта, в которой хранится целое число, а char переменная ссылается на область памяти объемом 1 байт в которой хранится символ (код символа).
Чтобы получить адрес на который ссылается переменная мы используем специальный оператор & — оператор адреса (address operator), пример:
Строка printf(«%pn», &arr); напечатает 0xbfbbe068. 0xbfbbe068 — шестнадцатеричное представление адреса памяти где хранится число 100500.
Указатели — это переменные специального типа, которые хранят не обыкновенные значения, но их адреса в памяти.
$ ./program
A: 0xbfe32008
B: 0xbfe3200c
В примере выше мы присваиваем переменным a и b одинаковое значение — число 10, но переменные a и b ссылаются на две разные области памяти, то есть мы сохраняем в памяти число 10 два раза. Если мы изменим значение переменной b, то оно это не отразится на переменной a и наоборот. Это отличается от того, как мы работаем с переменными в Ruby, где переменные — это ссылки на объекты хранимые в памяти, и при присваивании в стиле a = b = 10 мы получаем один объект — число 10 и две ссылки на него.
Если нам необходима будет еще одна ссылка на ту же область памяти, на которую ссылается переменная a, то мы можем воспользоваться указателем. Пример:
$ ./program
A:
address: 0xbfed0fa8
value: 10
B:
address: 0xbfed0fa8
value: 10
Указатели и массивы
На самом деле в Си нет массивов в привычном для многих людей понимании. Любой массив в Си — это просто ссылка на нулевой элемент массива. Пример:
$ ./program
a-Address:0xbfc029b4
a[0]-Address:0xbfc029b4
a[0]-Value:10
a-Size:12
Как видите я вас не обманул, переменная ссылающаяся на массив на самом деле ссылается только на его нулевой элемент, то есть является указателем на адрес хранения первого элемента.
Когда мы запускаем программу, то операционная система предоставляет программе два особых объема памяти — стек (stack) и кучу (heap). В нашей программе используется только стек. Стек хранит значения упорядочено. Когда мы создаем массив, мы на самом деле создаем указатель ну нулевой элемент коллекции элементов и резервируем память для N-количества элементов. В примере выше мы создали коллекцию из 3 элементов типа int, т.е. каждый элемент занимает 4 байта памяти. Когда мы воспользовались функцией sizeof(), которая возвращает размер в байтах переданного ей аргумента, то получили значение 12 т.е. массив занимает 12 байт памяти: 3элемента * 4 байта. Поскольку для хранения элементов коллекции используется стек — элементы сохраняются по порядку, то есть занимают соседние области стека, а это означает, что мы можем перемещаться по коллекции зная позицию элемента и размер коллекции. Пример:
$ ./program
a[0] has 10 in 0xbfbeda88
a[1] has 20 in 0xbfbeda8c
a[2] has 30 in 0xbfbeda90
a[3] has 40 in 0xbfbeda94
a[4] has 10 in 0xbfbeda98
a[5] has 5 in 0xbfbeda9c
Программа напечатала нам информацию о массиве из 5 элементов: номер элемента, значение и адрес в памяти. Обратите внимание на адреса элементов — это то, о чем я вам говорил. Адреса идут подряд и каждый следующий больше предыдущего на 4. В 5 элементе коллекции, которого мы на самом деле не объявляли хранится общее количество элементов коллекции. Самое интересное — это то, что мы можем аналогичным образом использовать и указатели для прохода по массиву. Пример:
Примечания
1. Обратите внимание на то, что указателю b мы присваиваем не адрес массива a, а само значение переменной a, ведь a это, по сути и есть указатель.
2. Использование квадратных скобой с указанием индексов элементов массива — это такой синтаксический сахар в Си для более удобного и понятного обращения к элементам коллекции.
3. Как я уже говорил, в Си нету традиционных массивов потому, я называю их коллекциями для того, чтобы подчеркнуть эту особенность Си.
4. Адрес 1 элемента массива больше адреса 0 элемента массива на объем памяти выделяемой под хранение элемента данного типа. Мы работаем с элементами типа int, для хранения каждого из которых используется 4 байта. Адрес элемента массива в памяти и вообще любых данных — это адрес первого байта выделяемой под его хранение памяти.
5. Для упрощения понимания представьте, что память компьютера — это огромный кинотеатр, где места пронумерованы от 0 до, скачем 1_073_741_824. У данных типа char задница нормального размера и они помещаются в одном кресле (занимают один байт), а у толстых посетителей типа long double задницы огромные и каждый из них вмещается только на 10 сидениях. Когда у толстых посетителей кинотеатра спрашивают номер их места, они говорят только номер первого кресла, а количество и номера всех остальных кресел можно легко вычислить исходя из комплекции посетителя (типа данных). Массивы можно представить в виде групп однотипных посетителей кинотеатра, например группа худеньких балерин типа char из 10 человек займет 10 мест потому, что char вмещается в одном кресле, а группа любителей пива состоящая из 5 человек типа long int займет 40 байт.
6. У операторов & и * имеется несколько популярных названий, но вы можете называть их хоть Васей и Петей. Главное, что стоит запомнить — это:
& — показывает номер первого занятого посетителем кинотеатра сидения. То есть адрес первого занимаемого байта.
* — позволяет обратиться к посетителю сищящему на определенном месте. То есть позволяет получить значение, что хранится по определенному адресу в памяти.
На этом статья окончена, но не окончена тема массивов и указателей, а тем более изучения всего языка Си.
Лучшая благодарность автору — ваши комментарии!
Массивы
Ярким примером ссылочного типа данных являются массивы (как объекты!).
Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем.
В C# массивы могут быть как одномерными, так и многомерными.
Массивы служат самым разным целям, поскольку они предоставляют удобные средства для объединения связанных вместе переменных.
Массивами в C# можно пользоваться практически так же, как и в других языках программирования.
Тем не менее, у них имеется одна особенность: они реализованы в виде объектов. Смотрите также заметку «Массивы. Класс System.Array».
Объединение данных возможно и в коллекции, об этом — в статье Класс ArrayList. Пример необобщенной коллекции
Объявление массивов
Для того чтобы воспользоваться массивом в программе, требуется двухэтапная процедура. Во-первых, необходимо объявить переменную, которая может обращаться к массиву. И во-вторых, нужно создать экземпляр массива (объект), используя оператор new.
Важно! Если массив только объявляется, но явно не инициализируется, каждый его элемент будет установлен в значение, принятое по умолчанию для соответствующего типа данных (например, элементы массива типа bool будут устанавливаться в false, а элементы массива типа int — в 0). В примере, если мы удалим строки с инициализацией, будет напечатано пять нулей.
Примечание. Такие же действия с полями объекта-структуры выполняет конструктор по умолчанию (без параметров).
Доступ к элементам массива
Для обращения к элементам массива используются индексы . Индекс представляет номер элемента в массиве, при этом нумерация начинается с нуля, поэтому индекс первого элемента будет равен 0. А чтобы обратиться к пятому элементу в массиве, нам надо использовать индекс 4, к примеру: myArr[4] .
Инициализация массива
Помимо заполнения массива элемент за элементом (как показано в предыдущем примере), можно также заполнять его с использованием специального синтаксиса инициализации массивов.
Для этого необходимо перечислить включаемые в массив элементы в фигурных скобках < >. Такой синтаксис удобен при создании массива известного размера, когда нужно быстро задать его начальные значения:
1) инициализация массива с использованием ключевого слова new:
int[] m1 = new int[] <10,20,30,40,50>;
2) инициализации строкового массива без использования слова new:
string[] m2 = < «Фамилия», «Имя», «Отчество» >;
3) используем ключевое слово new и желаемый размер массива символов:
char[] m3 = new char[4] < ‘Я’,’з’,’ы’,’к’ >;
Обратите внимание, что в случае применения синтаксиса с фигурными скобками размер массива указывать не требуется (как видно на примере создания переменной m1), поскольку этот размер автоматически вычисляется на основе количества элементов внутри фигурных скобок.
Кроме того, применять ключевое слово new не обязательно (как при создании массива m2).
Неявно типизированные массивы
Ключевое слово var позволяет определить переменную так, чтобы лежащий в ее основе тип выводился компилятором. Аналогичным образом можно также определять неявно типизированные локальные массивы. С использованием такого подхода можно определить новую переменную массива без указания типа элементов, содержащихся в массиве.
Результат:
Разумеется, как и при создании массива с использованием явного синтаксиса C#, элементы, указываемые в списке инициализации массива, должны обязательно иметь один и тот же базовый тип (т.е. должны все быть int, string или char). Обратите внимание на метод GetType(), позволяющий программным путем определять тип элементов массива.
Определение массива объектов
В большинстве случаев при определении массива тип элемента, содержащегося в массиве, указывается явно.
Хотя на первый взгляд это выглядит довольно понятно, существует одна важная особенность. В основе каждого типа в системе типов .NET (в том числе фундаментальных типов данных) в конечном итоге лежит базовый класс System.Object.
В результате получается, что в случае определения массива объектов находящиеся внутри него элементы могут представлять собой что угодно.
Если обратимся к определению массива, данному выше: «Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем», то это выглядит несколько противоречиво. Но тем не менее, все это возможно потому, что каждый элемент является объектом. Приведем пример:
Результат:
Обратите внимание на четвертый тип цикла foreach (object me in arrByObject). Легко запомнить: Для каждого (for each) объекта с именем me, входящего в (in) массив arrByObject (учите английский!). На печать выводится как сам объект (элемент массива объектов), так и тип этого объекта (метод GetType(), присущий всем объектам класса Object, от которого наследуются все типы).
Свойство Length
Реализация в C# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связано свойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину.
Когда запрашивается длина многомерного массива, то возвращается общее число элементов, из которых может состоять массив. Благодаря наличию у массивов свойства Length операции с массивами во многих алгоритмах становятся более простыми, а значит, и более надежными.
Вставим в предыдущем примере перед Console.ReadKey() оператор
Console.WriteLine(arrByObject.Length);
Будет напечатано значение, равное 4 (число объектов в массиве). Чаще всего оно используется для задания числа элементов массива в цикле for<>.
Многомерные массивы
Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов. Многомерный массив индексируется двумя и более целыми числами.
Двумерные массивы. Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает первый индекс, а на столбцы — второй. Пример объявления и инициализации двумерного массива показан ниже:
Обратите особое внимание на способ объявления двумерного массива. Схематическое представление массива myArr[,] показано ниже:
Заметим, что в программе используется еще один объект – ran, принадлежащий к классу Random, метод которого (функция Next() ) возвращает целое число в заданном диапазоне (1,15).
В C# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива:
тип[,…,] имя_массива = new тип[размер1, размер2, … размеры];
Инициализация многомерных массивов
Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера:
тип[,] имя_массива = <
< val, val, val, …, val>,
>;
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд.
Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д.
Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.
Ниже в качестве примера приведена общая форма инициализации двумерного массива (4 строки, 2 столбца):
Перейдем к рассмотрению примеров решения задач, где применяются массивы и циклы.
Задача «Три цикла»
Требуется найти сумму и произведение N элементов массива, используя три варианта циклов (for, while, do-while).
Решение. В классе Program объявим статический массив действительных чисел a[1000] и 7 методов (кроме Main()), ввод исходных данных и вычисление сумм и произведений с использованием трех типов циклов.
Тогда наша программа может быть написана так:
Результат:
Задание. Сравните алгоритмы вычисления суммы и произведения и циклы между собой, найдите общее и различия.
Оператор foreach
Последний пример иллюстрирует применение оператора foreach к массивам. Если есть необходимость выполнить некоторые действия со всеми элементами массивов, то этот оператор цикла будет самым кратким.
Результат:
Задачи, предполагающие использование массивов и циклов, подробно рассмотрены в разделе «Примеры решения задач на тему «Массивы строки»»
Перейдем к рассмотрению объектов, относящихся к классу String (строка).