Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
61.doc
Скачиваний:
131
Добавлен:
11.05.2015
Размер:
451.58 Кб
Скачать

45. Рекурсивные программы.

Рекурсивными называются процедуры и функции, которые вызывают сами себя. Функцию вычисления факториала можно записать так:

intfactorial(intn)

{

if (n<=0) return 1; // рекурсия закончилась

else return n*factorial(n-1); //рекурсивный вызов

}

Функция factorialвызывает сама себя, еслиn>0.

Обычно, в программировании под рекурсией понимают такую реализацию, в которой подпрограмма использует в своем теле вызов самой себя. Такие вызовы называют рекурсивными. Когда функция А в своем теле вызывает только одну рекурсивную функцию (саму себя), то говорят о простой рекурсии. Под косвенной рекурсией понимают явление, когда рекурсивные функции вызывают друг друга (например, функция А вызывает В, а функция В вызывает А).

Прямая рекурсия:

voidA() {

операторы;

A();

oператоры;

}

Косвенная рекурсия:

voidA() {

операторы;

В();

oператоры;

}

voidВ() {

операторы;

A();

oператоры;

}

При реализации рекурсивных алгоритмов необходимо уделять внимание тому, чтобы алгоритм был конечным, т.е. выполнение рекурсивной функции должно когда-нибудь завершиться.

46. Функции для работы со строками: сравнение, копирование.

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

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

charstr[11];

Последний, 11-ый байт предназначен для нулевого символа.

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой, например, «некоторая строка».

В конец строковой константы компилятор автоматически добавляет нулевой символ.

Для обработки строк в С определено много различных библиотечных функций.

Имя функции strcpy(s1, s2) – копирование s2 в s1.

Имя функции strcmp(s1,s2) возвращает 0, еслиs1 иs2 совпадают, отрицательное значение, еслиs1<s2 и положительное значение, еслиs1>s2.

Следует помнить, что strcmp() принимает значении ЛОЖЬ, если строки совпадают.

Эти функции объявлены в заголовочном файле <string.h>.

47. Функции для работы со строками: поиск в строке.

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

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

charstr[11];

Последний, 11-ый байт предназначен для нулевого символа.

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой, например, «некоторая строка».

В конец строковой константы компилятор автоматически добавляет нулевой символ.

strchr

char *strchr(const char *str, int c);

ищет в строке strпервое вхождение символа с. Возвращает NULL, если символ в строке отсутствует.

strrchr

char *strrchr (const char *str, int c);

ищет в строке str последнее вхождение символа с. Возвращает NULL, если символ в строке отсутствует.

strstr

char *strstr (const char *str1, const char *str2);

ищет в строке str1 подстрокуstr2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2., или NULL, если подстрока str2 в строке str1 отсутствует.

strpbrk

char *strpbrk(const char *str1, const char *str2);

ищет в строке str1 первое вхождение любого символа из строки str2. Возвращает NULL, если такой символ в строке отсутствует.

strtok

char *strtok(char *str1, const char *str2);

ищет в строке str1 лексемы, выделенные символами из второй строки str2.