- •Рецензенты:
- •Лекция 1 Основные понятия языка с
- •Первая программа
- •Переменные языка с
- •Имя переменной
- •Объявление константы
- •Операции языка с
- •Лекция 2 Операторы языка с Условный оператор
- •Оператор switch
- •Циклы Цикл for
- •Циклы while и do-while
- •Оператор безусловного перехода
- •Использование операторов break, continue и goto в циклах
- •Операция условие ?
- •Лекция 3 Массивы
- •Инициализация массивов
- •Массивы символов. Строки
- •Функции для работы со строками
- •Лекция 4 Указатели
- •Объявление указателей
- •Операции над указателями
- •Связь указателей и массивов
- •Массивы указателей
- •Инициализация указателей
- •Лекция 5 Функции языка с
- •Объявление функции
- •Оператор return
- •Прототипы функций
- •Функции c произвольным числом параметров
- •Область действия и область видимости переменной
- •Классы памяти
- •Параметры и аргументы функции
- •Лекция 6 Типы, определяемые пользователями
- •Структура
- •Перечислимый тип
- •Переименование типов-typedef
- •Лекция 7 Модели памяти и препроцессор языка с Модели памяти
- •Препроцессор языка с
- •Директива #define
- •Список рекомендуемой литературы
- •Оглавление
- •Программирование на языках высокого уровня: с
- •428015 Г.Чебоксары, Московский просп., 15
Перечислимый тип
Перечислимый тип (enumeration) - это множество поименованных целых констант. Перечислимый тип определяет все допустимые значения, которые могут иметь переменные этого типа. Основная форма объявления типа следующая:
enum имя_типа <список_названий> список переменных;
Список переменных может быть пустым. Пример определения перечислимого типа и переменной данного типа:
enum seasons { win, spr, sum. aut };
enum seasons s;
Ключом к пониманию сущности перечислимого типа является то. что каждое из имен win, spr, sum и aut представляет собой целую величину. Если эти величины не определены по-другому, то по умолчанию они соответственно равны нулю, единице, двум и трем.
Оператор printf("'%d %d", win, aut); выдаст на экран числа 0 и 3. Во время объявления типа можно одному или нескольким символам присвоить другие значения, например:
enum value {one=l, two, three, ten=10, thousand=1000, next};
Если теперь напечатать значения printf"("%d %d %d %d %d \n", one, two, ten, thousand, next); то на экране появятся числа 1 2 10 1000 1001, то есть каждый следующий символ увеличивается на единицу по сравнению с предыдущим, если нет другого присваивания.
С переменными перечислимого типа можно производить следующие операции:
• присвоить переменную типа enum другой переменной того же типа;
• провести сравнение с целью выяснения равенства или неравенства;
• арифметические операции с константами типа спит (i = win - aut).
Нельзя использовать арифметические операции и операции ++ и -- для переменных типа enum.
Основная причина использования перечислимого типа - это улучшение читаемости прoграмм.
Переименование типов-typedef
Язык С позволяет, кроме того, дать новое название уже существующим типам данных. Для этого используется ключевое слово typedef. При этом не создается новый тип данных.
Например:
typdef char SYMBOL;
typdef unsigned UNS1GN;
typdef float real;
Достаточно часто используется оператор typedef с применением структур:
typdef struct st_tag{
char name[30];
int kurs;
char group[3];
int slip;
} STUDENT;
Теперь для определения переменной можно использовать struct st_tag avar; а можно использовать STUDENT avar;
Лекция 7 Модели памяти и препроцессор языка с Модели памяти
Особенности операционной системы MS DOS требуют дополнительных уточнений относительно распределения памяти компьютера.
Система Borland C++ предусматривает работу с шестью моделями памяти: tiny, small, medium, compact, large и huge.
Выбор модели определяется требованиями программы. Каждая модель памяти cответствует определенному типу программы и размеру кодов. Микропроцессор INTEL 8086 при работе в реальном режиме имеет сегментированную архитектуру памяти.
Вопросы работы в защищенном режиме процессора здесь не затрагиваются. Как правило, компьютер имеет 1 Мбайт памяти, но размер адреса 2-го байта позволяет адресовать 64 Кбайт памяти
216=26210=26 * 1Кбайт = 64 Кбайт
Такой участок памяти называется сегментом. Процессор позволяет работать одновременно с четырьмя разными сегментами:
• сегментом кода;
• сегментом данных;
• сегментом стека;
• вспомогательным сегментом.
Полный адрес состоит из двух 16 битовых значений: адреса сегмента и смешения. Адресные процессоры имеют 20 разрядов:
220=210* 210=26* I Кбайт =1 Мбайт и позволяют адресовать 1 Мбайт памяти.
Указатели к моделям памяти Borland C++ имеют самое непосредственное отношение. Тип выбранной модели памяти определяет по умолчанию тип указателей, используемых для кода и данных. Указатели бывают трех видов: near - 16 бит, far - 32 бита, huge - 32 бита.
Tiny -это минимальная из моделей памяти. Общий размер кода, данных и стека 64 Кбайт. Все указатели ближние (near).
Small - эта модель хорошо подходит для небольших прикладных программ. Используются только ближние указатели. Общий объем памяти 64 Кбайт и для кода, и для данных и стека.
Medium годится для больших программ, для которых не требуется держать в памяти большой объем данных. Для кода, но не для данных, используются дальние указатели (far).
Объем памяти данных и стека ограничен 64 Кбайт, а программа может занимать до 1 Мбайт.
Compact лучше всего использовать в тех случаях, когда размер кода невелик, но требуется адресация большого объема данных. Дальние указатели используются для данных (1 Мбайт), но не для кода (64 Кбайт).
Large и Huge - эти модели памяти применяются только для очень больших программ. И для кода, и для данных используются дальние указатели. Модель памяти huge отличает отмена ограничения размера памяти, выделяемой под статические данные. Обычно объем такой памяти не более 64 Кбайт.
Для выбора модели памяти надо либо воспользоваться соответствующей опцией компилятора командной строки, либо установить соответствующую опцию в интегрированной среде.
Borland C++ вводит 8 новых ключевых слов, которые могут использоваться как модификаторы при объявлении указателей, а также функций. Эти ключевые слова следующие: near, far, huge, _cs, _ds, _es, _ss, _seg.
Функции и указатели бывают ближними или дальними по умолчанию, в зависимости от выбранной модели памяти. Можно, однако, указать модификатор перед типом указателя. Так, все функции графической системы Borland C++ указаны как far (дальние).
