Массивы - структурированный тип данных с элементами одного типа, имеющий одно имя и определенное количество элементов. Количество элементов определяет размер массива. Например, массив составляют номера зачетных книжек студентов, здесь число элементов равно числу студентов; массив образуют набор чисел, их количество равно числу элементов массива. Порядковый номер элемента массива называется его индексом. Массив может иметь не один, а большее число индексов. Число индексов называется размерностью массива, например, массив с двумя индексами называется двумерным массивом. Строка символов является массивом символов, вектор – массив вещественных чисел, матрица – массив векторов. Обработка массивов выполняется следующим образом: описание, ввод или инициализация элементов массива, преобразование и вывод.
При описании массивов после имени в квадратных скобках указывается число его элементов. В языке Си индекс элемента массива начинается с нуля, поэтому индекс последнего элемента массива на 1 меньше числа элементов в данном массиве.
Пример обработки одномерного массива
Дан массив из 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] );
Массив, имеющий больше одного индекса, называется многомерным. Если индексов два, то это двумерный массив или матрица. Многомерные массивы задаются указанием каждого измерения в квадратных скобках. Например, оператор
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 – внутренний). Если поменять местами циклы, то будет вывод матрицы по
столбцам.
1. Что такое массив? индекс элемента массива?
2. Как ввести и вывести элементы вектора в строку и в столбец?
3. Способы описания и инициализации одномерных массивов.
4. Способы описания и инициализации двумерных массивов.
5. Ввод и вывод матрицы по строкам.