Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКДО_СистПрог_2016.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆
  1. Тезисы лекций

Лекция 1. Состав языка C++. Типы данных C++

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

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

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

  • прописные и строчные латинские буквы и символ подчеркивания (_), который употребляется наряду с буквами;

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

  • специальные символы, например +, *, { и &;

  • пробельные символы - пробел, символы табуляции, символы перевода строки и формата.

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

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

Лексемы

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

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

  • ключевые слова;

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

  • разделители;

  • литералы (константы).

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

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

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

Оператор задает законченное описание некоторого действия.

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

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

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

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

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

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

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

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

  • не рекомендуется начинать идентификаторы с символа подчеркивания;

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

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

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

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

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

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

Константы

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

Таблица 1.1. Константы языка С++Константа Формат Примеры

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

Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль 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, 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

Директивы препроцессора и комментарии

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

#include "myfile"

в текст программы будет вставлено содержимое так называемого заголовочного файла с именем myfile. Заголовочные файлы содержат различную информацию, необходимую для успешной компиляции программы.

Комментарии предназначены для записи пояснений к программе. В С++ есть два вида комментариев: однострочные и многострочные. Первый вид начинается с двух символов // ("прямая косая черта") и занимает одну строку. Второй вид комментариев начинается с двух символов /* и завершается двумя символами */.

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

Типы данных С++

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

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

  • множество их возможных значений (связанное с внутренним представлением данных в памяти компьютера);

  • допустимые действия над данными (операции и функции).

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

Объем памяти, выделяемый для величин, тоже зависит от типа. По стандарту единицей памяти в С++ является байт.

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

Рисунок 1.1 помогает окинуть взглядом все разнообразие типов данных, определенных в стандарте языка С++.

Рис. 1.1. Типы данных стандартного С++

Базовые типы данных

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

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

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

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

int (целый);

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

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

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

Существует четыре ключевых слова, уточняющих внутреннее представление и диапазон значений стандартных типов: short (короткий); long (длинный); signed (знаковый); unsigned (беззнаковый).

Сочетания перечисленных ключевых слов формируют 14 различных арифметических типов, приведенных на рис. 1.1. Например, char, signed char и unsigned char - это три равноправных различных типа.

Логический тип

Величины логического типа могут принимать только значения true и false, являющиеся ключевыми словами. Величины логического типа могут участвовать в арифметических операциях. При преобразовании к целому типу true имеет значение 1, false - нуль. Размер логического типа в стандарте не определен и зависит от реализации.

Символьные типы

В стандарте языка определено три различных символьных типа: char, signed char и unsigned char. Внутренним представлением символа является его код - целое число. Под величину любого символьного типа отводится одна единица памяти - байт:

sizeof(char) = sizeof(signed char) = sizeof(unsigned char) = 1

Размер байта зависит от реализации, однако этот размер должен быть достаточен, чтобы вместить код любого символа из набора символов реализации для данного компьютера. Наличие знака у типа char тоже зависит от реализации: он может совпадать либо с signed char, либо с unsigned char.

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

Целые типы

В языке С++ определено 8 типов для хранения целочисленных величин: четыре знаковых ( signed char, short int, int, long int ) и четыре беззнаковых ( unsigned char, unsigned short int, unsigned int, unsigned long int ). По умолчанию все целочисленные типы считаются знаковыми, поэтому спецификатор signed можно не указывать. Ключевое слово unsigned позволяет представлять неотрицательные целые числа.

Типы с плавающей точкой

Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и long double. Все они имеют знак.

Внутреннее представление вещественного числа состоит из мантиссы и порядка. Длина мантиссы определяет точность числа, а длина порядка - его диапазон.

Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f ( float ) и L, l ( long ). Например, константа 2E+6L имеет тип long double.

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

Тип void

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