Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера:
тип[,] имя_массива = {
{val, val, val, …, val},
{ val, val, val, …, val},
{val, val, val, …, val}
};
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд.
Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д.
Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.
Ниже в качестве примера приведена общая форма инициализации двумерного массива (4 строки, 2 столбца):
int[,] myArr = {
{1,10},
{2,20},
{3,30},
{4,40}
};
Перейдем к рассмотрению примеров решения задач, где применяются массивы и циклы.
Задача «Три цикла»
Требуется найти сумму и произведение N элементов массива, используя три варианта циклов (for, while, do-while).
Решение. В классе Program объявим статический массив действительных чисел a[1000] и 7 методов (кроме Main()), ввод исходных данных и вычисление сумм и произведений с использованием трех типов циклов.
Тогда наша программа может быть написана так:
using System;
namespace циклы
{
class Program
{
static double [] a= new double[1000];
static void Main(string[] args)
{
int n = InputA();
Console.WriteLine("сумма_F = {0}",sumF(n));
Console.WriteLine("сумма_W = {0}",sumW(n));
Console.WriteLine("сумма_D = {0}",sumD(n));
Console.WriteLine("произведение_F = {0}",multyF(n));
Console.WriteLine("произведение_W = {0}",multyW(n));
Console.WriteLine("произведение_D = {0}",multyD(n));
Console.ReadKey();
}
// Ввод размерности и массива
static int InputA()
{
int n;
Console.Write("Ввести кол-во элементов:");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < n; i++)
{
Console.Write("a[{0}]=", i);
a[i] = Convert.ToDouble(Console.ReadLine());
}
return n;
}
// Сумма через цикл For
static double sumF(int n)
{
double s = 0;
for (int k = 0; k < n; k++)
s = s + a[k];
return s;
}
// Сумма через цикл While
static double sumW(int n)
{
double s=0;
int k=0;
while (k < n)
{
s = s + a[k];
k++;
}
return s;
}
// Сумма через цикл Do-while
static double sumD(int n)
{
double s = 0;
int k = 0;
do
{
s = s + a[k];
k++;
} while (k <= n);
return s;
}
// Произведение через цикл For
static double multyF(int n)
{
double p = 1;
for (int k = 0; k < n; k++)
p = p * a[k];
return p;
}
// Произведение через цикл While
static double multyW(int n)
{
double p = 1;
int k = 0;
while (k < n)
{
p = p * a[k];
k++;
}
return p;
}
// Произведение через цикл For
static double multyD(int n)
{
double p = 1;
int k = 0;
do
{
p = p * a[k];
k++;
} while (k < n);
return p;
}
}
}
Результат:
Задание. Сравните алгоритмы вычисления суммы и произведения и циклы между собой, найдите общее и различия.
Оператор foreach
Последний пример иллюстрирует применение оператора foreach к массивам. Если есть необходимость выполнить некоторые действия со всеми элементами массивов, то этот оператор цикла будет самым кратким.
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Объявляем два массива
int[] myArr = new int[5];
int[,] myTwoArr = new int[5, 6];
Random ran = new Random();
// Инициализируем массивы
for (int i = 1; i <= 5; i++)
{
myArr[i - 1] = ran.Next(1, 20);
for (int j = 1; j <= 6; j++)
myTwoArr[i - 1, j - 1] = ran.Next(10, 30);
}
// Вычисляем квадрат каждого элемента одномерного массива
foreach (int f in myArr)
Console.WriteLine("{0} в квадрате равно {1}", f, f*f);
Console.WriteLine();
// Вычислим сумму элементов многомерного массива
int sum = 0;
foreach (int f2 in myTwoArr)
sum += f2;
Console.WriteLine("Сумма 2d массива: {0}", sum);
Console.ReadLine();
}
}
}
Результат:
Перейдем к рассмотрению объектов, относящихся к классу String (строка).