Резюме
Применяйте функции в качестве строительных блоков для крупных программ. Каждая функция должна иметь единственное четко определенное назначение. Используйте аргументы для передачи значений в функцию и ключевое слово return для передачи значения обратно. Если функция возвращает значение не типа int, то тип функции должен быть указан в ее определении и в разделе объявлений вызывающей функции. Если необходимо, чтобы функция воздействовала на переменные в вызывающей функции, применяйте адреса и указатели.
Стандарт ANSI С предлагает механизм прототипирования функций -- мощное расширение языка, которое позволяет компиляторам проверять, корректно ли количество аргументов и правильно ли указаны их типы при вызове функции.
Функция С может вызывать саму себя; это называется рекурсией. Некоторые задачи программирования сами приспособлены под рекурсивные решения, по рекурсия может быть неэффективной в плане использования памяти и времени выполнения.
364 Глава 9
вопросы для самоконтроля
Ответы на вопросы для самоконтроля приведены в приложении А.
1. Чем отличается фактический аргумент от формального параметра?
2. Напишите заголовки ANSI С для указанных ниже функций. Речь идет только о заголовках, но не о телах.
а. Функция donut() принимает аргумент int и выводит количество нулей, соот ветствующее значению этого аргумента.
б. Функция gear() принимает два аргумента int и возвращает значение типа int.
в. Функция guess() не принимает аргументов и возвращает значение типа int.
г. Функция stuf f it() принимает значение double и адрес переменной double и запоминает первое значение в заданной ячейке.
3. Напишите заголовки ANSI С для указанных ниже функций. Речь идет только о заголовках, а не о телах.
а. Функция n to char() принимает аргумент int и возвращает значение типа
char.
б. Функция digits() принимает аргументы double и int и возвращает значение типа int.
в. Функция which() принимает в качестве аргументов два адреса значений double и возвращает адрес значения типа double.
г Функция random() не принимает аргументов и возвращает значение типа int.
4. Напишите функцию, которая возвращает сумму двух целых чисел.
5. Что придется изменить, если вообще придется, чтобы функция из вопроса 4 взамен суммировала два числа типа double?
6. Напишите функцию по имени alter(), которая принимает две переменные int, х и у, и устанавливает их значения, соответственно, в сумму и разность х и у.
7. Нет ли ошибок в следующем определении функции?
void salami(num)
{
int num, count;
for (count = 1; count <= num; num++) printf(" Здравствуйте!\n"); -
}
8. Напишите функцию, которая возвращает наибольший из трех целочисленных аргументов.
9. Задан следующий вывод:
Выберите один из следующих вариантов:
1) копировать файлы 2) переместить файлы 3) удалить файлы 4) выйти из программы
Введите номер выбранного варианта:
а. Напишите функцию, которая выводит на экран меню из четырех пронумерованных вариантов и предлагает выбрать один из них. (Вывод должен иметь показанный выше вид.)
Функции 365
б. Напишите функцию, которая имеет два аргумента int: нижний предел и верхний предел. Функция должна читать целое число из входных данных. Если это число выходит за указанные пределы, функция должна снова вывести меню (используя функцию из части а)), чтобы повторно предложить пользователю ввести новое значение. Если введенное целое значение попадает в рамки пределов, функция должна возвратить его в вызывающую функцию. Ввод нецелочисленного значения должен приводить к возвращению функцией значения, соответствующего выходу из программы (4).
в. Напишите минимальную программу, применяя функции из частей а) и б) этого вопроса. Под минимальной понимается то, что она не должна действительно выполнять действия, объявленные в меню; вы должны только отобразить варианты и получить допустимый ответ.
Упражнения по программированию
1. Напишите функцию по имени min (х, у), которая возвращает меньшее из двух значений double. Протестируйте эту функцию с помощью простого драйвера.
2. Напишите функцию по имени chline (ch, i, j), которая выводит требуемый символ в столбцах с i по j. Протестируйте эту функцию с помощью простого драйвера.
3. Напишите функцию, которая принимает три аргумента: символ и два целых числа. Символ предназначен для вывода. Первое целое значение задает количество указанных символов в строке, а второе целое число устанавливает количество таких строк. Напишите программу, в которой используется эта функция.
Читать дальше