Понятие массива в языке программирования Си. Назначение, объявление , виды. Примеры использования массивов
Массив – структурированный тип данных, состоящий из фиксированного числа элементов одного типа. Описание массива имеет формат:
<тип> <имя>[<число элементов>];
Пример – массив ms из 100 элементов типа int, его описание следующее:
int ms[100];
Если наряду с массивом в программе присутствуют простые переменные того же типа, они могут быть помещены в том же описании:
int a, b=54, ms[100], c;
Здесь кроме массива ms типа int описаны простые переменные a, b, c типа int, причем переменная b инициализирована значением 54. Порядок следования простых переменных и массивов в описании не имеет значения.
(Дополнительно)
Для обращения к определенному элементу массива употребляется его индекс, помещенный в квадратные скобки. Индекс – номер элемента в массиве, причем индекс начального элемента массива по принятому в языке Си соглашению равен 0, индекс последнего элемента равен числу элементов минус единица, например, индекс последнего элемента массива ms равен 99.
Объем оперативной памяти, занимаемой массивом, определяется произведением числа элементов массива на размер базового типа. Для массива ms размер базового типа int равен 2, массив занимает 200 байтов.
Приведем программу ввода элементов массива и поиска максимального элемента.
//poiskmax.c поиск максимального элемента в массиве.
#include<stdio.h>
#define n 10
int i,max,k,a[n];//размер массива n
main() {
for(i=0;i<n;i++) scanf("%d",&a[i]);
max=a[0];k=0;
for(i=0;i<n;i++)
{
if(max<a[i])
{
k=i;max=a[i];
}
}
printf("Максимальное число в массиве %d, его индекс %d\n",max,k);
return 0;
}
Отметим прежде всего директиву препроцессора #define n 10, которая заменяет отдельно стоящий в программе символ n (макрос) на число 10. В данной программе везде использован размер массива в общем виде (символ n, заменяемый на 10), размер массива равен 10. Если в другом случае потребуется работать с массивом не из 10, а из 100 элементов, в программе потребуется заменить всего одну строку #define n 10 на #define n 100. Макрос может состоять и из большего числа символов, например, допустим макрос nom.
В первом цикле типа for поэлементно вводится массив из n элементов. Далее переменным max и k присваиваются значения нулевого элемента массива и 0. Во втором цикле типа for элементы массива сравниваются с текущим значением max и в случае a[i] > max производится замена max на a[i] и k на i. Таким образом, в переменной max находится текущее значение максимального элемента, а в переменной k – его индекс. После цикла эти переменные, содержащие максимальный элемент из всего массива и его индекс соответственно, выводятся на экран.
Ввод значений элементов массива и поиск максимума можно совместить, объединив два цикла в один. Однако в этом случае нулевой элемент пришлось бы вводить отдельно для установления начального значения переменной max, как это сделано в примере программы с циклом типа while
Массив может иметь не один, а два или более индексов. В этом случае говорят о двумерном (многомерном) массиве. Каждый индекс заключается в свои квадратные скобки. Приведем пример умножения матриц (двумерных массивов) по правилу матричного умножения:
,
где матрица a имеет размер n x l, матрица b имеет размер l x m, а матрица c – размер n x m.
// matrix.c умножение матриц
#include <stdio.h>
#define n 3
#define m 4
#define l 3
main(){
float a[n][l], b[l][m], c[n][m], s;
int i,j,k;
//ввод матрицы a
for(i=0; i<n; i++)
for(j=0; j<l; j++){
printf(“Введите a[%d][%d] “, i, j);
scanf(“%f”, a[i][j]);
}
//ввод матрицы b
for(i=0; i<l; i++)
for(j=0; j<m; j++){
printf(“Введите b[%d][%d] “, i, j);
scanf(“%f”, b[i][j]);
}
//вычисление и печать матрицы c
for(i=0; i<n; i++){
for(j=0; j<m; j++){
for(k=0,s=0; k<l; k++){
s+=a [i] [k] * b [k] [j]; c [i] [j] = s;
printf(“%10.4f”,c[i][j]);
}
}
printf(“\n”);
}
return 0; }
В языке Си нет специального строкового типа. Строка описывается как массив символов, например, char st1[20], st2[30], st3[]=”Нажмите клавишу”. Здесь в строке st1 20 символов, в строке st2 30 символов, строка st3 инициализирована строковым значением “Нажмите клавишу”.
В массивах все элементы имеют одинаковый тип. Специально для работы с базами данных, где элементы могут иметь разные типы, в языке Си существует структурированный тип данных – структура.