
- •2. Применение условной компиляции и определений: директивы #ifdef и их синтаксис.
- •3. Сокрытие и защита данных. Доступ к защищенному члену данных.
- •1.Синтаксис языка Си, зарезервированные имена.
- •2.Форматированный и неформатированный ввод-вывод.
- •Форматированный ввод с клавиатуры
- •3.Сценарии создания объектов: с инициализацией по умолчанию, со специальной инициализацией, путем копирования других объектов
- •1. Структура программы на Си, трансляция и создание загрузочного модуля.
- •2.Агрегаты данных, описание агрегатов через шаблоны, вложенные описания
- •3. Интерфейс класса. Свойство защищенности интерфейса класса
- •1. Классификация функций, функции пользователя и стандартные.
- •2. Модификаторы «[],(),*» в объявлениях.
- •3. Наследование, инкапсуляция и полиморфизм, иерархия классов.
- •1.Вызов функций: параметры и аргументы.
- •2. Функции преобразования и тестирования.
- •3. Уровни описания и реализации структур данных.
- •Билет №6
- •2. Структуры данных struct, поля битов в структуре
- •Билет 7
- •1. Библиотеки функций и их подключение.
- •2. Спецификаторы и модификаторы в объявлениях
- •3. Объекты класса и члены данных.
- •Билет 8
- •Ввод-вывод как средство связи пользователя с пк.(билет2)
- •3.Правила перегрузки операторов. Приоритеты операторов.
- •1.Библиотечные функции ввода-вывода символов и строк, функции gets и puts.
- •3.Константы и переменные скалярного типа.
- •3.Объявление класса: private, protected, public элементы класса.
- •Ключевые слова public и private
- •Билет №10
- •1. Ввод-вывод данных, функции printf и scanf, спецификации преобразования.
- •Идентификаторы и зарезервированные слова.
- •Билет 11
- •1.Простой и составной оператор.
- •2.Базовые типы данных и перечислимый тип enum, объявление перечислимого типа через шаблон, использование перечислимого типа вместо констант.
- •3.Статические элементы класса.
- •Билет n 12
- •1.Операторы принятия решений: применение операторов решения.
- •2.Классы памяти и область действия объектов программы.
- •3.Приватные конструкторы. Конструкторы с аргументами.
- •Билет 13
- •1.Условный оператор if.
- •2.Функция и указатель на функцию: объявление.
- •3.Деструкторы: общедоступные, приватные
- •Билет №14
- •1.Вычисляемый оператор-переключатель группового выбора switch
- •2.Классы памяти, область действия объявления
- •3.Принципы разработки структуры проекта, блок-схемы проекта
- •Билет №15
- •1.Организация цикла в программе, цикл с предусловием while
- •2.Рекурсивные функции
- •3.Ссылки и указатели: указатели и ссылки как члены данных
- •1.Организация цикла в программе, цикл с постусловием do - while.
- •2.Объединение данных union.
- •3.Понятие объекта и класса.
- •Билет 17
- •1. Организация цикла в программе. Цикл с инициализацией и модификацией for
- •2. Директивы препроцессора: директива #define, синтаксис.
- •3. Отладка программных комплексов: этапы отладки, методы отладки, организация тестирования программ.
- •1.Функции для работы со строками символов.
- •2.Примеры абстрактных структур: таблицы.
- •3.Понятие проекта программы: структура проекта.
- •Билет №19
- •1. Преобразование типов явное и неявное.
- •2. Таблицы указателей на функции и вызов функции из таблицы
- •3. Доступ к глобальным и локальным данным, область видимости для идентификаторов, объявленных внутри класса
- •Билет 20
- •1 Операции арифметического типа, преобразование типа в операции присвоения.
- •2 Главная функция и способы передачи аргументов.
- •3. Абстрактные структуры данных. Понятие шаблона структуры.
- •Билет n 21
- •1. Операции логического типа, одноместные и двуместные операции.
- •2.Разбор аргументов в главной функции и их использование.
- •3. Форматы данных и их применение.
- •Билет №22
- •1.Адресные операции: указатели в адресных операциях.
- •2.Функции ввода-вывода: классификация функций, ввод-вывод символов и строк.
- •3.Перегрузка операторов, правила перегрузки операторов, приоритеты
- •2.Описание файла.
- •3.Классификация функций-членов класса
- •Билет №24
- •1.Определение массива и его описание, индексирование массива.
- •3.Операторы new и delete.
- •1.Связь между массивами и указателями
- •2.Файлы данных: структура данных в файле.
- •3. Примеры абстрактных структур: очереди
- •1.Обращение к элементам массива
- •2.Директивы препроцессора: директива #include и способы включения файла
- •3.Вызов функций-элементов
- •Билет 27
- •1.Классы: использование указателя this.
- •2.Спецификаторы и модификаторы в объявлениях
- •1.Строки и массивы строк символов.
- •2.Файловый ввод-вывод потоком: поиск в файле, добавление и удаление данных.
- •3.Объявление структур через шаблон.
- •1.Массив ссылок
- •2 Поиск в файле, добавление и удаление данных.
- •3.Понятие стиля программирования: «ясность», «краткость», «эффективность».
- •Билет №31
- •1.Размерность массива и представление в памяти.
- •2.Файловый ввод-вывод записями, доступ к данным.
- •3.Перегрузка функций.
- •Билет 32
- •Билет 33
- •3.Скобочные операторы: оператор вызова функции operator() и оператор индексирования [].
- •Билет 34
- •1 Стиль оформления выражений
- •Классификация данных по назначению, структуре и формату.
- •Управление динамической памятью: функции распределения памяти.
- •Принцип модульности: совокупность модулей (функций) и файлов, разделение на модули.
- •Билет №36
- •2.Макроподстановки: директива #define, синтаксис.
- •Билет 28
- •1.Многомерные массивы, способы описания, инициализация.
- •2.Режимы открытия и модификации файла.
- •3.Перегруженные конструкторы.
3.Перегрузка операторов, правила перегрузки операторов, приоритеты
Операторы рассматриваются как ф-ции, которые имеют прототип: тип operator имя_оператора (список_параметров); operator – ключевое слово. Поэтому операторы, как и ф-ции, можно перегружать.
Перегрузка операторов должна удовл. требованиям:
- нельзя вводить новых операторов;
- не допускается перегрузка операторов со встроенными типами данных в кач-ве параметров, тип по крайней мере одного параметра перегр. опер. должен быть классом;
- нельзя изменять количество параметров оператора;
- приоритеты перегр. опер. не изм-ся;
- оператор не может иметь аргументов по умолчанию, за исключ. оператора вызова ф-ции ();
- оператор не может иметь неопред. кол-ва параметров, за исключ. оператора вызова ф-ции ().
При выборе способа перегрузки оператора нужно учитывать его смысл. Перегруженные операторы могут вызываться двумя способами: явно, как ф-ции, и неявно, используя операторную запись.
Перегружаются почти все операторы, исключая:
- . – точка, оператор доступа к члену класса;
- .* - оператор доступа к члену класса через указатель;
- :: - оператор разреш. области видимости;
- :? – условный оператор;
Нельзя перегружать препроцессорные операторы.
Приоритеты операторов
В зависимости от сочетания операторов, в исполяемом алгоритме изменяется его порядок, а изменение этого порядка зависит от самих операторов.
() [] . ~ -> Слева направо
! &(ун) *(ун) -(ун) ~(ун) ++ -- @(ун) Справа налево
% * / Слева направо
+ - @ Слева направо
<< >> Слева направо
< > <= >= %< %> %<= %>= Слева направо
!= == %== %!= Слева направо
&,^,|,&&,||,?(,,) Слева направо
Билет 23
1.Внутреннее представление данных в ЭВМ: символьных, двоичных, десятичных, адресных констант.
Для представления информации в памяти ЭВМ используется двоичный способ кодирования.
Элементарная ячейка памяти ЭВМ имеет длину 8 бит (1 байт). Каждый байт имеет свой номер (его называют адресом). Бит может принимать одно из двух значений: 0 или 1.
Представление и обработка символьных данных в Си: каждый символ текста представляется отдельным байтом, каждому значению байта как целого числа (коду символа в диапазоне 0..255 или 00..FF) ставится в соответствие символ текста. Для работы с текстом используется базовый тип данных char.
Для представления символов русского алфавита надо использовать unsigned char, так как коды русских букв превышают величину 127.
2.Описание файла.
Если в качестве устройств ввода/вывода ограничиться только клавиатурой и экраном, то в таком случае будет сложно обработать большие объемы входных данных. Выходные данные, отображенные на экране, тоже безвозвратно теряются. Для устранения подобных проблем удобно сохранять данные на запоминающих устройствах, предназначенных для долговременного хранения данных (диски, флэшки и т.п.).
На дисках данные хранятся в виде структур данных, обслуживаемых операционной системой, – в виде файлов. Файл – это именованная область внешней памяти, в которой хранится логически завершенный объем данных. В языке С файл – это неструктурированная линейная последовательность байтов. Файлы широко применяются при решении различных задач. Каждый файл имеет имя и расширение, которого может и не быть (в MS DOS максимальная длина соответственно: 8 и 3 символа).
В языке С отсутствуют операторы для работы с файлами. Все необходимые действия с файлами выполняются с помощью функций стандартной библиотеки.
Функции ввода/вывода для работы с файлами стандартной библиотеки языка С, которые позволяют читать данные из файлов и записывать данные в файлы, делятся на два класса:
1. Ввод/вывод верхнего уровня (с использованием понятия «поток»). Эти функции обеспечивают буферизацию работы с файлами. Это означает, что при чтении или записи информации обмен данными осуществляется не между программой и указанным файлом, а между программой и промежуточным буфером, расположенным в оперативной памяти.
При записи в файл информация из буфера записывается или при его заполнении, или при закрытии файла. При чтении данных программой информация берется из буфера, а в буфер она считывается при открытии файла и впоследствии каждый раз при опустошении буфера. Буферизация ввода/вывода выполняется автоматически, она позволяет ускорить выполнение программы за счет уменьшения количества обращений к сравнительно медленно работающим внешним устройствам.
Для пользователя файл, открытый на верхнем уровне, представляется как последовательность считываемых или записываемых байтов. Чтобы отразить эту особенность организации ввода/вывода, предложено понятие «поток» (англ. stream). Когда файл открывается, с ним связывается поток. Далее выводимая информация записывается «в поток», а считываемая – берется «из потока».
Когда файл открывается для ввода/вывода, он связывается со структурой типа FILE, определенной с помощью typedef в файле <stdio.h>. Эта структура содержит всю необходимую информацию о файле (его имя, открыт ли файл для чтения или записи, указатель текущей позиции в файле, адрес буфера, были ли ошибки при работе с файлом и не встретился ли конец файла). При открытии файла с помощью стандартной функции fopen() возвращается указатель на структуру типа FILE. Этот указатель, называемый указателем потока (файла), используется для последующих операций с файлом. Его значение передается всем библиотечным функциям, используемым для ввода/вывода через этот поток.
2. Ввод/вывод низкого уровня (с использованием понятия «дескриптор» или «префикс»). Функции низкого уровня не выполняют буферизацию и форматирование данных, они позволяют непосредственно пользоваться средствами ввода/вывода операционной системы.
При низкоуровневом открытии файла с помощью функции open() с ним связывается файловый дескриптор (англ. handle). Дескриптор является целым числом, характеризующим размещение информации об открытом файле во внутренних таблицах операционной системы (FCB – File Control Block). Дескриптор используется при последующих операциях с файлом.
Файлы делятся на текстовые и двоичные.
Текстовый файл – это файл, в котором каждый символ хранится в виде одного байта (кода, соответствующего символу). Текстовые файлы разбиваются на несколько строк с помощью специального символа «конец строки» (пара символов CR LF или 0Dh 0Ah).
Двоичный файл – файл, данные которого представлены в бинарном виде. При записи в двоичный файл символы и числа записываются в виде последовательности байтов (в своем внутреннем двоичном представлении в памяти компьютера).
Пример открытия текстового файла по имени "test.txt" для записи:
FILE *fp;
if ((fp = fopen("test", "w")) == NULL)
{printf(“Ошибка открытия файла\n”);
exit(1);// завершение работы программы}
Для обоих классов функций файлового ввода-вывода возможны 2 режима доступа к файлу: текстовый и двоичный. Режим доступа к файлу задается при его открытии. В текстовом режиме производится преобразование пары символов CR LF (0Dh 0Ah) – при чтении из файла в один символ новой строки ‘\n’(0xA), а при записи в файл обратно в пару символов. Кроме того, при вводе символа Ctrl-Z (1Ah) считается, что достигнут конец файла и ввести информацию после этого символа в текстовом режиме нельзя. В двоичном режиме никакого преобразования байтов не происходит и не делается никаких предположений об их смысле. Доступ к файлу может быть последовательным и произвольным (прямым). Последовательный доступ – файл читается/пишется последовательно байт за байтом. Прямой доступ – чтение/запись возможны из произвольного места файла с установкой указателя чтения/записи в нужное место файла.