Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЯзыки прогрИб.doc
Скачиваний:
27
Добавлен:
12.11.2019
Размер:
922.11 Кб
Скачать

Тема 5. Программа на языке высокого уровня

5.1. Структура программы и функции

Будем использовать термин базовый язык (kernel language) для обозначения подмножества С++, которое эквивалентно ANSI C, с незначительными расширениями. Он будет включать в себя не объектно-ориентированные расширения языка

Программа на С++ состоит из нескольких файлов двух типов: файлов заголовков (с расширением .h) и файлов кодов (с расширением .cpp).

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

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

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

Комментарии – это тексты, предназначенные для аннотирования программы. Существуют два способа обозначения комментария:

  • в языке С++: с символов // и до конца строки,

  • в языке С: с символов /* и до символов */.

Директива препроцессора – это строка, начинающаяся с символа # и заканчивающаяся символом конца строки. Препроцессор выполняет директивы перед фазой компиляции.

Директива #include включает файл в текущий файл.

Пример:

#include <iostream> //подключает библиотеку

#include “lab1_f.h” //подключает файл заголовков

Директива #define определяет макрос.

Синтаксис простых макросов #define (без параметров):

#define идентификатор_макроса последовательность_лексем

Идентификатор макроса в тексте программы заменяется на последовательность лексем.

Пример: #define max_kart 100 //заменяет max_kart на 100

Синтаксис макросов с параметрами:

#define идентификатор_макроса(формальные параметры)

последедовательность_лексем

Синтаксис оператора вызова макроса:

идентификатор_макроса(фактические параметры);.

При вызове макроса происходят две замены. Сначала идентификатор макроса в исходном тексте программы заменяется на последовательность лексем, а затем формальные параметры в теле макроса заменяются значениями фактических параметров оператора вызова макроса.

Директива #undef отменяет определение макроса. Пример:

#undef max_kart //разрывает связь между max_kart и 100.

Директивы условной компиляции вызывают обработку частей программы препроцессором в зависимости от условий. К ним относятся: #if, #ifdef, #ifndef, #else, #elif, #endif.

Синтаксис:

#if (expr1) //Если expr1 истинно, то обрабатывается

{op1;...} //{op1;...} и управление на #endif

[#elif (expr2) //Если expr1 ложно, то управление на

{op2;...}] //#elif и если expr2 истинно, то обрабатывается

//{op2;...} и управление на #endif и т.д.

[#else {opN;...}] //Если все expr ложны, то обрабатывается

#endif //{opN;...}

Символы [] означают необязательную конструкцию.

Директива #ifdef обрабатывает часть программы, если идентификатор, указанный в условии, определен ранее в программе, а директива #ifndef обрабатывает часть программы, если соответствующий идентификатор не определен. В учебной программе директива #ifndef будет использована для блокировки повторного включения файлов заголовков в файлы кодов.

Объявление переменной - это тип данных и имя переменной.

В С++ имеются стандартные (базовые) типы данных:

целые - int, unsignet int, long, unsignet long;

вещественные – float, double, long double;

символьные – char.

Примеры переменных базовых типов:

int kol; //объявление переменной типа int, резервир. 2 байта

float y=0; //объявление и инициализация, резервир. 4 байта

Указатель – это переменная, содержащая адрес другой переменной. Пример объявления и инициализации указателя:

int tabn; int* p; //объявл. переменной и указателя на тип int

p=&tabn; //иниц. указателя адресом tabn, &-опер. взятия адреса

Ссылка – это переменная, которая является альтернативным именем другой переменной. Пример объявления и инициализации:

int tabn; int& r; //объявление переменной и ссылки r

r=tabn; //инициализация ссылки адресом переменной tabn

Массив – это совокупность данных одинакового типа. Пример объявления:

int det[10]; //объявление массива из 10 элементов типа int

float cena [10][20]; //объявление двумерного массива

int kol[]={1,2,3,4,5}; //объявление и инициализация массива

Именные константы – это переменные, не изменяющие своего значения. Пример объявления:

const int max_kart=100;

Структура – это совокупность данных разного типа .

. Пример объявления:

struct tip_karta //объявление типа - структура tip_karta

{

char tabn[10]; //3 поля структуры

char fio[30];

float oklad;

}; //символ (;) – обязателен, память не резервируется

tip_karta zap; //объявл. переменной типа структура tip_karta