Чтение онлайн

на главную

Жанры

Шрифт:

t = ((i&j) > (s[i]||j)?(i&j): (s[i]||j); а если скобок нет – фрагментом

t = (i&j>s[i]||j)?i&j: s[i]||j;

где условное выражение вычисляется в другом порядке.

Директива #undef применяется для отмены действия директивы #define. Синтаксис данной директивы следующий: #undef идентификатор.

Директива отменяет операцию текущего определения #define для определенного идентификатора.

19. Рекурсия

Функция является рекурсивной, когда во время обработки появляется ее

повторный вызов непосредственно или косвенно, через цепочку вызовов других функций.

Прямая (непосредственная) рекурсия – это вызов функции внутри тела этой функции.

int a

{…..a…..}

Косвенная рекурсия – это рекурсия, которая осуществляет рекурсивный вызов функции через цепочку вызова других функций. Все функции, которые входят в цепочку, тоже являются рекурсивными. Рассмотрим пример:

a{…..b…..}

b{…..c…..}

c{…..a…..}.

Все представленные функции a, b, c считаются рекурсивными, так как в случае вызова одной из них производится вызов других и самой себя.

Последовательность вызовов процедуры tn, если m = 3, можно проиллюстрировать древовидной структурой (рис. 2). Всякий раз при вызове процедуры tn под параметры n, i, j, w определяется память и запоминается место возврата. В случае возврата из процедуры tn память, которая выделяется под параметры n, i, j, w, освобождается и становится доступной память, которая выделена под параметры n, i, j, w предыдущим вызовом, а управление передается в место возврата.

Рис. Последовательность вызовов процедуры tn

Очень часто рекурсивные функции можно заменить нерекурсивными функциями или фрагментами. Это производится путем использования стеков для хранения точек вызова и вспомогательных переменных.

20. Знакомство с языком СИ++

Рассмотрим ряд программ и частей программ на C++.

Прежде всего, рассмотрим программу, которая выводит строку выдачи:

#include

main

{

cout << «Hello, world\n»; }

Строка #include дает знать компилятору, что он включил обычные возможности потока ввода и вывода, которые находятся в файле stream.h. Без таких описаний выражение cout << «Hello, world\n» не имело бы смысла. Операция << («поместить в») следует написать первый аргумент во второй (в нашем случае строку «Hello, world\n» в стандартный поток вывода cout). Строка представляет собой последовательность символов, которые заключены в двойные кавычки. В строке символ обратной косой \, после которого идет другой символ, обозначает один специальный символ; в рассмотренном случае \n служит символом новой строки. Получаем, что выводимые символы состоят из Hello, world и перевода строки. Остальная часть программы

main {… }

задает функцию, названную main. Любая программа должна включать в себя функцию с именем main, и действие программы начинается с выполнения этой функции.

Откуда появились

выходной поток cout и код, который реализует операцию вывода, были показаны в stream.h, т. е. были определены их типы, но не было дано каких-либо подробностей относительно их реализации. В стандартную библиотеку входит спецификация пространства и инициализирующий код для cout. Команда компиляции в C++ чаще всего называется CC. Она применяется так же, как команда cc для программ на C. Пусть программа с «Hello, world» находится в файле с именем hello.c, тогда можно ее скомпилировать и запустить приблизительно так ($ – системное приглашение):

$ CC hello.c $ a.out Hello,world

$

a. out является принимаемым по умолчанию именем исполняемого результата компиляции. Если необходимо назвать программу, можно осуществить это с помощью опции – o:

$ CC hello.c – o hello

$ hello Hello,world

$

21. Комментарии в СИ++

Часто бывает необходимо вставлять в программу текст, который используется в качестве комментария только для читающего программу человека и не учитывается компилятором в программе. В C++ это возможно осуществить одним из двух способов. Символы /* начинают комментарий, который заканчивается символами */. Вся данная последовательность символов эквивалентна символу пропуска. Это очень полезно для многострочных комментариев и изъятия частей программы в процессе редактирования, но стоит учитывать, что комментарии /* */ не могут быть вложенными.

Символы // начинают комментарий, заканчивающийся в конце строки, на которой они появились. Как и в предыдущем случае, вся последовательность символов соответствует пропуску. Такой способ наиболее удобен для коротких комментариев. Символы // можно применять для того, чтобы закомментировать символы /* или */, а символами /* можно закомментировать //.

Любое имя или выражение имеет тип, который определяет операции, которые могут над ними осуществляться. К примеру, описание

int inch;

дает понять, что inch имеет тип int, т. е. inch – целая переменная.

Описание представляет собой оператор, который вводит имя в программе. Описание определяет тип этого имени. Тип назначает правильное использование имени или выражения. Для целых определены такие операции: +, —, * и /. После включения файла stream.h объект типа int способен также быть вторым операндом <<, когда первый операнд ostream.

Тип объекта задает не только применяемые к нему операции, но и смысл этих операций. К примеру, оператор:

cout << inch << «in=» << inch*2.54 << «cm\n»; правильно обрабатывает четыре вводных значения разными способами. Строки печатаются буквально, а целое inch и значение с плавающей точкой inch*2.54 изменяются из их внутреннего представления в подходящее для человеческого восприятия символьное представление. В C++ существует несколько основных типов и несколько способов создавать новые.

Основные типы, которые наиболее непосредственно отвечают средствам аппаратного обеспечения, имеют вид: char short int long float double.

Поделиться:
Популярные книги

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Месть бывшему. Замуж за босса

Россиус Анна
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть бывшему. Замуж за босса

Безымянный раб

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
фэнтези
9.31
рейтинг книги
Безымянный раб

Действуй, дядя Доктор!

Юнина Наталья
Любовные романы:
короткие любовные романы
6.83
рейтинг книги
Действуй, дядя Доктор!

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Невеста вне отбора

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Невеста вне отбора

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам

Провинциал. Книга 4

Лопарев Игорь Викторович
4. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 4

Возвращение Безумного Бога 4

Тесленок Кирилл Геннадьевич
4. Возвращение Безумного Бога
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 4

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон