Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lect7.doc
Скачиваний:
9
Добавлен:
20.05.2014
Размер:
71.17 Кб
Скачать

** сpp1 ** 10.06.2004

Лекция 7 МАССИВЫ В ПОДПРОГРАММАХ.

ФОРМАТИРОВАНИЕ. ПОДПРОГРАММЫ.

7.1 Одномерный и двумерный массивы

В лекциях 4 – 6 по С++ рассматривались скалярные переменные.

Значение скалярной переменной - это одно число (или символ).

Если нужно работать с большими группами значений, то неудобно

использовать большое количество имен. Целесообразно иметь одно имя для всей

группы, а элементы группы различать по их порядковым номерам. Это

соответствует переходу от отдельных значений к структурам из них.

Например, группа Р-21 - это структура из отдельных студентов, т.е.

студент-это скаляр, а группа - это структура или "массив".

Массив является простейшей структурой данных.

Определение массива рассматривалось в лекции по Math CAD в разделе 2.4.

Напомним, что массив - это совокупность индексированных переменных

одного типа, занимающих последовательные ячейки памяти.

Массив с одним индексом называется одномерным, а если индексов несколько,

то имеем многомерный массив.

Любой массив в С++ имеет следующие атрибуты:

1) имя,

2) тип,

3) Количество индексов,

4) Границы индексов,

5) Значения его элементов.

В отличие от массива, скалярная переменная имеет только три атрибута:

имя, тип, значение.

Индексы элементов массива записываются в квадратных скобках, например,

m[0], m [ 1], m [ k], m [i++], m [ i+j ], A[2][3], A[i][j]

Нумерация индексов всегда начинается с нуля,

т.е. отрицательных индексов нет.

Обычно при работе с одномерным массивом используют дополнительно две

целых скалярных переменных, например, k, N. Имя k служит для текущего

индекса, N - это количество элементов в массиве. Произвольный элемент

записывается как

mas[k], где k=0,1, 2, 3, . . , N-1,

и это изменение k задается оператором цикла для k<N .

Рассмотрим применение массива для ввода N чисел. Пусть N=200. Если не

использовать массив, то необходимо иметь имя для каждого числа, например,

V1, V2, V3, V4, ..., V200. Оператор ввода тогда следует записать как

cin>> V1>>V2>>V3 >> . . . . и далее все остальные 197 имен,

что вряд ли осилит обычный человек. Если же использовать массив V , то

можно написать цикл по k и тот же ввод будет иметь вид

for ( k=0; k<200; k++) cin >> V[k] ; (7.1)

При ответе на экране можно вводить все числа последовательно, разделяя

пробелами. Можно переходить при этом на новую строку, нажав <ENTER>.

Для массива должна выделяться память в соответствии с возможными

значениями индексов. Память выделяется при объявлении массива.

Тип указывается как обычно и характеризует все элементы массива:

int array [15], V [200]; float mas[25] ; double D[6]; (7.2)

Тип определяет размер памяти для каждого элемента, а число в квадратных

скобках – количество элементов. Например, для массива array будет выделено

60 байт, для массива V - 800 байт, для массива D - 48 байт.

Так как нумерация индексов начинается с нуля, то номер элемента из

объявления массива и все последующие номера использовать нельзя.

При объявлении типа и размера массива его можно инициализировать, т.е.

присвоить всем или части элементов начальные значения.

Для инициализации используется список в фигурных скобках , например,

int Va [4]={ 7, 8, 9, 10} ;

int Va [ ]={ 7, 8, 9, 10} ; (7.3)

float mas [25] = { 0., 2., 4.} ;

Здесь во втором операторе список определяет как значения элементов,

так и длину массива, т.е. два первых оператора эквивалентны.

В последнем операторе начальные значения присваиваются только трем

первым элементам: mas[0], mas[1], mas[2].

После списка точка с запятой ставится.

Отметим здесь ещё очень важный момент.

На первых этапах обучения в простых программах не будем использовать

имена переменных для границ индексов при выделении памяти,

т.к. для этого нужны новые средства. Пример:

void main ( ) { int N=12; int arr [ N] ; . . . . } / / ошибка!

Этот фрагмент неправилен, т.к. при компиляции должно быть выделено

конкретное количество ячеек памяти, а значение N станет известным лишь

после выполнения оператора присваивания. В этом случае обычно

выделяют память с запасом и указывают на ограничение значений N,

например, при вводе. Поэтому в простых программах

при выделении памяти используйте в квадратных скобках числа.

Но желающие для описания массива длины N как int arr[N]; могут

применить модификатор const или команду препроцессора #define:

const int N=12 ; #define N 12

Для двумерного массива рассмотрим пример сложения

двух матриц (C=A+B).

. . . . . .

Соседние файлы в папке Лекции