Одномерные массивы в СИ
Массив – некие упорядоченные данные одного типа. Смысл этой всей упорядоченности состоит в том что доступ к элементам происходит через индекс, т.е через порядковый номер элемента тип_массива имя_массива[размер №1][размер №2]...[размер №N];
Примеры объявления одномерного массива:
int a[2];
double b[20];
Обращение к конкретному элементу одномерного массива в языке СИ осуществляется так: указываем имя массива, а потом в квадратных скобках индекс элемента в этом массиве. в СИ отсчет ведется начиная с нуля, т.е обращение к первому элементу массива будет иметь вид: a[0], а ко второму – a[1] и тд.
На практике наиболее часто используются только:
одномерные массивы (по другому говоря векторы);
двумерные массивы (или же что тоже самое матрицы).
Объявление одномерного массива в си (далее просто массив) имеет следующий синтаксис:
тип_данных имя_массива[размер];
Размер массива - любое положительное, целое число. В стандарте С89 значение должно было указываться сразу при написании кода, т.е быть константой. В стандарте С99 было введено понятие так называемого динамического массива.
Динамический массив - массив, при создании которого в качестве размера указывается значение некоторого выражения, в которое входят переменные, объявленные и инициализированные ранее (выражение должно иметь положительный целочисленный результат).
Например:
int n;
printf("Введите размер массива: ”);
scanf("%d”,&n);
double x[n];
При объявлении статических массивов допускается производить инициализацию элементов массива. Синтаксис такого объявления:
тип_массива имя_массива[размер] = {значение №1, ... значение №N};
Примеры:
int a[5] = {1,2,3,4,5}, b[5] = {1,2};
double x[10] = {0.0};
int c[] = {1,2,3,4,5};
char d[] = {’a’,’b’,’c’};
int e[5] = {1,2,,4,5}; //Неправильно - ошибка
Объявление константных одномерных массивов (значения их элементов изменить нельзя) начинается с ключевого слова const, за которым следует объявление массива с инициализацией.
Примеры:
const int array[] = {1,2,3,4,5};
const double vector[5] = {1.0,2.0,3.0};
Каждый отдельный элемент массива может рассматриваться как простая переменная и, соответственно, выступать в выражениях в качестве RValue или LValue значений.
Ввод и вывод одномерных массивов в языке СИ осуществляется поэлементно в цикле. Например, ввод и вывод целочисленного массива из десяти элементов будет иметь вид:
int a[10];
for(int i=0; i<10; i++) scanf("%d”, &a[i]);
...
for(int i=0; i<10; i++) printf("%d\t”, a[i]);
Присвоение массива массиву также осуществляется поэлементно. Например, необходимо присвоить одномерный
вещественный массив x одномерному вещественному массиву y. Фрагмент программы:
double x[15], y[15];
...
for(int i=0; i<15; i++) y[i] = x[i];
...
В СИ во время выполнения программы не производится контроль за допустимыми значениями индексов элементов.Поэтому, если индекс элемента выходит за рамки массива, то в программе возможно появление ошибок. Ошибки могут быть:
простыми (например «случайное» изменение переменных);
критическими (выход за пределы пространства памяти, отведенной для программы).
Например:
int a[10];
for(int i=0; i<=10; i++) a[i] = i;
Примеры решения задач на массивы в си
Далее познакомимся с двумерными массивами (матрицами)