
- •Максимов м.Н.
- •3. Скалярные типы и выражения 51
- •5. Адреса, указатели, массивы, память 95
- •6. Функции, указатели, ссылки 132
- •7 Структуры, объединения и классы 170
- •Введение
- •Модуль 1
- •1.2. Этапы подготовки исполняемой программы
- •1.3. Системы счисления
- •Представление чисел от 0 до 16 в разных системах счисления
- •2.1. Общие сведения о программах, лексемах и алфавите
- •2.2. Идентификаторы и служебные слова
- •2.3. Типы данных
- •2.4. Константы
- •Типы, выбираемые компилятором по умолчанию для целых констант
- •Данные вещественного типа
- •2.5. Операции
- •2.6. Разделители
- •3. Скалярные типы и выражения
- •3.1. Определение и описание переменных
- •3.2. Явное и неявное преобразование типа
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Модуль 2
- •4.1. Последовательно выполняемые операторы
- •4.2. Операторы выбора
- •If( выражение) оператор_1 else оператор_2
- •If( выражение) оператор_1
- •4.3. Операторы цикла
- •4.4. Операторы передачи управления
- •If (условие) break;
- •4.5. Примеры численного моделирования цепей первого порядка
- •5. Адреса, указатели, массивы, память
- •5.1. Указатели и адреса объектов
- •5.2. Адресная арифметика, типы указателей и операции над ними
- •5.3. Свойства указателя типа void*
- •5.4. Свойства объекта cout
- •5.5. Массивы и указатели
- •5.6. Многомерные массивы, массивы указателей, динамические массивы
- •Проектные задания к модулю
- •Тесты рубежного контроля
- •6.2. Функции с переменным количеством параметров
- •6.3. Рекурсивные функции
- •6.4. Подставляемые (инлайн-) функции
- •6.5. Функции и массивы
- •6.6. Указатели на функции
- •Void f3(float) (...) // Определение функции
- •Int* f4(char *){...} // Определение функции
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Модуль 4
- •7 Структуры, объединения и классы
- •7.1 Структура как тип и совокупность данных
- •7.3 Объединения разнотипных данных
- •7.4 Деревья
- •7.5 Битовые поля структур и объединений
- •7.6 Компонентные функции структурированных объектов
- •7.7 Расширение действия (перегрузка) стандартных операций
- •7.8 Доступ к компонентам структурированного объекта
- •7.9 Классы и шаблоны
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Приложение 1
- •Приложение 2 Стандартная библиотека функций языка Си
Данные вещественного типа
Тип данных |
Диапазон значений |
float |
от 3.4Е-38 до 3.4Е+38 |
double |
от 1.7Е-308 до 1.7Е+308 |
long double |
от 3.4Е-4932 до 3.4Е+4932 |
Примеры различных вариантов записи вещественной константы единица.
1.0Е+0, 1.0, 1., 1Е+0, 0.1e+1; /* вещественные единицы типа double*/
1.0Е+0l, 1.0l, 1.l, 1Е+0l, 0.1e+1l;/* вещественные единицы типа long double*/
1.0Е+0f, 1.0f, 1.f, 1Е+0f, 0.1e+1f; /* вещественные единицы типа float*/
Перечислимые константы вводятся с помощью служебного слова enum. По существу это обычные целочисленные константы (типа int), которым приписываются уникальные и удобные для использования обозначения. В общем виде перечислимые константы определяются следующим образом:
enum [ имя типа] { имя1 [=инициализатор] ,
имя2 [=инициализатор], … , имяN [=инициализатор]};
где имя1, имя2,…, имяN – произвольные идентификаторы, не совпадающие со служебными словами и именами других объектов программы. В квадратные скобки заключены элементы перечисления, которые могут быть опущены. Если в определении перечисляемых констант опустить = инициализатор, то они будут приписываться идентификаторам по умолчанию. При этом самый левый в фигурных скобках идентификатор получит значение 0, а каждый последующий увеличивается на единицу.
Этот порядок можно нарушить, присвоив с помощью инициализатора любое целое значение константе. В этом случае, если последующая за ней константа не имеет явного инициализатора, то она получит значение на единицу больше, чем предыдущая. Пример перечисляемых констант:
enum { zero, one, two, ten = 10, eleven, five = 5, six, sss };
Перечисляемые константы zero, one, two, ten, eleven, five, six, sss в соответствии с описанными выше правилами получили следующие значения: zero == 0, one == 1, two == 2, ten == 10, eleven ==11, five == 5, six ==6, sss == 7.
Символьные (литерные ) константы – это один или два символа, заключённые в апострофы (‘ ‘). Односимвольные константы имеют стандартный тип char. Примеры односимвольных констант ‘x’, ‘Z’, примеры двухсимвольных констант ‘DS’, ‘Sa’. Кроме приведенных выше примеров существует ещё один способ записи символьных констант. Это последовательность символов, начинающихся со знака ‘\’, которую называют Esc-последовательностью. Примеры символьных констант (Esc последовательностей) ‘\n’, ‘\0’, ‘\012’, ‘\x07\x07’, ‘\n\t’. Таблица допустимых в языке Си++ Esc – последовательностей приведена ниже.
Таблица 2.4
Допустимые Esc-последовательности в языке Си++.
N |
Изобра- жение |
Внутрен- ний код |
Обозначаемый символ (название) |
Значение или реакция |
1 |
\а |
0x07 |
Bel (audible bell) |
Звуковой сигнал |
2 |
\b |
0x08 |
Bs (backspace) |
Возврат на шаг (забой) |
3 |
\f |
0x0c |
Ff (form feed) |
Перевод страницы (формата) |
4 |
\n |
0x0a |
Lf (line feed) |
Перевод строки (новая строка) |
5 |
\r |
0x0d |
Cr (carriage return) |
Возврат каретки |
6 |
\t |
0x09 |
Ht (horizontal tab) |
Табуляция горизонтальная |
7 |
\v |
0x0b |
Vt (vertical tab) |
Табуляция вертикальная |
8 |
\\ |
0x5c |
\ (backslash) |
Обратная косая черта |
9 |
\’ |
0x27 |
‘ (single quote) |
Апостроф ( одиночная кавычка) |
10 |
\” |
0x22 |
“ (double quote) |
Двойная кавычка |
11 |
\? |
0x3f |
? (question mark) |
Вопросительный знак |
12 |
\000 |
000 |
(Octal number) |
Восьмеричный код символа |
13 |
\xhh |
0xhh |
(hex number) |
Шестнадцатеричный код символа |
Первые семь Esc – последовательностей таблицы являются управляющими кодами для устройств с посимвольным интерфейсом (принтер, монитор и т.д.). Они не отображаются в тексте и вообще не имеют графического представления. Но когда принтер или монитор выводит на экран текст и в нем встречаются два байта с кодом 0x0d, 0x0a (\r\n), то вместо вывода символов на экран они выполняют команды перейти к началу текущей строки и перейти на новую строку. То есть, вставляя в нужных местах текста, управляющие Esc – последовательности, мы можем форматировать текст на экране монитора или на распечатке принтера так, как считаем нужным.
Необходимость в 8 – 11 Esc-последовательностях возникает, когда требуется использовать символы \, ‘, “, ? в тексте программы. Действительно, если в символьной строке встречается один символ \, то он воспринимается не как символ косой черты \, а как признак начала Esc – последовательности. Поэтому, если в программе необходимо написать строку, содержащую путь к файлу, например “С:\BC\BIN\bc.exe”, то правильно её будет записать так “C:\\BC\\BIN\\bc.exe”, воспользовавшись Esc – последовательностью ‘\\’.
Последние два варианта записи Esc-последовательности \000 и \хhh позволяют задать символ с помощью его кода в восьмеричном или шестнадцатеричном представлении. Дело в том, что каждый символ в памяти компьютера хранится в виде однобайтового числа (кода). Соответствие между кодом и символом устанавливается по так называемым табл. ASCII кодов (приложение 1). Так символу W по табл. ASCII кодов соответствует код 87, который в восьмеричной или шестнадцатеричной системе счисления записывается как 127 и 57 соответственно. Поэтому символ W можно записать в программе несколькими способами как ‘W’ или с помощью Esc-последовательностей, как ‘\125’ или '\х57'.
Необходимо отметить, что табл. ASCII 866 для MS-DOS отличается от табл. ASCII 1251 для MS Windows. Так, например, символ ‘Ф’ в ASCII 866 имеет код 148, а ASCII 1251 – код 212. Именно поэтому текст, набитый в редакторе под DOS, не может быть прочитан без перекодировки в текстовых редакторах под Windows.
Строка или строковая константа, иногда называемая литерной строкой, определяется как последовательность символов, заключённых в кавычки “ ” (не в апострофы):
Пример строки:
“Это строка, называемая также строковой константой”
Среди символов строки могут использоваться ESC-последовательности. В этом случае, как и в представлениях отдельных символов, они начинаются с обратной косой черты \.
//Программа 1.2
#include "stdafx.h"
#include <iostream>
void main(){
std::cout<<"\n This is a string, \nor - \" string \",\
\n or - ";
std::cout<<"\"literal string \".";
getchar();
}
При выводе на экран дисплея этих строк Esc-последовательности ‘\n’ и ‘\”’ обеспечат такое размещение информации.
This is a string,
or- “string”,
or – “literal string”.
При использовании строк в программе необходимо помнить, что компилятор в конец строки по умолчанию добавляет один бай с кодом х00 (нулевой байт) или, как говорят, нулевой символ ‘\0’ (‘\000’, ‘\x00’). Поэтому длина в байтах любой строки всегда на единицу больше, чем число символов в ней присутствующих.
Пример:
“”;//– пустая строка, содержащая только один символ ‘\0’.
“Это строка”;/ десять символов включая пробел плюс символ ‘\0’ итого одиннадцать/
“\tЭто строка” /*Как уже говорилось, Esc-последовательность, в данном случае ‘\t’, хотя и записывается в виде двух символов, но на самом деле является одним символом (байтом), поэтому длина этой строки двенадцать байт.*/