Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть1_лексические основы языка.doc
Скачиваний:
5
Добавлен:
16.09.2019
Размер:
397.31 Кб
Скачать

Перечисления (перечислимый тип)

Перечислимый тип по существу описывает целые константы (типа int), которым приписаны уникальные и удобные для использования имена.

Формат описания:

enum [имя типа] {список констант}

где константы могут быть инициализированы обычным образом.

Например,

enum digit {one=1,two,three};

Здесь one, two, three – произвольным образом выбранные программистом идентификаторы для обозначения констант 1,2,3. После такого определения в программе наряду, например, с константой 1 можно использовать ее обозначение one. Фактически такая запись равносильно записи

const int one=1;

const int two=2;

const int three=3;

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

Если в определении перечислимых констант опустить знаки “=” и не указывать числовых значений, то они будут присваиваться идентификаторам по умолчанию следующим образом: самый левый в фигурных скобках идентификатор получит значение 0, а каждый последующий увеличивается на 1. Имена перечислимых констант должны быть уникальными, а их значения могут совпадать.

Имя типа указывают, если требуется вводить в программе переменные этого типа. Например

digit d1,d2;

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

Массивы

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

Описание массива в общем случае имеет формат:

[класс памяти] [const] тип имя [константное выражение][={список инициализирующих элементов}];

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

int a[10]; - массив из 10 целых чисел

int n=10; int a[n]; - недопустимо, так как n – не константа

int a[]; - недопустимо, так как нет ни размерности ни инициализирующего списка.

Предпочтительнее задавать размерность массива с помощью именованных констант. Например,

const int n=10;

int mas[n];

Когда массив объявлен без указания размера, но при этом инициализирован списком, его размер вычисляется путем подсчета числа элементов этого списка. Например

int a []={1,2,3,4};//размерность массива равна 4

Явная инициализация массива разрешена только при его определении и возможна двумя способами: либо с указанием размера массива в квадратных скобках, либо без его явного указания, например,

int а[6]={1,2,3,4};//массив из 6 целых чисел с инициализацией первых четырех, остальные будут обнулены.

char str1[]={‘a’, ‘b’, ‘c’};// массив из 3 элементов типа char

Число элементов в инициализирующем списке должно быть меньше и равно указанной размерности массива, то есть запись int a[3]={1,2,3,4}; недопустима.

Доступ к элементам массива осуществляется с помощью комбинации имя массива + индекс элемента следующими двумя способами.

  1. С помощью записи имя_массива[индекс элемента]. То есть, чтобы обратится к i- тому элементу массива а, используют запись а[i], при этом первый элемент массива имеет индекс 0.

  2. С помощью записи *(имя_массива+индекс элемента) Важно понимать, что имя массива является указателем-константой на его первый элемент. То есть, если описан массив int a [n], то для обращения к его i-ому элементу наряду с записью a[i], можно использовать запись *(a+i).

Работа с элементами массива организовывается обычно в цикле.

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

cin>>a[0]>>a[1]>>[3];

cout<<a[0]<<a[1]<<a[3];

соответственно, при условии, что количество элементов точно известно и невелико. На практике так поступают редко.

При записи cout<<a; на экране появится адрес памяти, по которому расположен первый элемент массива a, а запись cin>>a; вызовет ошибку времени выполнения.

Исключение составляют только массивы символов (char), для которых переопределены объекты cin и cout.

Например, пусть описан массив

char s[255]=”Hello”;/*обратите внимание, что массив типа char допустимо инициализировать не только списком элементов в скобках {}, но и строковой константой*/

cout<<s; //на экран выведется, не адрес памяти, а вся строка

cin>>s; // с клавиатуры считаются все символы до первого пробельного разделителя.

Операция new, используемая для инициализации указателей, позволяет определять массив еще одним способом (это так называемый динамический массив):

int k;

cin>>k;

int *a=new int [k];

Память, зарезервированная под динамический массив, должна освобождаться явным образом оператором delete [], например delete [] a;

Многомерные массивы описываются как массивы массивов, например,

int a2[3][2] //массив из 3 массивов, содержащих по 2 целых элемента.

Для обращения к элементу двумерного массива используется два индекса, например, a2[i][j]. Для работы с двумерными массивами используется конструкция вложенных циклов.

Задание для самостоятельной работы! Придумать, как двумерный массив задать динамически.