Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование на языке C++

Покупка
Новинка
Артикул: 834485.01.99
Доступ онлайн
1 000 ₽
В корзину
В курсе изучаются основы программирования на языке C++. В лекциях кратко изложены основные особенности языка С++ в соответствии со стандартом ISO/IEC 14882 (2003). Для написания программ во время обучения можно использовать, компилятор gcc или среду Microsoft Visual C++ 2005 Express Edition.
Павловская, Т. А. Программирование на языке C++ : краткий курс / Т. А. Павловская. - Москва : ИНТУИТ, 2016. - 116 с. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2156685 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов

                                    
Программирование на языке C++

2-е издание, исправленное

Павловская Т.А.

Национальный Открытый Университет “ИНТУИТ”
2016

2

Программирование на языке C++/ Т.А. Павловская - М.: Национальный Открытый Университет
“ИНТУИТ”, 2016

В курсе изучаются основы программирования на языке C++.
В лекциях кратко изложены основные особенности языка С++ в соответствии со стандартом ISO/IEC
14882 (2003). Для написания программ во время обучения можно использовать, компилятор gcc или
среду Microsoft Visual C++ 2005 Express Edition.

(c) ООО “ИНТУИТ.РУ”, 2010-2016
(c) Павловская Т.А., 2010-2016

3

Основные понятия языка

Вводятся базовые для всего дальнейшего изложения понятия: из каких простейших
“кирпичиков” состоят все тексты на языке программирования, что понимают под
типом данных, какие встроенные типы данных есть в языке C++.

Предисловие

Этот курс лекций построен на основе учебника автора “C/C++. Программирование на
языке высокого уровня” [18], который выпускается издательством ПИТЕР с 2001 года
по настоящее время. Учебнику был присвоен гриф Министерства образования
Российской Федерации, он входит в списки рекомендуемой литературы во многих
вузах России и ближнего зарубежья. Материалы учебника, вошедшие в этот курс,
подверглись частичному обновлению и переработке. В 2010 году учебник был
удостоен премии Правительства Санкт-Петербурга “За выдающиеся достижения в
сфере высшего и профессионального образования” в составе учебно-методического
комплекса по языкам программирования.

В этот комплекс входят также практикум по C/C++ [19] и учебники по языкам C# и
Паскаль [20, построенные по единому принципу. Соответствующие учебные курсы
можно найти на этом сайте. В комплекс входит более 250 индивидуальных вариантов
заданий на лабораторные работы в расчете на учебную группу из 20 человек (все
варианты можно найти в учебнике [18]) и более 1000 тестовых вопросов.
Преподавателям будут полезны презентации лекций. На сайте интернет-школы
программирования ссылка: http://ips.ifmo.ru - http://ips.ifmo.ru можно проверить
правильность выполнения некоторых лабораторных работ с помощью системы
автоматического тестирования программ.

Целью этого курса является краткое и четкое изложение основных особенностей языка
С++ в соответствии со стандартом ISO/IEC 14882 (2003). Для написания программ во
время обучения вы можете использовать, например, компилятор gcc или среду
Microsoft Visual C++ 2005 Express Edition. Эти программные продукты
распространяются бесплатно и достаточно хорошо поддерживают стандарт.

Доброжелательную и конструктивную критику, а также предложения по улучшению
курса направляйте автору по адресу pta-ipm@yandex.ru.

Состав языка

Презентацию к лекции Вы можете скачать ссылка: здесь http://old.intuit.ru/department/pl/hlprogcpp/1/L01.ppt.

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

4

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

Все тексты на языке пишутся с помощью его алфавита. Алфавит C++ включает:

прописные и строчные латинские буквы и символ подчеркивания (_), который
употребляется наряду с буквами;
арабские цифры от 0 до 9;
специальные символы, например +, *, { и &;
пробельные символы - пробел, символы табуляции, символы перевода строки и
формата.

Алфавит языка в стандарте называется базовым набором символов. Кроме того,
существует понятие ” набор символов реализации ” - все множество символов,
доступных на данном компьютере. Этот набор содержит базовый набор в качестве
подмножества.

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

Лексемы

Существуют следующие виды лексем:

имена (идентификаторы);
ключевые слова;
знаки операций;
разделители;
литералы (константы).

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

Лексемы языка программирования аналогичны словам естественного языка. Например,
лексемами являются константа 128 (но не ее часть 12), имя Vasia, ключевое слово goto
и знак операции сложения +. Из лексем составляются выражения и операторы.

Выражение задает правило вычисления некоторого значения. Например,
выражение a + b задает правило вычисления суммы величин a и b.
Оператор задает законченное описание некоторого действия.

Операторы делят на исполняемые и неисполняемые, простые и составные.
Исполняемые операторы задают действия над данными. Неисполняемые операторы
служат для описания данных, поэтому их часто называют операторами описания или
просто описаниями. Например, int a ; - это оператор описания целочисленной

5

переменной a.

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

Каждый элемент языка определяется синтаксисом и семантикой. Синтаксические
определения устанавливают правила построения элементов языка, а семантика
определяет их смысл и правила использования.

Объединенная единым алгоритмом совокупность описаний и операторов образует
программу.

Путь от текста программы к исполняемому коду

Чтобы выполнить программу, требуется перевести ее на язык, понятный процессору - в
машинные коды. Этот процесс состоит из нескольких этапов.

Сначала исходный текст программы обрабатывается препроцессором. Он разыскивает
в тексте программы “свои” директивы (инструкции, команды), которые начинаются с
символа # (“решетка”), и выполняет их. Директивы препроцессора позволяют вставить
в программу тексты из других файлов, исключить из процесса компиляции фрагменты
кода или выполнить замену одних фрагментов другими.

Обработанный препроцессором текст программы (в стандарте С++ он называется
“единица компиляции“) передается компилятору, который выполняет лексический и
синтаксический анализ. На фазе лексического анализа лексический анализатор ( сканер
) последовательно просматривает поступающий на его вход поток символов,
составляющих исходный текст программы, и выделяет допустимые лексемы. Их
границы определяются по разделителям, пробельным символам и другим лексемам.

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

Если ошибок в программе не обнаружено, выполняется фаза генерации
кода.Конкретный вид кода зависит от того, приложение какого типа мы создаем:

Windows или . NET. Если это обычное приложение Windows, то строится объектный
модуль - заготовка исполняемой программы в машинных кодах. Для приложения . NET
формируется код на системно-независимом языке CIL.

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

6

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

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

Описание синтаксических конструкций

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

[ { void | int } ] имя();

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

Рассмотрим лексемы языка С++.

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

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

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

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

СОВЕТ

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

7

например, 1, l и I (единица, строчная L и прописная i ).

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

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

asm
do
if
return
typedef

auto
double
inline
short
typeid

bool
dynamic _ cast int
signed
typename

break
else
long
sizeof
union

case
enum
mutable
static
unsigned

catch
explicit
namespace static_cast using

char
export
new
struct
virtual

class
extern
operator
switch
void

const
false
private
template
volatile

const_cast float
protected this
wchar_t

continue
for
public
throw
while

default
friend
register
true

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

Знак операции - это один или более символов, определяющих действие над
операндами. Внутри знака операции пробелы не допускаются. Символы, составляющие
знак операции, могут быть как специальными, например, &&, | и <, так и буквенными,
такими как reinterpret_cast или new.

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

Константы

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

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

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

Константа
Формат
Примеры

Логическая
Обозначается ключевым словом true или false
true, false

Целая
Десятичный: последовательность десятичных цифр, 8, 0, 199226

8

начинающаяся не с нуля, если это не число нуль
Восьмеричный: нуль, за которым следуют
восьмеричные цифры (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, 0X00ff

Вещественная Десятичный: [цифры].[цифры]
5.7, 0.001, 35

Экспоненциальный: [цифры][.][цифры]{E|e}[+|-]
[цифры]

0.2E6, .11e-3,
5E10, 1.22E-10

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

‘A’, ‘ю’, ‘*’, ‘db‘,
‘A’, ‘\n’, ‘\012’,
‘\x07\x07’

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

“Здесь был Vasia”,
“\tСумма =\xF5\n”

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

Таблица 1.2. Диапазоны значений основных типов данных для

IBM PC

Тип
Диапазон значений
Размер (байт)

bool
true и false
1

signed char
-128 … 127
1

unsigned char
0 … 255
1

signed short int
-32 768 … 32 767
2

unsigned short int 0 … 65 535
2

signed int
-2 147 483 648 … 2 147 483 647 4

unsigned int
0 … 4 294 967 295
4

signed long int
-2 147 483 648 … 2 147 483 647 4

unsigned long int 0 … 4 294 967 295
4

float
3.4e-38 … 3.4e+38
4

double
1.7e-308 … 1.7e+308
8

long double
3.4e-4932 … 3.4e+4932
10

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

Вещественная константа в экспоненциальном формате представляется в виде мантиссы
и порядка. Значение константы определяется как произведение мантиссы и
возведенного в указанную в порядке степень числа 10 (например, 1.3e12 это 1,3 * 1012).
При записи вещественного числа могут быть опущены либо целая часть, либо дробная,
но, конечно, не обе сразу. Пробелы внутри числа не допускаются.

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

9

Если перед символьным литералом указан символ L, то литерал называется
широким.Если L отсутствует, литерал называется обычным, или узким. Обычный
символьный литерал имеет тип char, широкий - тип wchar_t (о типах - далее в этой
лекции).

Некоторые символы набора реализации являются непечатаемыми.Они предназначены
для управления процессом отображения печатаемых символов на экране или принтере.
Для представления в программе непечатаемых символов используется управляющая
последовательность ( escape sequence ) -последовательность символов, начинающаяся
с обратной косой черты \ ( backslash ). Кроме того, символы ‘ (апостроф), ” (кавычки),
? (вопрос) и сама обратная косая черта являются специальными символами и также
представляются в виде управляющих последовательностей.

В общем виде управляющая последовательность может быть задана в двух формах:

\000

\xhhh

Здесь 000 представляет собой последовательность от одной до трех восьмеричных
цифр, а hhh - последовательность от одной до трех шестнадцатеричных цифр, которая
задает код символа. При выводе кода символа на принтер или экран вместо кода
изображается печатаемый символ или выполняется определяемое кодом действие
(например, перевод курсора на следующую строку).

Допустимые значения кодов ooo ( hhh ) определяются реализацией. Коды обычных
символов и широких символов различаются. Нулевой символ ‘\0’ (L’\0’ для широких)
является обязательным в составе набора символов реализации, поскольку играет
особую роль в представлении строковых литералов.

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

“Издательский дом "Питер"”

Тем не менее, апостроф разрешается задавать без обратной косой черты, например:

“Издательский дом ‘Питер’”

Строковые константы, отделенные в программе только пробельными символами, при
компиляции объединяются в одну.

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

10

Доступ онлайн
1 000 ₽
В корзину