Читайте также: |
|
ГЛАВА 6. МАССИВЫ
Общие сведения о массивах
Одномерные массивы
· инициализация массивов
· обработка массивов
Двумерные массивы
· инициализация массивов
· обработка массивов
Массивы как параметры функций
Общие сведения о массивах
Массивы являются наиболее часто используемыми структурами данных, позволяющие удобным образом организовать размещение и обработку в компьютере больших объёмов информации.
Массив представляет собой набор однотипных данных, имеющих общее имя (имя массива) и различающихся местоположением в массиве.
В С++ массив не является стандартным типом данных. Напротив, он сам имеет тип: int, char, float, double и т.д. Допускается создавать массивы массивов, указателей, структур и других данных.
В массиве хранятся отдельные значения, которые называются элементами массива. Все элементы массива должны быть одного типа. Каждому элементу массива присваивается индекс (или индексы), задающий (задающие) местоположение элемента в массиве.
Под размерностью массива понимают количество измерений массива (т.е. число индексов ). Размеры по каждому измерению массива вместе с типом его элементов определяют количество байтов, необходимых для размещения массива в памяти компьютера, которое выполняется на этапе компиляции. Поэтому размеры массива могут быть заданы только целой положительной константой или константным выражением, например:
int a[10]; // одномерный массив из 10 элементов
int b[3][4]; // двумерный массив из 3 строк и 4 столбцов
const int n = 10;
int a[n]; // размер массива задан константой
Размеры при объявлении массива предпочтительнее задавать с помощью именованных констант.
Чтобы определить размерность массива достаточно посмотреть на его объявление. Если в нём указан один индекс, то это одномерный массив, если два, то двумерный (или матрица), и т.д. Массивы более чем с одним индексом, называются многомерными.
Одномерные массивы
Одномерный массив представляет собой совокупность однотипных элементов, доступ к которым определяется одним индексом. Все элементы массива сохраняются в памяти последовательно, первый элемент имеет нулевой индекс (далее 1, 2, и т.д.). Индекс – это порядковый номер элемента в массиве.
Массив перед использованием в программе, как и обычную переменную, следует объявить. Объявить одномерный массив можно следующим образом:
тип_элементов имя_массива [размер_массива];
где тип_элементов – допустимый в С++ тип элементов массива;
имя_массива – идентификатор, задаваемый по тем же правилам, что и имена обычных переменных;
размер_массива – это количество элементов массива.
Примеры объявления одномерных массивов различных типов:
int a[10];//массив из 10 элементов типа int
float array[3];//массив из 3 элементов типа float
char mas[40]; // массив из 40 элементов типа char
Следует отметить, что использование неименованных констант при объявлении массива нежелательно.
Массивы одного типа можно объявлять списком через запятую, включая в этот список одновременно и переменные того же типа:
intmaxY, maxZ, ar[10], mas[5];
При объявлении массивов необходимо помнить, что индекс первого элемента всегда равен нулю. Допустимыми считаются значения индексов, находящиеся в диапазоне от 0 до размер_массива - 1. Например, объявление
int mas[10];
предполагает наличие десяти индексированных переменных:
mas[0] mas[1]... mas[9]
Обращение к элементу массива, индекс которого не является допустимым, приводит к возникновению ошибок, вызванных обращением к области памяти, не принадлежащей массиву.
Инициализация одномерных массивов
Инициализация массива означает присвоение начальных значений его элементам при объявлении.
Инициализация элементов массива осуществляется указанием его начальных значений в фигурных скобках:
int mas[5] = {1, -5, 10, 243, -58};
Если при инициализации задано меньше начальных значений массива, чем размер массива, остальные элементы инициализируются нулевыми значениями. Другими словами, объявление
int mas[10] = {1, 2, 3, 4, 5};
создаёт массив из 10 элементов целого типа, первые 5 из которых проинициализированы указанными значениями, а остальные – нулевыми. Этим можно воспользоваться для инициализации элементов массива нулевыми значениями:
int mas[20] = {0};
Однако если задать значений больше, чем указанный размер массива, компилятор генерирует сообщение об ошибке.
Во время инициализации можно не задавать количество элементов массива:
int mas[] = {1, 2, 3, 4, 5};
Размер массива при таком объявлении определяется количеством значений в списке инициализации. Количество элементов массива в этом случае можно определить как
const int n = (sizeof (mas) / sizeof (mas[0])); где
sizeof (mas) – количество байтов, занимаемое массивом mas, а
sizeof (mas[0]) – количество байтов, занимаемое одним элементом.
При необходимости можно задать массив констант следующим образом:
const int array[] = {5, 4, 3, 2, 1};
Тогда ни один из элементов массива array изменить будет нельзя.
Обработка одномерных массивов
В С++ работать с массивами можно только поэлементно. Если mas является массивом размера n, то отдельный элемент обозначается с помощью имени массива, за которым следует индекс требуемого элемента, например, mas[i]. Значение индекса может изменяться от 0 до n-1. В качестве номера элемента массива могут использоваться:
· константа – mas[3];
· переменная – mas[i];
· выражение – mas[3 * (i+2)];
Элементы массива называют индексированными переменными. Индексированные переменные можно использовать как обычные переменные, например, с ними можно производить следующие действия:
· присваивать элементу массива значение
mas[1] = 5;
· использовать элементы массивов в выражениях
i = 4; y = 2 * mas[i] * sin(mas[5]);
· вводить и выводить элементы массивов
cin>>mas[5]; cout<<mas[k];
Для организации ввода/вывода массива следует использовать цикл, осуществляющий ввод/вывод каждого элемента массива (поскольку в С++ работать с массивами можно только поэлементно). Доступ к элементам одномерного массива удобнее всего осуществлять, пользуясь циклом for.
Например, ввод массива можно выполнить следующим образом:
const int n = 10; // именованная константа
float mas[n]; // объявлен массив из 10 элементов
for(int i = 0; i < n; i++){ // цикл для ввода массива
cin>>mas[i];
}
В приведенном выше примере поэлементно вводится массив mas типа float размера n. Параметр оператора цикла for переменная i изменяется от 0 до n-1.
Вывод массива выполняется аналогичным образом:
for(int i = 0; i < n; i++)
cout<<mas[i]<< ' ';
// Пример 6.1. Ввести одномерный массив. Найти сумму элементов.
#include <iostream>
using namespace std;
const int DIM = 50;
int main() {
int a[DIM], n;
cout<<"Vvedi razmer massiva: "; cin>>n;
cout<<"Vvedi massiv "<<endl;
for(int i = 0; i < n; i++)
cin>>a[i];
int sum = 0;
for(int i = 0; i < n; i++)
sum = sum + a[i];
cout<<"Summa all elements = "<<sum<<endl;
system("pause");
}
Если массив достаточно большого размера нужно заполнить одинаковыми значениями или значениями, изменяющимися по строгому закону, то его инициализация нерациональна. Присвоить значения элементам массива в этом случае можно в цикле. Например:
for(int i = 0; i < n; i++) mas[i] = i;
Когда начальные значения массива не играют принципиальной роли, можно организовать заполнение массива случайным образом в нужном диапазоне значений. Для этого используют генератор случайных чисел.
// Пример 6.2. Заполнение массива случайным образом и вывод
// его на экран. Использование функций rand(), srand(n).
#include <iostream>
#include <stdlib.h>
const int DIM = 50;
using namespace std;
int main() {
int a[DIM], n;
while(true){
system("cls");
cout<<"Vvedi n:"; cin >> n;
if(n > 1 && n < DIM) break;
cout<<" Nocorrect n\n";
}
srand (n); // для получения разных послед. чисел
cout<<"\n\t 1___Massiv a(n)\n";
for(int i = 0; i < n; i++)
a[i] = rand () % 6 + 1; // числа от 1 до 6
for(int i = 0; i < n; i++)
cout<<a[i] << ' ';
cout<<"\n\t 2___ Massiv a(n)\n";
for(int i = 1; i <= 25; i++){ // вывод по 5 элементов в строку
cout.width(3);
cout<< rand () % 6 + 1;
if(i % 5 == 0)cout<<endl;
}
cout<<"\n\t 3___Massiv a(n)\n";
for(int i = 0; i < n; i++)
a[i] = rand (); // числа от 0 до RAND_MAX
for(int i = 0; i < n; i++)
cout<<a[i]<< ' ';
cout<<endl;
system("pause");
}
Дата добавления: 2015-01-29; просмотров: 75 | Поможем написать вашу работу | Нарушение авторских прав |