- •Основные математические библиотечные функции.
- •Библиотечные функции генерации случайных чисел.
- •Объявление функций (прототипы функций). Описание функций. Вызов функций. Понятие формальных и фактических параметров функции.
- •Способы передачи параметров в функцию. Возвращение результатов.
- •Передача в функцию одномерных массивов.
- •Передача в функцию двумерных массивов.
- •Понятие рекурсивной функции. Пример рекурсивной функции.
- •Перегрузка функций.
- •Шаблоны функций.
- •Понятие структуры. Объявление и инициализация структур.
- •Файлы и их назначение. Логическое и физическое имя файла.
- •Открытие файлов.
- •Способы доступа к файлам.
- •Спецификаторы класса памяти.
- •Операция :: .
- •Функции препроцессора. Основные директивы препроцессора
- •Директива include. Ее назначение. Правила использования.
- •Директива #define. Ее назначение. Символьные константы и макросы. Правила использования директивы.
- •Директива #undef.
- •Условная компиляция файлов.
- •Управление выполнением директив.
- •Понятие динамической структуры. Виды динамических структур. Их отличие друг от друга.
- •Организация списка на основе массива.
- •Возможная структура элемента связного списка.
- •Однонаправленные и двунаправленные связные списки.
- •Добавление узлов в разные части связного списка.
- •Удаление узлов из разных частей связного списка.
- •Поиск элемента связного списка, содержащего указанную пользователем информацию.
-
Шаблоны функций.
-
Если алгоритм не зависит от типа данных, лучше реализовать его не в виде группы перегруженных ф-й, а в виде шаблона функции.
-
В этом случае компилятор сам сгенерирует текст ф-ии для конкретных типов данных, с которыми выполняется вызов и программисту не придется поддерживать несколько практически одинаковых ф-й
Таким образом можно сказать, что области применения перегрузки ф-й и шаблонов различаются, а именно: перегруженные ф-и применяют для оформления действий, аналогичных по названию, но различных по реализации, а шаблоны применяют для идентичных действий над данными различных типов.
-
Как определяется шаблон функций:
template <class Type> тип имя ([список параметров])
{
тело функции
}
Type задает параметризованный тип может использоваться и в основной части заголовка и в теле функции. Параметризованный тип-фиктивное имя, которое компилятор автоматически заменит имени реального типа данных при создании конкретной версии функции.
В общем случае шаблон может содержать несколько параметризованных типов.
Процесс создания конкретной версии функции наз-ся инстанцированием шаблона или созданием экземпляра функции.
Возможны 2 способа инстанцирования: явный и неявный
Явный - когда объявляется заголовок функции, в котором все параметризованные типы заменены на конкретные типы, известные в этот момент в программе.
Неявный - когда создание экземпляра функции происходит автоматически, если встречается фактический вызов функции
Шаблоны тоже можно перегружать, причем как шаблонами , так и обычными функциями.
-
Понятие структуры. Объявление и инициализация структур.
-
Структура(запись) – объединение одного или нескольких объектов(переменных, массивов, указателей, структур). В отличие от массива в записи могут присутствовать элементы разных типов.
-
Записи можно использовать там, где разного рода данные относятся к одному объекту.
-
Объявление структуры
имя структуры
{данные;};
-
Структуру можно инициализировать в самой программе
Создавая объект структуры, компилятор выделяет память под все типы данных, которые указаны в объявлении.
Размер памяти: float t; int x; int z; равносилен struct tree{float t; int x; int z}D;
struct tree {int a;};
int main()
{tree D;}
Либо сразу после объявления
struct tree{int a;}D;
Можно даже инициализировать массив из структур
tree D[20]; выделяет память для 20 объектов структуры tree.
-
Ввод вывод элементов структур.
-
Обращение к элементам структуры осуществляется через точку.
-
struct tree
{int a; char b;};
…
tree D;
D.a=5;
D.b=’e’;
…
-
Ввод и вывод осуществляются с помощью функций форматированного ввода-вывода, либо потоковым вводом выводом(ну впрочем как всегда)
struct tree
{int a; char b[50];}
…
tree D;
gets(D.b);
cin>>D.a;
puts(D.b);
cout<<D.a;
…
-
Вложенные структуры.
-
В С++ разрешено использовать записи в записях. Чтобы обратиться к элементу записи: имя записи.имя поля.
-
Пример вложенной записи.
-
#include <iostream>
using namespace std;
struct tree{int a;};
struct earth{struct tree D; int b};
-
Операции над структурами.
-
Операции: доступ к члену структуры(через точку) D.a=5;
-
Сортировка массива структур.
-
Присвоение элементов структуры.
-
-
Обращение к элементам структуры.
-
Для обращению к элементу структуры используется оператор «.»
-
Синтаксис обращения: имя элемента записи.имя поля;
-
tree D; D.a=5;
-
Сортировка массива структур.
-
Пример простой сортировки массива структур.
-
#include<iostream>
using namespace std;
struct tree {int h;}
main()
{
const int n=20;
tree a[n];
for(int i=0; i<n; i++)
cin>>a[i].h;
for (int i = 0; i < n-1 ; i++)
{
int min = i;
for(int j = i + 1; j < n; j++) {
if(a[j].h < a[min].h)
min = j;
}
if(min != i)
{
tree T;
T=a[i];
a[min]=a[i];
a[min]=T;
}
for(int i=0; i<n; i++)
cout<<a[i].h<<” “;
return 0;
}