Аннотация
В данном курсе изучаются основные понятия языков С и С++ на базе процедурно-ориентированного подхода. Как и при изучении любого языка программирования в курсе предусмотрен начальный (интенсивный) этап знакомства с базовыми понятиями языка. На этом этапе происходит адаптация к нетривиальному (в отличие от других высокоуровневых языков) синтаксису языков С и С++, определяющему их широкие возможности.
Данная программа готовит к сертификационному экзамену CLA.
В данном курсе изучаются основные понятия языков С и С++ на базе процедурно-ориентированного подхода. Как и при изучении любого языка программирования в курсе предусмотрен начальный (интенсивный) этап знакомства с базовыми понятиями языка. На этом этапе происходит адаптация к нетривиальному (в отличие от других высокоуровневых языков) синтаксису языков С и С++, определяющему их широкие возможности.
Данная программа готовит к сертификационному экзамену CLA.
Необходимая предварительная подготовка:
• Элементарные понятия архитектуры персонального компьютера.
• Базовые знания о архитектуре операционных систем, системного и прикладного программного обеспечения.
• Знакомство с двоичной, восьмеричной и шестнадцатеричной системами счисления.
• Умение формализовать решаемую задачу (наличие алгоритмического мышления).
• Приветствуется (но не обязателен) опыт разработки простых программ на любом языке программирования.
• Знание английского языка ускоряет получение контекстной справочной информации.
• Знания в объеме курса [CPP-01] Основы алгоритмизации и программирования.
• Элементарные понятия архитектуры персонального компьютера.
• Базовые знания о архитектуре операционных систем, системного и прикладного программного обеспечения.
• Знакомство с двоичной, восьмеричной и шестнадцатеричной системами счисления.
• Умение формализовать решаемую задачу (наличие алгоритмического мышления).
• Приветствуется (но не обязателен) опыт разработки простых программ на любом языке программирования.
• Знание английского языка ускоряет получение контекстной справочной информации.
• Знания в объеме курса [CPP-01] Основы алгоритмизации и программирования.
Программа
1. Введение.
• Стандарт языка С++ С++11. Краткий обзор аспектов языка и технологий программирования, рассматриваемых в данном курсе, а также вопросов, не входящих в курс (выносимых для самостоятельного изучения).
• Общие принципы структурного программирования, их реализация средствами С/С++.
• Структура С-программы. Модульность. Раздельная компиляция. Функциональная декомпозиция. Функции С++ вообще и функция main() в частности. Блоки кода – составляющая часть структурного программирования. Оформление текста программы.
• Ключевые слова С++. Идентификаторы.
• L_Value, R_Value и низкоуровневые объекты С++. Операторы С++.
• Приоритет и ассоциативность операторов. Обзор категорий операторов языка С. Примеры использования. Специфика использования.
• Данные. Константы (литералы).
• Виды литералов. Целые литералы. Литералы с плавающей точкой.
1. Введение.
• Стандарт языка С++ С++11. Краткий обзор аспектов языка и технологий программирования, рассматриваемых в данном курсе, а также вопросов, не входящих в курс (выносимых для самостоятельного изучения).
• Общие принципы структурного программирования, их реализация средствами С/С++.
• Структура С-программы. Модульность. Раздельная компиляция. Функциональная декомпозиция. Функции С++ вообще и функция main() в частности. Блоки кода – составляющая часть структурного программирования. Оформление текста программы.
• Ключевые слова С++. Идентификаторы.
• L_Value, R_Value и низкоуровневые объекты С++. Операторы С++.
• Приоритет и ассоциативность операторов. Обзор категорий операторов языка С. Примеры использования. Специфика использования.
• Данные. Константы (литералы).
• Виды литералов. Целые литералы. Литералы с плавающей точкой.
2. Переменные
• Символьные литералы. Способы кодирования символов. UNICODE. Управляющие последовательности. Строковые литералы.
• Перечисление (ENUM). Специфика использования.
• Переменные. Фундаментальные типы языка С++. Размеры объектов и оператор sizeof. Размеры объектов базовых типов и шаблон numeric_limits.
• Знаковость переменной. Приведение типов. Правила неявного приведения типов. Новые операторы явного приведения типов. Тип wchar_t. BOOL и bool.
• Объявление и определение переменной. Ключевое слово typedef. Понятия, связанные с переменными.
• Способы использования переменных и типы компоновки. Размещение переменных и время существования переменных. Ключевое слово static.
• Символьные литералы. Способы кодирования символов. UNICODE. Управляющие последовательности. Строковые литералы.
• Перечисление (ENUM). Специфика использования.
• Переменные. Фундаментальные типы языка С++. Размеры объектов и оператор sizeof. Размеры объектов базовых типов и шаблон numeric_limits.
• Знаковость переменной. Приведение типов. Правила неявного приведения типов. Новые операторы явного приведения типов. Тип wchar_t. BOOL и bool.
• Объявление и определение переменной. Ключевое слово typedef. Понятия, связанные с переменными.
• Способы использования переменных и типы компоновки. Размещение переменных и время существования переменных. Ключевое слово static.
3. Директивы
• Область видимости переменных. "Скрытие" имени переменной.
• Оператор разрешения области видимости. Пространства имен. Директива using. Пространство имен стандартной библиотеки. Неименованные пространства имен. Псевдонимы пространств имен.
• Инициализация переменных.
• Модификаторы const и volatile.
• Инструкции. Категории инструкций. Инструкции выбора. Инструкции цикла. Инструкции безусловного перехода.
• Директивы препроцессора.
• Директива #define. Предопределенные макросы. Диагностические макросы. Рекомендации.
• Директива #undef.
• Директивы #ifdef, #ifndef, #else, #endif.
• Директивы #if, #elif, #else, #endif. Оператор препроцессора defined.
• Концепция разделения кода на интерфейс и реализацию.
• Заголовочные файлы. Директива препроцессора #include. Стратегии включения заголовочных файлов. Формы директивы #include.
• Предкомпиляция заголовочных файлов. Защита от «вложенных» включений заголовочных файлов. Заголовочные файлы стандартной библиотеки.
• Область видимости переменных. "Скрытие" имени переменной.
• Оператор разрешения области видимости. Пространства имен. Директива using. Пространство имен стандартной библиотеки. Неименованные пространства имен. Псевдонимы пространств имен.
• Инициализация переменных.
• Модификаторы const и volatile.
• Инструкции. Категории инструкций. Инструкции выбора. Инструкции цикла. Инструкции безусловного перехода.
• Директивы препроцессора.
• Директива #define. Предопределенные макросы. Диагностические макросы. Рекомендации.
• Директива #undef.
• Директивы #ifdef, #ifndef, #else, #endif.
• Директивы #if, #elif, #else, #endif. Оператор препроцессора defined.
• Концепция разделения кода на интерфейс и реализацию.
• Заголовочные файлы. Директива препроцессора #include. Стратегии включения заголовочных файлов. Формы директивы #include.
• Предкомпиляция заголовочных файлов. Защита от «вложенных» включений заголовочных файлов. Заголовочные файлы стандартной библиотеки.
4. Указатели и массивы
• Понятие указателя. Объявление переменной – указателя. Инициализация указателя и оператор получения адреса переменной. Разыменование указателя. Арифметика указателей. Нулевой указатель. void – указатель.
• Указатель и ключевое слово const. Преобразование типа указателя.
• Оператор reinterpret_cast.
• Понятие массива. Встроенные массивы. Объявление массива.
• Инициализация массива. Обращение к элементу массива. Оператор sizeof и размеры массива. Связь массивов и указателей. Указатели на многомерные массивы. Массивы указателей. Модификаторы const и volatile в объявлениях массивов.
• Динамическое выделение памяти. Функции malloc, realloc и free. Операторы new и delete. Формы оператора delete. Динамические массивы.
• Понятие указателя. Объявление переменной – указателя. Инициализация указателя и оператор получения адреса переменной. Разыменование указателя. Арифметика указателей. Нулевой указатель. void – указатель.
• Указатель и ключевое слово const. Преобразование типа указателя.
• Оператор reinterpret_cast.
• Понятие массива. Встроенные массивы. Объявление массива.
• Инициализация массива. Обращение к элементу массива. Оператор sizeof и размеры массива. Связь массивов и указателей. Указатели на многомерные массивы. Массивы указателей. Модификаторы const и volatile в объявлениях массивов.
• Динамическое выделение памяти. Функции malloc, realloc и free. Операторы new и delete. Формы оператора delete. Динамические массивы.
5. Ссылки и функции
• Ссылки (reference).
• Понятие ссылки. Специфика инициализации и использования. Сравнение ссылок и указателей. Ссылки на временные объекты (rvalue reference – стандарт С++11).
• Понятие функции. Прототип функции. Определение функции. Вызов функции (специфика inline-функций). Соглашения о вызове функции (__cdecl, __stdcall, __fastcall).
• Способы передачи параметров функции: по значению, по указателю, по ссылке. Специ-фика передачи параметров: выражения в качестве параметров, указатели на массивы в качестве параметров функции, значения параметров по умолчанию, неиспользуемые параметры. Возвращаемое функцией значение. Ключевое слово const и функции: передача функции константных параметров, возвращение константных значений.
• Обобщенные константные выражения, ключевое слово constexpr (стандарт С++11). Проблемы при возвращении ссылки или указателя. Перегрузка имен функций. Рекурсивные функции.
• Ссылки (reference).
• Понятие ссылки. Специфика инициализации и использования. Сравнение ссылок и указателей. Ссылки на временные объекты (rvalue reference – стандарт С++11).
• Понятие функции. Прототип функции. Определение функции. Вызов функции (специфика inline-функций). Соглашения о вызове функции (__cdecl, __stdcall, __fastcall).
• Способы передачи параметров функции: по значению, по указателю, по ссылке. Специ-фика передачи параметров: выражения в качестве параметров, указатели на массивы в качестве параметров функции, значения параметров по умолчанию, неиспользуемые параметры. Возвращаемое функцией значение. Ключевое слово const и функции: передача функции константных параметров, возвращение константных значений.
• Обобщенные константные выражения, ключевое слово constexpr (стандарт С++11). Проблемы при возвращении ссылки или указателя. Перегрузка имен функций. Рекурсивные функции.
6. Ввод/вывод
• Переменное число параметров. "Старые" потоки ввода/вывода языка С. Функции printf и scanf. Ключи формата ввода/вывода. Файловый ввод/вывод. Диагностика ошибок.
• Указатель на функцию. Вызов функции с помощью указателя.
• Использование указателей на функции в качестве параметров. Массив указателей на функции. Примеры сложных объявлений функций и указателей на функции.
• Переменное число параметров. "Старые" потоки ввода/вывода языка С. Функции printf и scanf. Ключи формата ввода/вывода. Файловый ввод/вывод. Диагностика ошибок.
• Указатель на функцию. Вызов функции с помощью указателя.
• Использование указателей на функции в качестве параметров. Массив указателей на функции. Примеры сложных объявлений функций и указателей на функции.
7. Объединения
• Агрегатные типы данных. Структуры языка С. Ключевое слово struct. Выравнивание полей структуры компилятором. Использование структур.
• Безразмерные массивы. Поля битов.
• Объединения языка С. Ключевое слово union. Использование объединений.
• Агрегатные типы данных. Структуры языка С. Ключевое слово struct. Выравнивание полей структуры компилятором. Использование структур.
• Безразмерные массивы. Поля битов.
• Объединения языка С. Ключевое слово union. Использование объединений.
Практические работы
1. Базовые понятия. Навыки работы в интегрированной среде разработки (IDE).
• Базовые типы данных. Неявное приведение типов данных.
• Явное приведение типов данных. Операторы явного приведения типа.
• Ассоциативность и приоритет операторов.
• Область действия, область видимости, время существования переменных.
• Спецификатор класса памяти – static.
• Перечисления - enum. Логический тип bool. Модификатор const.
• Логические условные операторы и операторы отношения.
• Циклы.
Индивидуальное домашнее задание по пройденному материалу N1.
1. Базовые понятия. Навыки работы в интегрированной среде разработки (IDE).
• Базовые типы данных. Неявное приведение типов данных.
• Явное приведение типов данных. Операторы явного приведения типа.
• Ассоциативность и приоритет операторов.
• Область действия, область видимости, время существования переменных.
• Спецификатор класса памяти – static.
• Перечисления - enum. Логический тип bool. Модификатор const.
• Логические условные операторы и операторы отношения.
• Циклы.
Индивидуальное домашнее задание по пройденному материалу N1.
2. Побитовые операторы. Директивы препоцессора. Указатели.
• Побитовые операторы и операторы сдвига.
• Макросы с параметрами. Директивы условной трансляции. Опции проекта.
• Заголовочные файлы. Объявление указателя. Инициализация указателя и оператор получения адреса объекта. Разыменование указателя.
• Арифметика указателей. Преобразование типа указателя. void – указатель.
• Указатели и ключевое слово const. Конструкции типа "указатель на указатель".
Индивидуальное домашнее задание по пройденному материалу N2
• Побитовые операторы и операторы сдвига.
• Макросы с параметрами. Директивы условной трансляции. Опции проекта.
• Заголовочные файлы. Объявление указателя. Инициализация указателя и оператор получения адреса объекта. Разыменование указателя.
• Арифметика указателей. Преобразование типа указателя. void – указатель.
• Указатели и ключевое слово const. Конструкции типа "указатель на указатель".
Индивидуальное домашнее задание по пройденному материалу N2
3. Массивы. Связь массивов и указателей. Динамическое выделение памяти. Сложные указатели.
• Массивы. Объявление и инициализация встроенных массивов.
• Неполная инициализация встроенных массивов.
• Создание (и уничтожение) динамических массивов. Операторы new и delete.
• Простейшие алгоритмы поиска и сортировки.
• Указатели на многомерные массивы. Арифметика указателей на многомерные массивы.
• Модификатор const с массивами и указателями.
Индивидуальное домашнее задание по пройденному материалу N3.
• Массивы. Объявление и инициализация встроенных массивов.
• Неполная инициализация встроенных массивов.
• Создание (и уничтожение) динамических массивов. Операторы new и delete.
• Простейшие алгоритмы поиска и сортировки.
• Указатели на многомерные массивы. Арифметика указателей на многомерные массивы.
• Модификатор const с массивами и указателями.
Индивидуальное домашнее задание по пройденному материалу N3.
4. Ссылки и функции.
• Объявление, определение и вызов функции.
• Передача параметров по значению, по ссылке, по указателю.
• Передача функции указателя на массив (встроенный массив, динамический массив).
• Функции с переменным числом параметров.
Индивидуальное домашнее задание по пройденному материалу N4.
• Рекурсивные функции. Указатель на функцию.
• Указатель на функцию в качестве аргумента другой функции. Массивы указателей на функции.
• Объявление, определение и вызов функции.
• Передача параметров по значению, по ссылке, по указателю.
• Передача функции указателя на массив (встроенный массив, динамический массив).
• Функции с переменным числом параметров.
Индивидуальное домашнее задание по пройденному материалу N4.
• Рекурсивные функции. Указатель на функцию.
• Указатель на функцию в качестве аргумента другой функции. Массивы указателей на функции.
5. С-структуры.
• Объявление структуры. Создание экземпляров пользовательского типа. Использование структур: массив объектов пользовательского типа, передача агрегатного объекта в функцию.
• Поля битов.
• Пример использования структур - картотека.
• Объединения С.
• Объявление структуры. Создание экземпляров пользовательского типа. Использование структур: массив объектов пользовательского типа, передача агрегатного объекта в функцию.
• Поля битов.
• Пример использования структур - картотека.
• Объединения С.