Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Резюме
Применяйте функции в качестве строительных блоков для крупных программ. Каждая функция должна иметь единственное четко определенное назначение. Используйте аргументы для передачи значений в функцию и ключевое слово 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. Напишите функцию, которая принимает три аргумента: символ и два целых числа. Символ предназначен для вывода. Первое целое значение задает количество указанных символов в строке, а второе целое число устанавливает количество таких строк. Напишите программу, в которой используется эта функция.
4. Среднее гармоническое значение двух чисел получается путем инвертирования этих чисел, вычисления среднего значения инверсий и получения инверсии результата. Напишите функцию, которая принимает два аргумента double и возвращает среднее гармоническое значение этих двух чисел.
5. Напишите и протестируйте функцию по имени larger of(), которая заменяет содержимое двух переменных double большим из их значений. Например, вызов larger of (х, у) присвоит переменным х и у большее из их значений.
6. Напишите и протестируйте функцию, которая принимает в качестве аргументов адреса трех переменных double и помещает наименьшее значение в первую переменную, среднее значение — во вторую, а наибольшее значение — в третью.
7. Напишите программу, которая читает символы из стандартного ввода вплоть до конца файла. Для каждого символа программа должна сообщать, является ли он буквой. Если символ — буква, программа вдобавок должна сообщать ее порядковый номер в алфавите. Например, буквы с и С будут иметь номер 3. Предусмотрите в программе функцию, которая принимает символ в качестве аргумента и возвращает его порядковый номер в алфавите, если он является буквой, и -1 в противном случае.
8. В главе 6 была показана функция power() (листинг 6.20), которая возвращает результат возведения числа double в положительную целую степень. Усовершенствуйте эту функцию, чтобы она корректно возводила числа в отрицательные степени. Кроме того, добавьте в функцию возможность оценки как 0 результата возведения 0 в любую степень кроме 0 и оценки как 1 результата
366 Глава 9
возведения любого числа в степень 0. (Функция должна сообщать, что результат возведения 0 в степень 0 не определен и что она использует значение 1.) Примените цикл. Протестируйте функцию в какой-нибудь программе.
9. Еще раз выполните упражнение 8, но на этот раз используйте рекурсивную функцию.
10. Обобщите функцию to binary() из листинга 9.8 до функции to base n(), которая принимает второй аргумент в диапазоне от 2 до 10. Она должна выводить число, переданное в первом аргументе, в системе счисления с основанием, которое указано во втором аргументе. Например, вызов to_base_n (129,8) должен отобразить 201, т.е. восьмеричный эквивалент числа 129. Протестируйте готовую функцию в какой-нибудь программе.
Читать дальшеИнтервал:
Закладка: