
10. Массивы
Массив представляет собой упорядоченную конечную совокупность элементов одного типа. Число элементов массива называют его размером. Каждый элемент массива определяется идентификатором (именем) массива и своим порядковым номером – индексом. Индекс – целое число, по которому производится доступ к элементу массива.
Индексов может быть несколько. В этом случае массив называют многомерным, а количество индексов одного элемента массива называется его размерностью.
Массивы нужны тогда, когда требуется произвести одни и те же действия над многими числами, и притом эти числа должны храниться в памяти одновременно. Поэтому для работы с массивами, как правило, используются циклы, перебирающие элементы массива.
Описание массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива. Например, double b[10]; – описание массива из 10 вещественных чисел.
10.1. Одномерные массивы
В программе одномерный массив объявляется следующим образом:
тип ID_массива [размер] = {список начальных значений};
тип – тип элементов массива;
размер – количество элементов в массиве.
Список начальных значений используется при необходимости задать начальные значения (инициализировать элементы массива), он может отсутствовать. Значения в списке разделяются запятыми. (Такое задание списка элементов массива допустимо только при его инициализации и недопустимо в операции присваивания).
Примеры объявления массива:
int a[6];
double x[5]={2, 3.5, -4.5e3, 2.34, -.7 };
Если в группе {…} список значений короче, то оставшимся элементам присваивается 0.
Обращение к конкретному элементу массива в программе осуществляется путем записи имени массива и за ним в квадратных скобках - номера элемента, например:
a[0]=1;
a[i]++;
a[3]=a[i]+a[i+1];
Индексы массивов в языке Си начинаются с 0, т.е. в массиве x первый элемент: x[0], второй – x[1], … пятый – x[4].
Размер массива может задаваться только константой или константным выражением. Нельзя задавать массив переменного размера. Для этого существует отдельный механизм – динамическое выделение памяти.
С другой стороны, если требуемое количество элементов массива заранее неизвестно, часто объявляют массив достаточно большого размера, а используют лишь столько из его элементов, сколько нужно. При этом требуется переменная, задающая количество используемых в данный момент элементов массива:
int a[100], n, i;
M: cout<<"Vvedite kolichestvo elementov (ne bolshe 100)";
cin>>n;
if (n>100) goto M;
cout<<"Vvedite elementy:\n";
for (i=0; i<n; i++)
cin >> a[i];
Внимание. В языке Си с целью повышения быстродействия программы отсутствует механизм контроля выхода индексов за пределы массивов. При необходимости такая проверка должна быть запрограммирована явно. При попытке присвоения значения несуществующему элементу массива (например, элементу с индексом, большим размера массива) возможно изменение значений других переменных программы (расположенных там, где "ожидался" соответствующий элемент; подробнее об этом в последующих темах). Если же при этом произойдет попытка выхода за границы всей области памяти, отведенной программе, будет выдано сообщение об ошибке "Access violation".
10.2. Примеры алгоритмов, использующих одномерные массивы.
а) Простейший пример
Задача 1. Ввести с клавиатуры массив, а затем вывести только его положительные элементы:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
int a[100],n,i;
M: cout<<"Vvedite n<=100:";
cin>>n;
if(n>100) goto M;
cout<<"Vvedite massiv:\n";
for (i=0; i<n; i++)
cin>>a[i];
cout<<"Polozhitelnye elementy: ";
for (i=0; i<n; i++)
if (a[i]>0)
cout<<a[i]<<" ";
cout<<endl;
getch();
}
б) Нахождение суммы, произведения, количества
Задача 2. Найти сумму элементов массива.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
int a[100],n,i,s;
M: cout<<"Vvedite n<=100:";
cin>>n;
if(n>100) goto M;
cout<<"Vvedite massiv:\n";
for (i=0; i<n; i++)
cin>>a[i];
s=0;
for (i=0; i<n; i++)
s+=a[i];
cout<<"summa="<<s<<endl;
getch();
}
Задача 3. Найти сумму положительных элементов массива.
От предыдущей задачи она отличается только добавлением оператора if:
s=0;
for (i=0; i<n; i++)
if (a[i]>0)
s+=a[i];
Задача 4. Найти произведение положительных элементов массива.
Содержательный участок программы имеет вид:
s=1;
for (i=0; i<n; i++)
if (a[i]>0)
s*=a[i];
Задача 5. Найти количество положительных элементов массива.
s=0;
for (i=0; i<n; i++)
if (a[i]>0)
s++;
Задача 6. Найти сумму четных (по значению) элементов массива.
s=0;
for (i=0; i<n; i++)
if (a[i]%2==0)
s+=a[i];