
- •В.В. Чуркин технологии программирования
- •Содержание
- •Введение
- •Указатели. Операции над указателями Операции адресации и разыменования.
- •Арифметические операции.
- •Присваивание указателей.
- •Смещение и индексирование указателей.
- •Функции
- •Объявление функции (прототип)
- •Параметры функции
- •Встроенные функции
- •Функции с параметрами со значениями по умолчанию
- •Параметры функции main()
- •Рекурсивные функции
- •Перегрузка функций
- •Шаблоны функций
- •Указатели на функции
- •Объявление и инициализация массива указателей на функции:
- •Указатель на функцию как возвращаемое функцией значение
- •Выделение и освобождение динамической памяти
- •Символьные и строковые данные Символьные константы
- •Строковые константы (строки)
- •Символьные переменные
- •Строки – переменные
- •Специальные функции ввода-вывода строк
- •Стандартная библиотека функций языка с
- •Файлы Потоковый ввод-вывод в языке с Функции верхнего уровня файлового ввода-вывода
- •Открытие и закрытие потока
- •Текстовый режим
- •Бинарный режим
- •Закрытие файла
- •Функции в языке c для работы с файлами
- •Двоичный (бинарный) режим обмена с файлами
- •Строковый обмен с файлами
- •Форматный обмен с файлами
- •Позиционирование в потоке
- •Ввод-вывод нижнего уровня
- •Открытие / закрытие файла
- •Чтение и запись данных
- •Произвольный доступ к файлу
- •Позиционирование файлов
- •Сортировки числовых массивов Принцип наименьших привилегий
- •Обменная сортировка (SwapSort)
- •Сортировка выбором (SelectSort)
- •Пузырьковая сортировка (BubbleSort)
- •Сортировка вставками (InsertSort)
- •Быстрая сортировка (QuickSort)
- •Поиск в числовых массивах
- •Структуры
- •Форматы определения структурных типов
- •Форматы определения объектов структурных типов
- •Операции над объектами структурного типа
- •Доступ к элементам объектов структурного типа
- •Структуры, массивы и указатели
- •Объединения (смеси)
- •Оператор switch (переключатель)
- •Динамические структуры данных
- •Реализация стека с помощью массива
- •Очередь
- •Очередь приоритетов
- •Реализация очереди с помощью массива
- •Линейные списки
- •Функции для работы с двунаправленным линейным списком
- •Реализация списка с помощью массивов
- •Поиск хэшированием
- •Бинарные деревья
- •Бинарное упорядоченное дерево (дерево поиска)
- •Идеально сбалансированное дерево
- •Операции с бинарным упорядоченным деревом
- •Удаление узла из дерева
- •Обход (просмотр) дерева
- •Реализация дерева с помощью массивов
- •Вывод динамических структур в файл и чтение их из файла
- •Сбалансированные (avl) деревья
- •Алгоритм avl-вставки.
- •Повороты
- •Классы и объектно-ориентированное программирование
- •Объявление класса
- •Определение класса (реализация класса)
- •Использование класса (драйвер класса)
- •Доступ к элементам класса
- •Отделение интерфейса от реализации
- •Обслуживающие функции-утилиты
- •Конструкторы
- •Windows-программы в Builder
- •Структура головного файла проекта
- •Структура заголовочного файла модуля формы (“Unit1.H”)
- •Структура файла реализации модуля формы (“Unit1.Cpp”)
- •Области видимости (или области действия) переменных в блоках. Время жизни переменных
- •Доступ к свойствам и функциям-элементам (методам) объектов, переменным и функциям в приложении, содержащем одну форму
- •Константные объекты и константные функции-элементы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •Перегрузка операции индексирования []
- •Композиция классов
- •Дружественные функции класса
- •Дружественный класс
- •Использование указателя this
- •Статические элементы класса
- •Шаблон класса для статически и динамически создаваемых объектов
- •Конструктор 1
- •Деструктор
- •Вызовы конструкторов и деструкторов
- •Перегруженная операция присваивания
- •Конструктор 2 (конструктор копирования, конструктор копии)
- •Наследование. Иерархия классов.
- •Ключи доступа
- •Пример простого наследования (точка, круг)
- •Правила наследования функций-элементов. Вызовы конструкторов и деструкторов в иерархии
- •Виртуальные функции и полиморфизм
- •Правила определения и наследования виртуальных функций
- •Позднее (динамическое) связывание
- •Полиморфизм. Абстрактные и конкретные классы
- •Учебная литература (основная)
- •Учебная литература (для углубленного изучения)
- •Учебно-методические издания
Символьные и строковые данные Символьные константы
Символьные константы используются для изображения отдельных знаков, имеющих внутренние коды: ‘A’, ‘a’, ‘8’, ‘+’ и т.д.
Внутри апострофов можно записать любой символ, изображаемый на экране в текстовом режиме. Однако можно использовать и коды, не имеющие графического представления на экране, клавиатуре, принтере:
‘\n’ – перевод строки,
‘\r’ – возврат курсора к началу строки,
‘\b’ – возврат курсора на одну позицию,
‘\0’ – нулевой символ.
Символьная константа (символ) имеет целый тип, т.е. символы можно использовать в качестве целочисленных операндов в выражениях. Например:
int m,k;
………..
m = k+’b’;
Определять внутренние коды символов можно следующим образом:
cout<<0+’a’<<endl //97
<<0+’0’<<endl; //48
Строковые константы (строки)
Строковые константы заключаются в кавычки, например, “привет!”. В кавычки можно включать и неизображаемые символы:
“\n Текст \n на \n трех строках”.
В памяти все символы строки размещаются подряд, занимают по одному байту. В конце строки компилятор размещает нулевой символ ‘\0’ (завершающий ноль).
Следовательно, ‘f’ занимает 1 байт, а “f “ – 2 байта.
Символьные переменные
Пример объявления: char z, s;
Для ввода-вывода символьных и строковых данных в языке C используются функции из файла stdio.h. Символьные данные вводятся с клавиатуры функциями: scanf(“%c”,&z); int getchar(); выводятся на экран функциями - printf(“%c”,&z); int putchar(int c);
Функция getchar() читает с клавиатуры по одному символу за обращение и возвращает этот символ. Как и при использовании scanf(), чтение вводимых данных начинается после нажатия <Enter>: z=getchar(); Функция int putchar(int c) выводит символ c на экран и возвращает выведенный символ: putchar(z);
Пример. Вывести цифры от 0 до 9 и шестнадцатеричное представление их внутренних кодов.
#include <stdio.h>
void main()
{ char z;
for(z=’0’; z<=’9’; z++)
{if(z==’0’ \\ z==’5’) printf(‘\n’);
printf(“%c-%x”, z, z); //для десятичного представления - “%c-%d”
}
}
Результат:
0-30 1-31 2-32 3-33 4-34
5-35 6-36 7-37 8-38 9-39
Строки – переменные
Отдельного типа для строк в языке C нет. Строки хранят в массивах символов. Особенность этих массивов – в конец массива, т.е. строки, добавляется завершающий нуль: ‘\0’. Поэтому при работе со строками длину массива не указывают.
Присвоить значение массиву символов операцией присваивания нельзя. Возможны следующие варианты.
Инициализацией, при объявлении:
char a[]=”привет!”;
printf(“%s”, a);
Длина массива a – 8 символов. 8-й байт выделяется при инициализации. Это сокращенный вариант инициализации. Обычный вариант:
char a[]={‘п’,’р’,’и’,’в’,’е’,’т’,’!’,’\0’};
Примечание. При формировании строки следует добавлять ’\0’ в конец символьного массива.
Вводом:
char a[80]; //в массив a можно ввести строку
char* b; //по указателю можно выделить динамическую память
//под строку
scanf(“%s”,a); //верно
scanf(“%s”,b); //неверно – попытка ввода в неопределенный участок
//памяти
Однако можно: char* b=”привет!”;