Массивы в C#. Часть 1. Одномерные массивы. Примеры решения задач на одномерные массивы

Массивы в C#. Часть 1. Одномерные массивы. Примеры решения задач на одномерные массивы


Содержание


1. Что такое массив в языке программирования?

Массив – это объединенная в единое целое группа переменных одного типа к которым можно обращаться по единому имени. Использование массивов в программе позволяет удобно организовывать наборы данных и осуществлять упрощенный доступ к этим данным с помощью имени массива и индекса.

 

2. Какие виды массивов могут быть представлены в C#?

Язык программирования C# позволяет представлять два вида массивов:

  • одномерные массивы;
  • многомерные массивы.

В многомерных массивах различаются двумерные и многомерные прямоугольные массивы. Кроме того, язык программирования C# имеет средства для организации работы с так называемыми ступенчатыми массивами.

 

3. Какие преимущества использования массивов в программах?

Использование массивов в программах имеет такие основные преимущества:

  • удобство и простота организации однотипных наборов данных;
  • удобство обработки данных (сортировка, поиск, проведение вычислений) с помощью операторов цикла языка C#.

 

4. Каким образом в языке C# организовано представление массивов?

В языке C# массивы организованы в виде объектов. Это означает, что для массива обязательно может быть выделена память с помощью оператора new.

 

5. Какая общая форма объявления одномерного массива?

Общая форма объявления одномерного массива следующая

тип имя_массива = new тип[размер];

где

  • тип – тип элементов массива;
  • имя_массива – непосредственно имя объявляемого массива;
  • размер – количество элементов массива. Нумерация элементов массива начинается с нуля.

 

6. Примеры объявления одномерных массивов разных типов и размерностей

Пример 1. Объявление одномерного массива из 100 целых чисел (тип int).

// пример объявления массива из 100 целых чисел - способ 1
int[] A; // объявить переменную типа "массив целых чисел"
A = new int[100]; // выделить память для переменной A

Пример 2. Объявление одномерного массива из 50 вещественных чисел (тип double).

// объявление массива из 50 вещественных чисел - способ 2
float[] B = new float[50];

 

7. Каким образом осуществляется доступ к элементам одномерного массива? Пример

Доступ к элементам одномерного массива осуществляется с помощью индекса. Индекс определяет положение элемента в массиве. Первым индексом массива есть индекс, который имеет значение 0. Чтобы получить доступ к элементу массива с помощью индекса, нужно взять индекс элемента в квадратные скобки.

Пример 1. Доступ к элементам массива целых чисел (тип long).

// объявление массива целых чисел, имеющих тип long
long[] M = new long[20]; // в массиве 20 элементов

// записать в элементы массива произвольные значения
M[2] = 23990; // в элемент с индексом 2 записать число 23990
M[0] = 10000; // в элемент с индексом 0 записать число 10000

M[19] = -2039;

// Ошибка!
// M[20] = 1000; // ошибка! Индекс выходит за пределы диапазона

Пример 2. Объявление и заполнение произвольными значениями массива из 10 вещественных чисел типа float.

// объявление массива из 10 вещественных чисел
float[] B = new float[10];

// заполнение произвольными значениями
int i;
for (i = 0; i < 10; i++)
    B[i] = i + 2 * i; // B[i] - элемент в позиции i массива B

// вывод элементов массива в элемент управления типа ListBox
listBox1.Items.Clear();
for (i = 0; i < 10; i++)
    listBox1.Items.Add(B[i].ToString());

 

8. Пример обнуления одномерного массива из 100 вещественных чисел
// обнуление одномерного массива из 100 вещественных чисел
// объявить массив
double[] D = new double[100];

// обнулить массив
for (int i = 0; i < D.Length; i++) // D.Length - количество элементов в массиве
    D[i] = 0;

 

9. Пример поиска заданного элемента в одномерном массиве
// поиск заданного элемента в одномерном массиве
int[] A = new int[10];
bool f_is; // результат: если f_is=true, то элемент присутствует в массиве

// заполнение массива произвольными значениями
for (int i = 0; i < 10; i++)
    A[i] = i + i * i;

int num; // num - искомый элемент
num = 42;

// поиск
f_is = false;
for (int i = 0; i < 10; i++)
    if (num == A[i])
        f_is = true;

 

10. Пример подсчета количества вхождений заданного элемента в одномерном массиве целых чисел

В примере осуществляется подсчет количества вхождений заданного значения (сохраняется в переменной n) в массиве M. Результат записывается в переменную k.

// подсчет количества вхождений заданного элемента в одномерном массиве
int[] M;
M = new int[20];

// заполнение массива произвольными значениями
for (int i = 0; i < 20; i++)
    M[i] = i * 2 - i * i;

int n; // заданный элемент
int k; // результат - количество вхождений
n = 0;

k = 0;
for (int i = 0; i < 20; i++)
    if (n == M[i])
        k++;

// k = 2

 

11. Пример сортировки элементов одномерного массива методом вставки
// сортировка методом вставки по возрастанию
// объявление массива из 10 вещественных чисел
float[] A = new float[10];

// заполнение элементов массива произвольными значениями

// ...

// сортировка
for (int i=0; i<9; i++)
    for (int j=i; j>=0; j--)
        if (A[j] > A[j + 1])
        {
            float t = A[j];
            A[j] = A[j + 1];
            A[j + 1] = t;
        }

 

12. Какая общая форма инициализации одномерного массива?

В языке C# массив может быть инициализирован значениями при его создании (объявлении). Общая форма инициализации массива:

тип[] имя_массива = { значение1, значение2, ..., значениеN };

где

  • тип – тип элементов массива;
  • имя_массива – непосредственно имя массива;
  • значение1, значение2, значениеN – значения, которыми инициализируются элементы массива в порядке индексирования. Значение1 будет присвоено ячейке массива с индексом 0. Значение2 будет присвоено ячейке массива с индексом 1 и т.д. ЗначениеN будет присвоено ячейке массива с индексом N-1.

В случае инициализации массива отпадает необходимость использовать оператор new. Система автоматически выделит необходимый объем памяти для массива.

 

13. Пример инициализации одномерных массивов при их объявлении
// инициализация массива состоящего из 6 элементов типа uint
uint[] UI = { 5, 2, 100, 50, 35, 64 };

// инициализация массива состоящего из 5 элементов типа bool
bool[] B = { true, false, false, false, true };

// инициализация массива состоящего из 10 элементов типа float
float[] F = { 0.2f, 1.03f, -3.2f, -4.3f, 2.88f, 0.001f, 1.1f, 2.34f, 0.2f, 0f };

// инициализация массива состоящего из 5 элементов типа char
char[] C = { '0', 'A', ';', '\\', 'z' };

 

14. Пример объявления и использования одномерного массива структур

Дополнительную информацию о работе с массивами структур можно получить в теме:

Пусть задан тип структуры BOOK, описывающей информацию о книге

// структура, описывающая книгу
struct BOOK
{
    public string title; // название книги
    public string author; // название автора книги
    public int year; // год издания
    public float price; // цена
}

Тогда код, который объявляет массив структур типа BOOK будет иметь приблизительно следующий вид

// объявление и использование одномерного массива структур
BOOK[] B; // объявление переменной типа "массив структур BOOK"
B = new BOOK[5]; // выделение памяти для 5 структур типа BOOK

// заполнение значениями массива B
B[0].title = "Beginning. Microsoft. Visual C# 2008.";
B[0].author = "Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon D.Reid";
B[0].year = 2008;
B[0].price = 9.99f;

B[1].title = "Pro C# 2010 and the .Net Planform. Fifth edition";
B[1].author = "Andrew Troelsen";
B[1].year = 2010;
B[1].price = 9.99f;

 

15. Что происходит, если в программе не придерживаться границ массива?

Язык программирования C# строго придерживается допустимых границ массива, которые задаются при его объявлении. Если при доступе к элементам массива, значение индекса выходит за пределы массива, то возникает исключительная ситуация типа IndexOutOfRangeException. В этом случае программа преждевременно завершится.



 

16. Пример объявления и использования одномерного массива классов

Пусть в отдельном модуле задается описание класса MyPoint, который описывает точку на координатной плоскости

// класс, который описывает точку на координатной плоскости
class MyPoint
{
    // координаты точки
    int x;
    int y;

    // свойства
    public int X
    {
        get { return x; }
        set { x = value; }
    }

    public int Y
    {
        get { return y; }
        set { y = value; }
    }
}

Тогда, объявление и использование массива из 5 объектов типа MyPoint будет иметь приблизительно следующий вид

// объявление массива из 5 объектов типа класс "MyPoint"
// выделение памяти для массива
MyPoint[] MP = new MyPoint[5];

// выделение памяти для любого объекта - обязательно!
for (int i = 0; i < 5; i++)
    MP[i] = new MyPoint();

// использование массива объектов в программе
// заполнение массива произвольными значениями
for (int i = 0; i < 5; i++)
    {
        MP[i].X = i * 3;
        MP[i].Y = i * i - 2;
    }

 


Связанные темы