- •Максимов м.Н.
- •3. Скалярные типы и выражения 51
- •5. Адреса, указатели, массивы, память 96
- •6. Функции, указатели, ссылки 133
- •7 Структуры, объединения и классы 171
- •Введение
- •Модуль 1
- •1.2. Этапы подготовки исполняемой программы
- •1.3. Системы счисления
- •Представление чисел от 0 до 16 в разных системах счисления
- •2.1. Общие сведения о программах, лексемах и алфавите
- •2.2. Идентификаторы и служебные слова
- •2.3. Типы данных
- •2.4. Константы
- •Типы, выбираемые компилятором по умолчанию для целых констант
- •ZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzТаблица 2.3 Данные вещественного типа
- •2.5. Операции
- •2.6. Разделители
- •3. Скалярные типы и выражения
- •3.1. Определение и описание переменных
- •3.2. Явное и неявное преобразование типа
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Модуль 2
- •4.1. Последовательно выполняемые операторы
- •4.2. Операторы выбора
- •If( выражение) оператор_1 else оператор_2
- •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 Стандартная библиотека функций языка Си
5. Адреса, указатели, массивы, память 96
5.1. Указатели и адреса объектов 96
5.2. Адресная арифметика, типы указателей и операции над ними 98
5.3. Свойства указателя типа void* 109
5.4. Свойства объекта cout 111
5.5. Массивы и указатели 112
5.6. Многомерные массивы, массивы указателей, динамические массивы 116
ПРОЕКТНЫЕ ЗАДАНИЯ К МОДУЛЮ 127
ТЕСТЫ РУБЕЖНОГО КОНТРОЛЯ 128
Квалиметрическая оценка 132
Список Литературы 132
Модуль 3 132
6. Функции, указатели, ссылки 133
6.1. Определение, описание и вызов функции 133
6.2. Функции с переменным количеством параметров 139
6.3. Рекурсивные функции 143
6.4. Подставляемые (инлайн-) функции 145
6.5. Функции и массивы 147
6.6. Указатели на функции 160
Проектные задания 167
Тесты рубежного контроля 168
Квалиметрическая оценка 170
МОДУЛЬ 4 171
7 Структуры, объединения и классы 171
7.1 Структура как тип и совокупность данных 172
7.2 Реализация линейного списка на языке СИ++ 180
7.3 Объединения разнотипных данных 188
7.4 Деревья 191
7.5 Битовые поля структур и объединений 194
7.6 Компонентные функции структурированных объектов 198
7.7 Расширение действия (перегрузка) стандартных операций 208
7.8 Доступ к компонентам структурированного объекта 214
7.9 Классы и шаблоны 219
Проектные задания 222
Тесты рубежного контроля 223
Квалиметрическая оценка 227
список ЛИТЕРАТУРЫ 227
ПРИЛОЖЕНИЕ 1 228
Таблицы кодов ASCII 228
ПРИЛОЖЕНИЕ 2 234
Стандартная библиотека функций языка Си 234
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Введение
Язык программирования Си++ был разработан на основе языка Си Бьярном Страуструпом (Bjarne Stroustrup, США) в начале 80-х годов. И с тех пор прочно занял одно из лидирующих мест среди алгоритмических языков программирования. Это в первую очередь объясняется тем, что автору удалось, с одной стороны, сохранить преемственность языков Си и Си++ (в программах на языке Си++ можно использовать тексты на языке Си и обращаться к библиотечным функциям языка Си), а с другой стороны, реализовать в нём поддержку концепции абстракции данных и технологии объектно-ориентированного программирования.
С начала 80-х годов язык Си++ непрерывно развивался и совершенствовался. В 1985 и в 1989 годы вышли первая и вторая коммерческие версии языка и в 1998 году был ратифицирован его стандарт. В стандарт вошли такие нововведения как стандартная библиотека шаблонов (STL), пространство имён (namespaces), механизм идентификации типов во время выполнения (RTTI), явное приведение типов (cast – операторы ) и другие, которых не было в предыдущих версиях языка. Необходимо отметить, что стандарт добавил к языку новые возможности, но не вычеркнул из него хорошо зарекомендовавшие себя базовые основополагающие механизмы, изложению которых и посвящено данное пособие.
Модуль 1
Цель данного модуля является познакомить студентов с лексическими основами языка Си++, со средой программирования и основными типами данных.
1. НЕФОРМАЛЬНОЕ ВВЕДЕНИЕ В ЯЗЫК СИ++
1.1. Простые программы на языке Си++
Следуя традициям, напишем первую программу на языке Си++, выводящую на экран монитора строку «Здравствуй Мир!».
//Программа 1.1 hello.cpp //1
#include "stdafx.h" //Не обязательная строка
#include <iostream> //2
void main(){ //3
std::cout<<"\n Hello World!"; //4
getchar(); //
}
Первая строка программы является комментарием. Комментарии в языке Си++ могут быть однострочными и многострочными. Однострочные комментарии вводятся с помощью двух символов //, и все, что стоит после них в строке программы, воспринимается компилятором как комментарий. Пример:
//Это однострочный комментарий.
Многострочным комментарием в программе является всё, что расположено между символами \* *\. Пример:
\* Это многострочный
комментарий *\
Вторая строка программы начинается с символа #. Этот символ сообщает компилятору, что за ним следует директива препроцессора. В данном случае include (вставить). С помощью этой директивы в текст программы вставляется содержимое текстового файла iostream.h. Текстовые файлы с расширением *.h принято называть в языке Си++ заголовочными файлами. Вид скобок < >, в которые заключён заголовочный файл iostream.h, информирует компилятор о том, что этот файл является библиотечным и, следовательно, должен находится в директории INCLUDE. Библиотечный заголовочный файл iostream.h включён в текст программы, для того чтобы проинформировать компилятор, что идентификатор cout (а также cin, сerr и др.) является объектом класса iostream. Сейчас нет необходимости подробно останавливаться на классах. Поэтому просто необходимо запомнить, что для того чтобы с помощью объекта cout и его операции (<<) вывести на экран информацию, необходимо с помощью директивы include включить в текст программы заголовочный файл iostream.h.
Любая программа, написанная на языке Си++, начинается с выполнения операторов функции с именем main (или WinMain). Функция с таким именем должна быть единственной во всём тексте программы. Синтаксис определения любой функции, в том числе и функции main, задаётся следующими правилами:
тип_функции имя_функции(список формальных параметров) { тело функции}
где тип_функции – тип возвращаемого в точку вызова функцией значения (в нашем примере тип функции main void ); имя_функции – в общем случае определяется пользователем (в данном примере определена только одна функция – main); список формальных параметров список типов данных, передаваемых функции (в данном примере отсутствует); тело функции – последовательность заключённых в фигурные скобки операторов, реализующих алгоритм работы программы на языке Си++ (в нашем примере тело функции представлено одним оператором, реализующим вывод строки на экран монитора).
В четвёртой строке программы с помощью объекта cout и перегруженной операции << осуществляется вывод строковой константы ”\n Здравствуй Мир” на экран монитора. В общем случае с помощью объекта cout на экран монитора можно выводить константы, значения переменных, значения выражений. Например:
cout<<”\n 5+3 = “<<(5+3);.
И в последней пятой строке программы стоит закрывающая фигурная скобка, которая обозначает конец тела функции main. По достижению этой точки программа завершает свою работу.