Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual_C_console.pdf
Скачиваний:
34
Добавлен:
16.05.2015
Размер:
954.14 Кб
Скачать

56

внешняя. Обычно это требуется для повышения наглядности программы. Пример:

int x;

void _tmain ()

{

. . .

}

table ()

{

extern int x;

}

gist ()

{

int х;

}

sum ()

{

}

В этом примере глобальная переменная x действует в функциях

_tmain (), table(), и sum (). Но переменная x из функции gist () - это локальная переменная, которая действует только в пределах функции gist (), и никакого отношения эта переменная не имеет к глобальной переменной x, действующей в остальных функциях.

Локальные переменные глобальны внутри функции. Если некоторая переменная объявлена внутри функции, она «видима» во всех блоках (внутри пар фигурных скобок) в этой функции. Но если внутри любого блока функции объявлена переменная, она невидима за пределами этого блока.

Переменные с индексами (массивы)

При решении задач часто приходится одинаковым способом обрабатывать множество логически связанных элементов данных. Присвоение разных имен для них не только трудоемко, но и бессмысленно. Более удобно присвоить им одно общее имя, а для того, что-

57

бы отличать элементы друг от друга, использовать номера (нумерация элементов носит условный характер, определяемый, например, порядком ввода этих элементов в компьютер, либо порядком их записи).

При такой организации данных обработку (доступ к элементам) выполняют в циклах, в которых для последовательного обращения к элементам изменяют их номера. Номера элементов называют индексами, а организованное таким образом множество элементов данных называют массивом.

Количество элементов массива может быть произвольным и зависит от решаемой задачи, т.е. задается программистом. Для размещения элементов массива в памяти требуется свободное место, определяемое произведением количества элементов на длину одного элемента. Например, для размещения 10 элементов типа double требуется

10 * 8 = 80 байт.

Размер массива зависит от решаемой задачи. При объявлении массива количество элементов в нем указывается в квадратных скобках после типа элементов данных и имени массива. Например,

double x[25], y[25], sum; char st[100], ch;

В этом объявлении описаны массивы элементов типа double с именами x и y (по 25 элементов каждый) и st с элементами типа char (из 100 элементов). Одновременно объявлены также скалярные переменные sum типа double и ch типа char. Всего для размещения этих переменных требуется (переменная типа double 8 байт и типа char 1 байт)

25 * 8 + 25 * 8 + 8 + 100 * 1 + 1 = 509 байт .

Тип каждого элемента массива совпадает с типом данных, объявленным для всего массива, и имеет некоторое конкретное значение. Например, элемент x[i], объявленного выше массива x, относится к типу double и может иметь значение, например, -1.536. Элементы

58

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

В примерах записи в качестве индекса массива указана переменная i, которая может иметь конкретное значение, например, 3. Имя переменной для индекса массива может быть любым, но лучше использовать имена, связанные с принятыми математическими обозначениями.

Для обращения к элементам массива используются индексы, которые записываются в квадратных скобках после имени массива. В качестве индексов и значений, используемых при объявлении массивов, используют целочисленные константы и арифметические выражения, которые при вычислении дают целые числа. Индексы изменяются от 0 до значения на 1 меньше объявленного количества элементов. Так, для упомянутого выше массива st из 100 элементов индексы изменяются от 0 до 99.

Последовательность обработки элементов массива определяется порядком изменения значений индексов массива. При использовании в качестве индекса константы можно обратиться только к одиночному элементу массива. Если же в качестве индекса используется выражение, в которое входит переменная, то порядок обработки элементов массива определяется последовательными значениями, которые получает выражение при изменении этой переменной. В простейшем случае выражение состоит только из переменной.

Многие задачи, в которых используются массивы, при настройке на конкретное применение требуют изменения количества объявляемых элементов массива. Это значение должно также использоваться во всех операторах цикла, с помощью которого полностью обрабатывается массив.

В языке C++ не выполняется проверка выхода за границу массива (т. е. не проверяется, лежит ли значение индекса массива в пределах от нуля до максимального количества элементов массива без единицы). Выход за границу массива обычно приводит к неправильной работе программы, а иногда и к зависанию машины.

59

Наиболее распространенной ошибкой при обработке массивов является неправильное указание максимального значения индекса массива. По этой причине настоятельно рекомендуется задавать количество элементов массива с помощью константы, определяемой директивой препроцессора #define, и эту же константу использовать во всех операторах цикла, с помощью которых обрабатывается массив. Пример такого оформления цикла показан ниже.

Использование директивы препроцессора #define исключает возможность выхода за границу массива. При объявлении массива и во всех операторах цикла для указания предельного количества элементов используется одна и та же константа (а не конкретные числа), поэтому упрощается настройка программы для работы с другими размерами массива. Для этого достаточно в директиве #define изменить число, задающее количество элементов, и вся программа настраивается на обработку нового количества элементов.

Наиболее часто элементы массива обрабатываются в порядке возрастания индексов массива, т.е. переменная цикла возрастает от 0 до предельного значения индекса с шагом 1. Ниже приведена схема оформления оператора цикла для такой обработки.

#define SIZE 20 // Задание количества элементов массива

...

 

double a[SIZE];

//Объявление массива

int i;

//Объявление индекса массива

...

// Оператор цикла, задающий изменение индекса for (i = 0; i < SIZE; i++)

{

//Выполнение действий с элементом массива, например sum = sum + a[i];

}

В примере тип элементов массива объявлен как double, но могут быть указаны и любые другие, допустимые в языке С++ типы данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]