4.1. Основные сведения

Массивы - структурированный тип данных с элементами одного типа, имеющий одно имя и определенное количество элементов. Количество элементов определяет размер массива. Например, массив составляют номера зачетных книжек студентов, здесь число элементов равно числу студентов; массив образуют набор чисел, их количество равно числу элементов массива. Порядковый номер элемента массива называется его индексом. Массив может иметь не один, а большее число индексов. Число индексов называется размерностью массива, например, массив с двумя индексами называется двумерным массивом. Строка символов является массивом символов, вектор – массив вещественных чисел, матрица – массив векторов. Обработка массивов выполняется следующим образом: описание, ввод или инициализация элементов массива, преобразование и вывод.

При описании массивов после имени в квадратных скобках указывается число его элементов. В языке Си индекс элемента массива начинается с нуля, поэтому индекс последнего элемента массива на 1 меньше числа элементов в данном массиве.

 

4.2. Одномерные массивы

Пример обработки одномерного массива

Дан массив из 50 целых чисел. Найти наибольший элемент в массиве и его порядковый номер.

#include <stdio.h>

#include <conio.h>

#define n 50 // определение константы n=50

int i, max, nom, a[n]; //описание массива целых чисел из n элементов

main()

{for (i=0; i<n; i++)

  {printf( "\n Введите элемент массива ");

  scanf ("%d", &a[i])};

  for (i=1,max=a[0],nom=0; i<n; i++)

    if (max<a[i])

          {nom=i; max=a[i];}

 printf("\n Вывод элементов исходного массива : \n");

 for (i=0; i<n; i++) printf ( "%6d", a[i] );

 printf ("\n Максимальное число в массиве %4d, его индекс %4d " , max, nom);

 getch();

}

По окончании цикла переменная max будет иметь значение, равное максимальному элементу массива, а переменная nom – порядковый номер этого элемента. Вывод элементов массива выполняется в строку. Для вывода их в столбец надо написать: printf ( "%d \n", a[i] );

 

4.3. Многомерные массивы

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

int matr [6] [8];

задает описание матрицы из 6 строк и 8 столбцов. Нумерация строк и столбцов начинается с 0. По каждому из индексов устанавливается размер массива. Такой массив имеет 6*8=48 элементов, первый индекс изменяется от 0 по 5 (включая), второй индекс - от 0 по 7. В памяти такой массив располагается в последовательных ячейках построчно, при переходе к следующему элементу быстрее всего изменяется последний индекс. При обработке многомерных массивов используются вложенные циклы, т.е. цикл по столбцам располагается внутри цикла по строкам.

Элементы массива после объявления вводятся оператором scanf в цикле или инициализируются. При инициализации двумерного массива он представляется как массив из массивов, при этом каждый массив заключается в свои фигурные скобки, либо задается общий список в том порядке, в котором элементы располагаются в памяти:

int mas [] [2]= { {1,2}, {0,2}, {1,0}};

int mas [3] [2]={ 1,2,0,2,1,0};

 

Пример обработки многомерного массива

Дана матрица A(3,4). Найти сумму элементов в каждой строке.

#include <stdio.h>

#include <conio.h>

main ( )

{ int a[3][4], sum [3], i, j; // описание матрицы и вектора

for ( i=0 ; i<3; i++) // ввод матрицы

for ( j=0; j<4; j++)

  {printf ("\n Введите элемент a [%d][%d]=", i ,j);

  scanf ("%d",&a[i][j]);

  }

for ( i=0; i<3; i++)

  {sum [i]=0;

  for ( j=0; j<4; j++)

      sum [i] = sum [i]+ a[i][j];

  }

printf ("\n Вывод матрицы:\n");

for (i=0; i<3; i++) //форматный вывод матрицы по строкам

 { for (j=0; j<4; j++)

      printf ("%4d",a [i][j] );

    printf ("\n"); // переход на новую строку

 }

printf ("\n Вывод массива сумм:\n");

for (j=0; j<3; j++)

   printf ("%5d",sum [j] ); // вывод массива sum

getch();

return 0;

}

В программе элементы матрицы вводятся по строкам по одному с подтверждением клавишей Enter. А выводятся в общепринятом виде: каждая строка матрицы с новой строки экрана (цикл i по строкам внешний, а цикл j – внутренний). Если поменять местами циклы, то будет вывод матрицы по столбцам.


4.4. Контрольные вопросы

1. Что такое массив? индекс элемента массива?

2. Как ввести и вывести элементы вектора в строку и в столбец?

3. Способы описания и инициализации одномерных массивов.

4. Способы описания и инициализации двумерных массивов.

5. Ввод и вывод матрицы по строкам.