- •О.Л. Викентьева, А.Н. Гусин, O.A. Полякова
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
- •1. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •10.1. Базовые конструкции структурного программирования
- •10.3. Составные операторы
- •10.4. Операторы выбора
- •10.5. Операторы циклов
- •10.6. Операторы перехода
- •11. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ОСНОВНЫХ ОПЕРАТОРОВ C++
- •11.2. Программирование арифметических циклов
- •11.3. Программирование итерационных циклов
- •11.4. Программирование вложенных циклов
- •12. МАССИВЫ
- •12.1. Определение массива в C/C++
- •12.2. Примеры решения задач с использованием массивов
- •13. УКАЗАТЕЛИ
- •13.1. Понятие указателя
- •13.2. Динамическая память
- •13.3. Операции с указателями
- •14. ССЫЛКИ
- •15.3. Динамические массивы
- •СИМВОЛЬНАЯ ИНФОРМАЦИЯ И СТРОКИ
- •16.1. Представление символьной информации
- •16.2. Библиотечные функции для работы со строками
- •16.3. Примеры решения задач с использованием строк
- •17. ФУНКЦИИ В C++
- •17.1. Объявление и определение функций
- •17.2. Прототип функции
- •17.3. Параметры функции
- •17.4. Локальные и глобальные переменные
- •17.5. Функции и массивы
- •17.5.1. Передача одномерных массивов как параметров функции
- •17.5.2. Передача строк в качестве параметров функций
- •17.5.3. Передача многомерных массивов в функцию
- •17.6. Функции с начальными значениями параметров (по умолчанию)
- •17.7. Подставляемые (inline) функции
- •17.8. Функции с переменным числом параметров
- •17.9. Рекурсия
- •17.11. Шаблоны функций
- •17.12. Указатель на функцию
- •17.13. Ссылки на функцию
- •18. ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
- •18.1. Переименование типов
- •18.2. Перечисления
- •18.3. Структуры
- •18.3.1. Работа со структурами
- •18.3.2. Битовые поля
- •18.3.3. Объединения
- •19. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
- •19.1. Создание элемента списка
- •19.2. Создание списка из п элементов
- •19.3. Перебор элементов списка
- •19.4. Удаление элемента с заданным номером
- •19.5. Добавление элемента с заданным номером
- •19.6. Двунаправленные списки
- •19.7. Очереди и стеки
- •19.8. Бинарные деревья
- •19.9. Обход дерева
- •19.10. Формирование дерева
- •19.11. Удаление элемента из дерева
- •19.12. Обработка деревьев с помощью рекурсивного обхода
- •20. ПРЕПРОЦЕССОРНЫЕ СРЕДСТВА
- •20.1. Стадии и команды препроцессорной обработки
- •20.2. Директива #define
- •20.3. Включение текстов из файлов
- •20.4. Условная компиляция
- •20.5. Макроподстановки средствами препроцессора
- •21.1. Проектирование программы
- •21.2. Кодирование и документирование программы
- •СПИСОК ЛИТЕРАТУРЫ
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
{
/*в функцию root передается указатель на функ
цию, координаты отрезка и точность*/
float res=root(testf,0,2,0.0001);
cout<<"\nX="<<res;
17.13. Ссылки на функцию
Подобно указателю на функцию определяется и ссылка на функцию:
тип_функции(&имя_ссылки)(параметры)
инициализирующее_выражение;
int f (float a, int b) {...} //определение функции
int (&fref)(float,int)=f; //определение ссылки
Использование имени функции без параметров и скобок будет восприниматься как адрес функции. Ссылка на функцию является синонимом имени функции. Изменить значение ссылки на функцию нельзя, поэтому более широко используются указатели на функции, а не ссылки.
#include dost ream. h> void f(char c)
{
cout«"\n"<<c;
void main()
{ |
(*pf)(char); |
//указатель |
на функцию |
|
void |
||||
void |
(&rf)(char); |
//ссылка |
на |
функцию |
f ('A' ); //вызов по имени |
на |
функцию |
||
pf=f; |
//указатель |
ставится |
(*pf)( 'В'); //вызов с помощью указателя rf('C'); //вызов по ссылке
}
18.ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
18.1.Переименование типов
Типу можно задавать имя с помощью ключевого слова typedef:
typedef тип имя_типа [размерность];
typedef unsigned int UNIT;
typedef char Msg[100];
Такое имя можно затем использовать так же, как и стандартное
имя типа
UNIT а,Ь,с;//переменные типа unsigned int
Msg str[10];// массив из 10 строк по 100 символов
18.2. Перечисления
Если надо определить несколько именованных констант таким образом, чтобы все они имели разные значения, можно воспользо ваться перечисляемым типом:
enum [имя_типа] {список констант};
Константы должны быть целочисленными и могут инициализи роваться обычным образом. Если инициализатор отсутствует, то пер вая константа обнуляется, а остальным присваивается значение на единицу большее, чем предыдущее.
Enum Err{ErrRead, ErrWrite, ErrConvert);
Err error;
switch(error)
{
case ErrRead:
case ErrWrite:
case ErrConvert:
}
18.3. Структуры
Структура - это объединенное в единое целое множество поиме нованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.
Форматы определения структурного типа следующие:
s t r u c t |
им я_типа |
//с п о с о б 1 |
|
||
{ |
|
|
|
|
|
тип1 |
э л е м ен т 1; |
|
|
||
тип2 |
эл ем ен т2 ; |
|
|
||
•}; |
|
|
|
|
|
s t r u c t |
D ate |
/ /о п р е д е л ен и е |
структуры |
||
{ |
|
|
|
|
|
i n t |
d ay ; |
|
|
||
i n t |
m onth; |
|
|
||
i n t |
y e a r ; |
|
|
||
}; |
|
|
|
//п е р е м е н н а я |
типа D ate |
D ate |
b i r t h d a y ; |
||||
s t r u c t |
|
//с п о с о б 2 |
|
||
{ |
|
|
|
|
|
тип1 |
эл ем ен т1 ; |
|
|
||
тип2 |
эл ем ен т2 ; |
|
|
||
} |
сп и сок и ден ти ф и като р о в; |
|
|||
s t r u c t |
|
|
|
||
{ |
|
|
|
|
|
i n t |
m in; |
|
|
||
i n t |
s e c ; |
|
|
||
i n t |
m sec; |
|
|
||
} |
tim e _ b e g , tim e _ e n d ; |
|
В первом случае описание структур определяет новый тип, имя
которого можно использовать наряду со стандартными типами.
Во втором случае описание структуры служит определением переменных.
Структурный тип можно также задать с помощью ключевого
слова ty p e d e f : |
|
|
||
ty p e d e f |
s t r u c t |
//с п о с о б |
3 |
|
{ |
|
|
|
|
f l o a r |
r e ; |
|
|
|
f l o a t |
im ; |
|
|
|
} C om plex; |
|
|
||
Complex |
a [1 0 0 ];//м асс и в и з 100 |
комплексных чисел. |
18.3.1. Работа со структурами
Инициализация структур. Для инициализации структур значе ния ее полей перечисляют в фигурных скобках.
//п р и м е р 1 |
|
s t r u c t S tu d e n t |
|
{ |
|
c h a r |
n am e[2 0 ] ; |
i n t |
k u r s ; |
f l o a t r a t i n g ; |
S tu d e n t s = { " И в а н о в " ,1 ,3 . 5 } ;
//п р и м е р 2 s t r u c t
{
c h a r n am e[2 0 ] ; c h a r t i t l e [3 0 ] ; f l o a t r a t e ;
} em p lo y e e = { "П е т р о в ", "п р о гр ам м и ст", 10000} ;
Присваивание структур. Для переменных одного и того же структурного типа определена операция присваивания. При этом происходит поэлементное копирование.
S tu d e n t t = s ;
Доступ к элементам структур. Доступ к элементам структур обеспечивается с помощью уточненных имен:
и м я _ с т р у к т у р ы . и м я _ эл ем ен та
em p lo y ee . name - указатель на строку «Петров»;
e m p lo y e e . r a t e - переменная целого типа со значением 10000
# in c lu d e < io s tr e a m .h > v o id m a in ()
{
s t r u c t S tu d e n t
{
c h a r n am e[30] ; c h a r g r o u p [1 0 ] ; f l o a t r a t i n g ; };