Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Стадии прохождения программы




Алфавит языка

Алфавит С++ включает:

· прописные и строчные латинские буквы и знак подчеркивания;

· арабские цифры от 0 до 9;

· специальные знаки, например, {, }, %, #, & и т.д.

· пробельные символы: пробел, символы табуляции, символы перехода на новую строку.

Из символов алфавита формируются лексемы языка:

· идентификаторы;

· ключевые (зарезервированные) слова;

· знаки операций;

· константы;

· разделители (скобки, точка, запятая, пробельные символы).

Границы лексем определяются другими лексемами, такими, как разделители или знаки операций.

Идентификаторы

Идентификатор – это имя программного объекта. В идентификаторе могут использоваться латинские буквы (прописные и строчные), цифры и знак подчеркивания. Прописные и строчные буквы различаются, например, sysop, SySoP и SYSOP – три различных имени. Первым символом идентификатора может буква или знак подчеркивания, но не цифра. Обычно с символа подчеркивания начинаются имена системных зарезервированных переменных и констант. Пробелы внутри имени не допускаются.

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

· идентификатор не должен совпадать с ключевыми словами и именами используемых стандартных объектов языка;

· не рекомендуется начинать идентификаторы с символа подчеркивания, поскольку они могут совпадать с именами системных функций или переменных, и, кроме того, это снижает мобильность программы;

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

Часто идентификатор мы называем просто именем: имя переменной, имя функции.

void main (void) // main - идентификатор функции

{

const int MAX=100; // MAX - идентификатор константы

int i=10; // i - идентификатор переменной

typedef int Vector[MAX]; // Vector - идентификатор типа

}

Значащими (различимыми для компилятора) являются первые n символов идентификатора, где n задается в среде программирования (обычно от 8 до 64 символов).

Например, верными будут являться идентификаторы "PupkinVasya", "my_height", "_inputfile", "parrots38" и неверными "Pupkin Vasya" (пробел недопустим), "38parrots" (начинается с цифры), "while" (совпадает с ключевым словом C++).

Для улучшения читаемости программы следует давать объектам осмысленные имена.

 

Ключевые слова

Ключевые слова – это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Список ключевых слов С++ приведен в таблице 1.

Таблица 1. Список ключевых слов С++

asm else new this
auto enum operator throw
bool explicit private true
break export protected try
case extern public typedef
catch false register typeid
char float reinterpret_cast typename
class for return union
const friend short unsigned
const_cast goto signed using
continue if sizeof virtual
default inline static void
delete int static_cast volatile
do long struct wchar_t
double mutable switch while
dynamic_cast namespace template  

Знаки операций

Знак операции – это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. Все знаки операций за исключением [ ], () и?: представляют собой отдельные лексемы.

Большинство стандартных операций может быть переопределено (перегружено).

Константы

Константами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду.

Форматы констант, соответствующие каждому типу, приведены в таблице 2.

Допустимые диапазоны значений целых и вещественных констант приведены в таблице 3.

Таблица 2. Константы в языке С++

Константа Формат Примеры
Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль 8, 0, 199226  
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7) 01, 020, 07155
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 0xA, 0x1B8, 0X00FF
Вещественная Десятичный: [цифры].[цифры] Могут быть опущены либо целая часть, либо дробная, но не обе сразу. 5.7,.001, 35.  
Экспоненциальный: [цифры][.][цифры]{E|e}[+|–][цифры] Могут быть опущены либо целая часть, либо дробная, но не обе сразу. Если указаны обе части, символ точки обязателен. 0.2E6,.11e–3, 5E10  
Символьная Один или два символа, заключенных в апострофы 'A', 'ю', '*', 'db', '\0', '\n', '\012', '\x07\x07'
Строковая   Последовательность символов, заключенная в кавычки "Здесь был Vasia", "\tЗначение r=\0xF5\n"

Если требуется сформировать отрицательную целую или вещественную константу, то перед константой ставится знак унарной операции изменения знака (–), например, –218, –5.8.

Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка. Мантисса записывается слева от знака экспоненты (E или e), порядок справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Обратите внимание, что пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.

Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип int.

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

· кодов, не имеющих графического изображения (например, \n – перевод курсора в начало следующей строки);

· символов апострофа ('), обратной косой черты (\), знака вопроса (?) и кавычки (");

· любого символа с помощью его 16-ричного или 8-ричного кода, например, \073, \0xF5.

Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или escape-последовательностями. Управляющая последовательность интерпретируется как одиночный символ.

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

"Никто не доволен своей внешностью, \

но все довольны своим умом"

полностью эквивалентна строке

"Никто не доволен своей внешностью, но все довольны своим умом"

В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0.

Комментарии

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

В программах на языке С++ комментарии выделяются двумя способами:

/* Весь текст, заключенный между двумя ограничителями такого

вида является комментарием. Это многострочный комментарий. */

// Комментарием является текст от такого ограничителя

// до конца строки.

// Это однострочный комментарий.

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

Внутри комментария можно использовать любые символы, допустимые на данном компьютере.

 

2. Структура программы на языке С++

Стадии прохождения программы

Объединенная единым алгоритмом совокупность описаний и операторов образует программу на алгоритмическом языке. При работе с языком С++ текст программы должен быть подготовлен в файле с расширением.cpp.

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

Рис. 2. Этапы создания исполняемой программы

Сначала программа передается препроцессору, который выполняет директивы, содержащиеся в ее тексте (например, #include – включение файла в текст программы).

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

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

2.2. Немного о функциях языка С++

Программа на языке С++ состоит из функций, описаний и директив препроцессора.

Функция – это самостоятельная единица программы, созданная для решения конкретной задачи.

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

Простейшее определение функции имеет следующий формат:

тип_возвращаемого_значения имя ([ параметры ])

{ операторы, составляющие тело функции }

Как правило, функция используется для вычисления какого-либо значения, поэтому перед именем функции указывается его тип. Если функция не должна возвращать значение, указывается тип void.

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

Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции.

2.3. Общая структура программы на С++

Общая структура программы на С++ такова:

#include <имя библиотеки 1>

#include <имя библиотеки 2>

...

#include "имя подключаемого файла 1"

#include "имя подключаемого файла 2"

...

// прототипы функций (заголовки)

// глобальные идентификаторы (типы, переменные и т.д.)

void main()

{

// описание переменных

// раздел операторов

}

// реализация функций

 

3. Типы данных С++. Переменные

Концепция типа данных

Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип.

Тип данных определяет:

· внутреннее представление данных в памяти компьютера;

· множество значений, которые могут принимать величины этого типа;

· операции и функции, которые можно применять к величинам этого типа.

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

Все типы языка С++ можно разделить на основные и составные. В языке С++ определено шесть стандартных основных типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.

Основные типы данных

Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова:

· int (целый);

· char (символьный);

· wchar_t (расширенный символьный);

· bool (логический);

· float (вещественный);

· double (вещественный с двойной точностью).

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

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:

· short (короткий);

· long (длинный);

· signed (знаковый);

· unsigned (беззнаковый).

Целый тип (int)

Размер типа int стандартом ANSI не определяется. Он зависит от реализации. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного – 4 байта.

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта. Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном – int и long int.

Внутреннее представление величины целого типа – целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 – положительное число, 1 – отрицательное). Спецификатор unsigned позволяет представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа. По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно упускать.

Константам, встречающимся в программе, приписывается тип в соответствии с их видом. Программист может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L имеет тип long и занимает 4 байта.

Примечание. Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed и unsigned соответственно.

Символьный тип (char)

Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера. Как правило, это 1 байт.

Тип char, как и другие целые типы, может быть со знаком или без знака.

В величинах со знаком можно хранить значения в диапазоне от –128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...