- •1.Принципиальная схема компьютера. Потоки управления и потоки данных.
- •3. Принципы фон Неймана.
- •4. Создание исполняемых программ в машинных кодах, на Ассемблере и на языках высокого уровня.
- •5. Компиляторы и интерпретаторы, их преимущества и недостатки.
- •6. Классификация программных кодов. Схема создания исполняемого кода.
- •8. Определение и свойства алгоритма. Способы записи алгоритмов.
- •9. Блок-схемы. Основные управляющие структуры блок-схем.
- •10. Технологии программирования. Структурное программирование.
- •17. Операторы присваивания, инкремента и декремента. L-value выражения.
- •18. Условный оператор. Оператор запятая.
- •19. Инструкция-выражение. Инструкции выбора if и switch.
- •20. Инструкции передачи управления..
- •22. Алгоритмы обработки числовых данных (алгоритм Евклида, нахождение всех делителей числа, нахождение простых делителей числа, нахождение простых чисел, чисел Фибоначчи).
- •23. Указатели. Типизированные и безтиповые указатели. Операция разыменования и операция получения адреса.
- •25. Арифметические операции над указателями.
- •26. Проблемы и типичные ошибки при работе с указателями.
- •30. Двумерные и многомерные массивы (алгоритмы обработки матриц).
- •31. Многомерные массивы. Реализация многомерных массивов с помощью указателей.
- •32. Динамическое выделение памяти под одномерные и двумерные массивы.
- •34.Передача массивов в качестве параметров.
- •35. Подпрограммы. Определение и объявление подпрограмм. Процедуры и функции.
- •36.Формальные и фактические параметры. Соответствие типов в формальных и фактических параметрах.
- •38. Механизм работы с модифицируемыми параметрами, использующий указатели.
- •40. Использование ссылочного типа при выходе из подпрограмм. Константные ссылки.
- •41. Побочный эффект подпрограмм, его преимущества и недостатки.
- •42. Рекурсия. Формы рекурсивных подпрограмм. Глубина и текущий уровень рекурсии.
- •43. Зацикливание рекурсивных подпрограмм. Примеры неэффективности рекурсии.
- •44. Перегрузка функций. Ошибки, возникающие при перегрузке функций.
- •45.Указатели на функции. Callback-функции.
- •46. Функция main. Передача параметров в функцию main.
- •47. Директивы препроцессора. Директивы #pragma и #include.
- •48. Директивы #define и #undef. Константы времени компиляции.
- •49. Макросы. Преимущества и недостатки использования макросов.
- •50.Директивы условной компиляции. Страж включения.
- •51. Пространства имён. Работа с пространствами имён. Оператор using. Приоритеты и конфликты имён.
- •52. Строки. Операции над строками.
- •54. Строки string. Функции стандартной библиотеки для обработки строк.
- •55. Основные алгоритмы обработки строк (выделение слова, подстроки, разбиение на слова, поиск символа, поиск слова).Ответ в 53.
- •56. Пользовательские типы данных. Перечислимый тип enum.
- •57. Пользовательские типы данных. Тип struct. Массивы структур.
- •58. Объединения (union). Битовые поля.
- •59. Понятие сложности алгоритма. Оценка сложности с использованием о-символики.
- •60. Алгоритмы сортировки и поиска. Обменные сортировки. Сортировки вставками. Сортировки выбором. Сравнительный анализ методов сортировки.
- •61. Последовательный поиск. Бинарный поиск. Сравнительный анализ методов поиска.
- •62. Файлы. Основные принципы работы с файлами. Механизм чтения данных из файла. Определение конца файла. Открытие и закрытие файлов.
- •63. Текстовые файлы. Создание и обработка. Функции ввода/вывода в стиле с. Ввод-вывод нуль-терминированных строк. Посимвольный ввод-вывод. Форматированный ввод-вывод.
- •66. Исключительные ситуации. Системные и пользовательские исключения. Оператор try …catch. Виды блоков catch. Выброс исключений. И их обработка. Оператор throw.
- •70. Структура данных очередь. Кольцевая очередь. Реализация очереди с использованием списков.
- •71. Структура данных стек. Реализация стека с использованием массива.
- •72. Структура данных стек. Реализация стека с использованием списков.
- •73. Структуры данных. Списки. Типы списков. Представление этих структур в статической и динамической памяти. Обработка однонаправленных и двунаправленных списков. Сборка мусора.
- •75. Реализация линейного однонаправленного списка с использованием массивов.
- •76. Деревья. Обходы деревьев.
- •77. Бинарные поисковые деревья. Определение, концевой обход бпд.
- •78. Поиск и вставка нового элемента в бпд.
- •79.Удаление элемента из бпд.
- •80. Реализация бпд с использованием динамической памяти.
43. Зацикливание рекурсивных подпрограмм. Примеры неэффективности рекурсии.
В общем случае любая рекурсивная функция включает в себя некоторое множество операторов S и один или несколько операторов рекурсивного вызова. Безусловные рекурсивные функции приводят к бесконечным процессам, так как практическое использование функций с бесконечным самовызовом невозможно. Такая невозможность вытекает из того, что для каждой копии рекурсивной функции необходимо выделять дополнительную область памяти, а бесконечной памяти не существует. Следовательно, главное требование к рекурсивным функциям заключается в том, что вызов рекурсивной функции должен выполняться по условию, которое на каком-то уровне рекурсии станет ложным. Если условие истинно, то рекурсивный спуск продолжается. Когда оно станет ложным, спуск заканчивается и начинается поочередный рекурсивный возврат из всех вызванных на данный момент копий рекурсивной функции .
44. Перегрузка функций. Ошибки, возникающие при перегрузке функций.
Часто удобно для функций, выполняющих один и тот же алгоритм для данных разных типов, иметь одинаковые имена. Создание нескольких различных функций с одинаковым именем, но с различными спецификациями (количеством и/или типом аргументов, но не типом возвращаемого значения) называется перегрузкой функций. При вызове функции компилятор сам подбирает наиболее подходящий, по его мнению, вариант. Если точного соответствия не найдено, то выполняется преобразования типов. Функция max int max(int a, int b) { return (a<b ? b : a);} может быть переопределена (перегружена), с тем чтобы она, находила максимум среди данных типа double и возвращала результат этого типа. double max(double a,double b) { return (a<b ? b : a);} Отсутствие перегрузки приведет к тому, что max(3.5, 7.1) будет = 7.
Если при вызове компилятор не сможет подобрать нужную функцию – будет ошибка компиляции.
45.Указатели на функции. Callback-функции.
Каждая функция характеризуется типом возвращаемого значения, именем и сигнатурой. Сигнатура определяется количеством, порядком следования и типами параметров.
Иногда под сигнатурой функции подразумевают список типов ее параметров.
Имя функции без скобок и параметров выступает в роли указателя на эту функцию и его значением является адрес размещения функции в памяти.
Указатель на функцию определяется следующим образом:
тип_функции(*имя_указателя)(спецификация_ параметров);
Callback-функции
Указатели на функции могут быть переданы в качестве параметров в другие функции, что позволяет выполнять разные вызовы в зависимости от условий выполнения.
Функции, указатели на которые передаются в другие функции, и никогда не вызываемые напрямую, называются сallback-функциями.
46. Функция main. Передача параметров в функцию main.
Г оловная функцияОдна из функций, входящих в состав проекта, должна иметь имя main.Программа на языке С состоит из одной или нескольких функций, имена которых должны представлять собой правильные идентификаторы. Функция - это логически самостоятельная именованная часть программы, которой могут передаваться параметры и которая может возвращать некоторое значение. избыточности кода, объединить часто используемые функции в библиотеки и создать модульные и, следовательно, более простые в сопровождении программы. Согласно ANSI-стандарту одна из функций в программе на языке С должна иметь имя main(). Этой функции автоматически передается контроль после запуска программы (она является точкой входа в программу). Функции main() могут передаваться аргументы, и она может возвращать значение в точку вызова. Идентификатор_типа main() {}Идентификатор_типа main(int argc, char* argv[], char *envp[] {} При вызове программы операционной системой управление передаётся этой функции. По соглашению предполагается, что функция main должна возвращать значение целого типа. Обычно операционная система передаёт функции main три параметра (2 первых обязательно, а 3-ий может отсутствовать):int main ( int argc , char** argv , char** envp);где arc – число параметров в argv argv – массив указателей на строки envp – указатель на массив указателей на переменные среды
Последняя строка в массиве строк envp имеет нулевую длину.Идентификатор argc - это традиционный идентификатор первого аргумента функции main(). Он имеет тип данных int. Значение argc соответствует числу символьных строк в массиве, на который указывает argv (числу слов в командной строке), и, следовательно, никогда не может быть отрицательным.
Идентификатор argv - есть традиционный идентификатор второго аргумента функции main(). Он является указателем на массив указателей типа char. Каждый элемент массива указывает на слово командной строки в формате ASCIIZ-строки. Первое слово, на начало которого указывает элемент argv[0] - это имя запускаемого на выполнение файла. Следующий элемент массива argv[1] указывает на начало первого (после имени файла) слова командной строки, argv[2] - на начало второго, и т.д. Элемент argv[argc] должен быть указателем на NULL.
16.2 Функция и параметры по умолчанию.В программах на языке C++ разрешается описание функций с формальными параметрами, имеющими значение по умолчанию. Такие параметры должны быть последними в списке при объявлении функции, и при вызове функции могут не указываться. Таким образом упрощается вызов функции с часто используемыми значениями аргументов. Пример int func1(int n, int m = 3); void func2(char *s = "Задание"); char* func3( int x, int у = 4); char* func3( int x = 2, int у); // переопределение
char* func4( int a = 0, int b); // ошибка • За параметром со значением по умолчанию уже не может следовать параметр без значения по умолчанию. • При переопределении функции могут быть дополнительно заданы значения по умолчанию для параметров, которые ранее не имели таких значений, но уже объявленные параметры со значениями по умолчанию не могут быть отредактированы. • В качестве значений по умолчанию могут использоваться выражения или переменные (но не локальные). • Последовательность обработки аргументов функции не установлена и может быть различной в различных компиляторах.