- •Оглавление
- •1.2. Свойства языков программирования
- •1.3. Основные парадигмы программирования Процедурное программирование
- •Модульное программирование
- •Абстракция данных
- •Объектно-ориентированное программирование
- •Непечатные символы
- •Тема 2 Типы данных
- •2.1. Понятие переменной и объявление переменных
- •Объявление переменных
- •Встроенные типы данных
- •Размер памяти, выделяемой под встроенные типы данных
- •2.2. Константы и перечисления Константные переменные
- •Перечисления
- •2.3. Операции и выражения
- •Мультипликативные операции
- •Операции сравнения
- •Побитовые логические операции
- •Побитовые операции
- •Комментарии
- •Оператор while(пока)
- •Оператор do/while(выполнять/пока)
- •Оператор for(цикл)
- •Оператор множественного выбора switch
- •Операторы breakиcontinue
- •Тема 4 Массивы
- •4.1.Определение, объявление и инициализация массивов
- •Объявления и инициализация массивов в программе
- •4.2. Сортировка массивов Пузырьковая сортировка
- •Сортировка вставками
- •4.3. Поиск в массивах Линейный поиск
- •Двоичный поиск
- •4.4. Многомерные массивы
- •Тема 5 Указатели Объявления и инициализация переменных указателей
- •5.1. Операции над указателями
- •5.2. Выражения и арифметические действия с указателями
- •5.3. Взаимосвязи между указателями и массивами
- •5.4. Массивы указателей
- •5.5. Динамическое выделение памяти под массивы
- •Тема 6 Функции
- •6.2. Определения функций
- •Генерация случайных чисел
- •6.3. Классы памяти и область действия Классы памяти
- •Область действия
- •6.4. Рекурсия
- •6.5. Ссылки и ссылочные параметры
- •Вызов функций по ссылке с аргументами указателями
- •6.6. Использование спецификатораconstс указателями
- •6.7. Перегрузка функций
- •Аргументы по умолчанию
- •6.8. Передача массивов в функции
- •6.9. Указатель на функцию
- •6.10. Командная строка аргументов
- •6.11 Неопределенное количество аргументов
- •Тема 7 Введение в обработку строк
- •7.1. Работа со строками в с
- •Понятие символов и строк в с
- •Функции для работы со строками
- •Определение длины строки
- •Сложение двух строк (конкатенация)
- •Добавление к исходной строке указанного количества символов.
- •Копирование строки в другую строку
- •Сравнение строк
- •Получение строки от пользователя
- •Тема 8 Работа с файлами
- •Открытие файла
- •Чтение из файла символа или строки символов
- •Запись символа или строки символов в файл
- •Смещение внутри файла
- •Значения параметра fromwhereфункцииfseek
- •Закрытие файла
- •Тема 9 Компоновка программ и препроцессор
- •9.1. Компоновка программ
- •Проблема использования общих функций и имен
- •Использование включаемых файлов
- •9.2. Препроцессор
- •Определение макросов
- •Условная компиляция
- •Дополнительные директивы препроцессора
- •Тема 10 Структуры
- •10.1. Определение структур и доступ к элементам
- •Доступ к элементам структур
- •Использование структур
- •10.2. Битовые поля
- •10.3. Объединения
- •10.4. Построение связных списков на основе структур с самоадресацией
- •Создание простого связного списка
- •Очереди
- •Деревья
- •Список рекомендуемой литературы
Оглавление
Оглавление 3
Тема 1 6
основные концепции Языков программирования 6
1.1. Классификация языков программирования 6
1.2. Свойства языков программирования 7
1.3. Основные парадигмы программирования 8
1.4. Первая программа на С++ 11
Тема 2 14
Типы данных 14
2.1. Понятие переменной и объявление переменных 14
2.2. Константы и перечисления 16
2.3. Операции и выражения 18
Тема 3 30
Операторы и выражения 30
Тема 4 35
Массивы 35
4.1.Определение, объявление и инициализация массивов 35
4.2. Сортировка массивов 36
4.3. Поиск в массивах 38
4.4. Многомерные массивы 38
Тема 5 40
Указатели 40
5.1. Операции над указателями 40
5.2. Выражения и арифметические действия с указателями 41
5.3. Взаимосвязи между указателями и массивами 43
5.4. Массивы указателей 44
5.5. Динамическое выделение памяти под массивы 44
Тема 6 47
Функции 47
6.1. Программные модули в С++ 47
6.2. Определения функций 48
6.3. Классы памяти и область действия 50
6.4. Рекурсия 54
6.5. Ссылки и ссылочные параметры 59
6.6. Использование спецификатора const с указателями 63
6.7. Перегрузка функций 65
6.8. Передача массивов в функции 66
6.9. Указатель на функцию 68
6.10. Командная строка аргументов 70
6.11 Неопределенное количество аргументов 71
Тема 7 73
Введение в обработку строк 73
7.1. Работа со строками в С 73
7.2. Работа со строками в С++ 78
Тема 8 79
Работа с файлами 79
Тема 9 88
Компоновка программ и препроцессор 88
9.1. Компоновка программ 88
9.2. Препроцессор 91
Тема 10 94
Структуры 94
10.1. Определение структур и доступ к элементам 94
10.2. Битовые поля 97
10.3. Объединения 98
10.4. Построение связных списков на основе структур с самоадресацией 101
Список рекомендуемой литературы 114
Тема 1
основные концепции Языков программирования
Программы– это алгоритмы и структуры данных[12]. Известна формула Никлауса Вирта – разработчика языкаPascal:
алгоритмы+структуры данных = программы
Структуры данныхпредставляют исходные данные, промежуточные и конечные результаты.
Алгоритмы– указания, какие действия и в какой последовательности необходимо применять к данным для получения требуемого конечного результата.
1.1. Классификация языков программирования
Языки программирования делятся на две группы:
1. Машинно-зависимые языки. Их можно применять на одной ЭВМ или на ограниченном подмножестве машин с одинаковой архитектурой.
2. Машинно-независимые языки. Их можно использовать на любой ЭВМ. Языки этой группы называют универсальными
Машинно-зависимыеязыки в зависимости от их близости к машинным языкам делятся на три группы:
- машинные(языки нулевого уровня),
- ассемблерные(языки первого уровня или языки типа 1:1, т.е. одна ассемблерная команда порождает одну машинную команду),
- макроассемблеры (языки второго уровня или языки типа 1:2).
Машинно-независимыеязыки включают следующие группы языков:
- императивные– это языки программирования, управляемые командами или операторами языка. Программа на императивном языке представляет собой последовательность команд (операторов), которые выполняются в порядке их написания. Выполнение каждой команды ведет к изменению состояния компьютера. Основными элементами императивных языков являются переменные и операторы присваивания. Эти языки поддерживают один или несколько итеративных циклов, а также конструкции, позволяющие программировать рекурсивные алгоритмы.Пример – ALGOL, PL/1, Basic, C/C++, FORTRAN, Ada, Pascal, Java;
-функциональные (аппликативные)– вычисления в основном производятся путем применения функций к заданному набору данных. Разработка программ заключается в создании из простых функций более сложных. Затем эти функции последовательно применяются к начальным данным до тех пор, пока не получится конечный результат. Типичная программа на функциональном языке имеет следующий вид:
функцияn(…функция2(функция1(данные))…)
Пример – LISP, ML, Miranda, Haskell;
-декларативные– это языки программирования, в которых операторы представляют собой объявления или высказывания в символьной логике. Типичный пример таких языков – языки логического программирования. В программах на языках логического программирования соответствующие действия выполняются только при наличии необходимого разрешающего условия. Программа на языке логического программирования схематично выглядит следующим образом:
разрешающее условие 1 -> последовательность операторов 1
разрешающее условие 2 -> последовательность операторов 2
разрешающее условие 3 -> последовательность операторов 3
……
разрешающее условие n-> последовательность операторовn
Порядок выполнения операторов определяется системой реализации правил. Пример – Prolog, YACC;
- объектно-ориентированные– это языки, реализующие объектно-ориентированную парадигму программирования, основанную на трех ключевых понятиях: абстракция данных (инкапсуляция), наследование и полиморфизм. В основе объектно-ориентированного программирования лежит объектно-ориентированная декомпозиция. Разработка объектно-ориентированных программ заключается в построении иерархии классов, описывающих отношения между объектами, и в определении классов. Вычисления в объектно-ориентированных программах задаются сообщениями, передаваемыми от одного объекта другому.
Пример – Smalltalk, C#,поддержка объектно-ориентированной парадигмы включена в языкиAda95, Object Pascal, C++.