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

Рекурсия.

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

Перегрузка функций в файле (только С++)

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

Пример

int max(int a, int b){

return (a > b ? a:b);

}

char* max(const char*s1, const char* s2){

return (strcmp(s1,s2) ? s1:s2);

}

int max(int a, char* s){

return (a > strlen(s) ? a : strlen(s));

}

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

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

Не могут перегружаться функции, имеющие неявно совпадающие типы аргументов, например int и int&.

Примеры программ

Пример1. Получение адреса числа, объяснение того, что в функции передаются копии значений

#include<stdio.h>

#include<conio.h>

void mikado(int bah)

{

int pooh = 10;

printf("B mikado(), pooh = %d и &pooh = %u\n", pooh,&pooh);

printf("В mikado(), bah = %d и &bah = %u", bah, &bah);

}

void main(void)

{

int pooh = 2, bah = 5;

void mikado(int bah);

clrscr();

printf("В main(), pooh =%d и &pooh = %u\n", pooh, &pooh);

printf("В main(), bah = %d и &bah = %u\n", bah, &bah);

mikado(pooh);

getch();

}

Пример2. Обмен значений переменных

#include <stdio.h>

#include <conio.h>

int interchange (int *u, int *v);

void main (void)

{

int x=5,y=10;

clrscr();

printf("В начале x=%d и &x=%u, y=%d и &y=%u\n",x,&x,y,&y);

interchange(&x,&y);

printf("Теперь x=%d, y=%d\n",x,y);

}

interchange (int *u,int *v)

{

int temp;

temp =*u;

*u=*v;

*v=temp;

return (0);

}

Задание на лабораторную работу № 5

Название работы: Функции.

Цель работы: Изучение способов объявления функций, классов памяти функций, рекурсии, перегрузки функций в файле.

1. Напишите функцию, возводящую число (целое число) в степень (целое число).

Контрольные вопросы:

  1. Объявление функций.

  2. Определение функций.

  3. Вызов функций.

  4. Классы памяти функций.

  5. Указатели на функцию.

  6. Рекурсия, перегрузка функций в файле.

Рекомендуемая литература

  1. Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих. - М.: Мир, 1988.- 512 с.

  2. Б. Керниган, Д. Ритчи. Язык программирования Си. - М.: Финансы и статистика, 1992.

  3. Скляров В.А. Программирование на языках С и С++: Практ пособие. – М.: Высш. шк., 1996. – 240 с: ил.

  4. Вирт Н. Алгоритмы + структуры данных = программы. -М.: Мир, 1985 г.