Алгоритмизация и программирование Си
Практическое занятие №8
«Функции»
Общие сведения о функциях
В языке С логически законченная группа операторов, которую можно вызвать для выполнения любое количество раз из различных мест программы, реализована в виде функций. Функция принимает параметры и возвращает единственное скалярное значение. Структура описания функции такова:
Заголовок_функции
{
тело_функции
}
Заголовок функции имеет вид
type имя_функции (список параметров)
type - тип возвращаемого функцией значения;
список параметров - список передаваемых в функцию величин, которые отделяются запятыми. Каждому параметру должен предшествовать его тип.
Прототипы функций
В случае, если вызываемые функции идут после функции main, структура программы будет такой (заголовки функций должны быть описаны до функции main()). Опережающие заголовки функций называют прототипами функций.
Передача параметров в функции в С
Параметры, указанные в заголовке функции, называются формальными. Параметры, передаваемые в функцию, называются фактическими.
При обращении к функции фактические параметры передают свое значение формальным и больше не изменяются. Типы, количество и порядок следования формальных и фактических параметров должны совпадать. С помощью оператора return из функции возвращается единственное значение.
Область видимости переменных в функциях С
По месту объявления переменные в языке Си можно разделить на три класса:
локальные переменные, которые объявляются внутри функции и доступны только в ней;
глобальные переменные, которые описаны до всех функций; доступны из любой функции;
формальные параметры функций описываются в списке параметров функции.
Примеры использования функций при решении практических задач
П. 1. Функция для вычисления факториала
Задача: необходимо написать программу, содержащую функцию вычисления факториала.
Практическоезанятие№8 |
Страница1 |
Алгоритмизация и программирование Си Функция вычисления факториала может выглядеть следующим образом:
long int factorial(int N)
{
long int i,f;
for(f=1, i=1; i<=N; i++) f*=i; return f;
}
Обращение к такой функции выглядит так же, как и к встроенным функциям языка.
П. 2. Вычисление чисел Фибоначчи.
Если нулевой элемент последовательности равен 0, первый – 1, а каждый последующий равен сумме двух предыдущих, то это последовательность чисел Фибоначчи (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... ).
П. 3. Простые числа.
Проверку простоты числа N оформим в виде отдельной функции с именем prostoe. Входным параметром функции будет целое число N, функция будет возвращать значение 1, если число простое и 0 - в противном случае.
Функция prostoe может выглядеть, например, так
int prostoe(long long int N) // 1 esli prostoe, 0 esli net
{
long long int i;
if (N <= 2) return 1; else
for(i=2; i<=N/2; i++) if (N%i==0) return 0;
return 1;
}
Задания для самостоятельного решения (2 балла)
Задание 1 (0.5 балла).
Напишите программу, позволяющую вычислить факториал введенного натурального числа, используя функцию вычисления факториала. С ее помощью проверьте, для какого максимального числа факториал еще вычисляется.
Задание 2 (0.5 балла).
Напишите программу, позволяющую вычислить N-е числo Фибонначи (N вводится с клавиатуры), используя функцию вычисления чисел Фибонначи.
Задание 3 (1 балл).
(0.5 балла) Напишите программу для проверки простоты чисел с использованием функций prostoe. Проверьте с ее помощью гипотезу: все числа 2^(2^n)+1 – простые. Для какого «n» эта гипотеза нарушается?
(0.5 балла) Поместите вызов функции prostoe в цикл, так чтобы можно было проверить простоту чисел в определенном диапазоне и сосчитать количество простых чисел в этом диапазоне. Сосчитайте с помощью программы и напечатайте таблицу: количество простых чисел среди 1й, 2й, ... 10й тысячи натуральных чисел.
Практическоезанятие№8 |
Страница2 |