Краткие теоретические сведения. Функция –это вспомогательная программа (подпрограмма), предназначенная для получения некоторого объекта-результата (например

Функция –это вспомогательная программа (подпрограмма), предназначенная для получения некоторого объекта-результата (например, числа). Функция имеет следующий вид:

Тип_результата Имя_функции ([Список_параметров])

{

Тело_функции

}

Тип_результата ­­– это тип возвращаемого из функции результата. Типом возвращаемого значения может быть любой тип данных, кроме массива или функции, но может быть указатель на массив или указатель на функцию. Если тип возвращаемого значения void, то это означает, что функция не возвращает никакого значения.

Имя_функции – это любой правильно написанный идентификатор.

Список_параметров – это список разделенных запятыми объявлений тех параметров, которые получает функция при вызове. Для каждого параметра, передаваемого в функцию, указывается его тип и имя. Если функция не получает никаких значений, список параметров задается как void, т.е. список параметров пустой.

Тело_функции – это блок или составной оператор. В теле функции может быть оператор return, который возвращает полученное значение функции в точку вызова. Он имеет следующую форму:

returnвыражение;

Любая функция должна быть объявлена (прототип функции), вызвана и определена (описание функции).

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

Прототип функции имеет следующий вид:

Тип_результата Имя_функции ([Список_параметров]);

Пример прототипа функции fun, которая получает три целых числа и одно вещественное, а возвращает вещественное значение:

doublefun(int, int, int, double);

При вызове (активизации) функции указываются: имя функции и фактические параметры (т.е. значения, которые передаются при вызове функции).

Существуют два способа передачи параметров в функцию: по адресу (с помощью указателя) и по значению.

Определение функции содержит, кроме объявления, тело функции, которое представляет собой последовательность описаний и операторов.

 

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

Для того чтобы найти последнюю цифру числа, надо взять остаток от его деления на 10. Затем делим число на 10, отбрасывая его последнюю цифру, и т.д. Сложив все эти остатки-цифры, мы получим сумму цифр числа.

#include <stdio.h>

#include <conio.h>

int SumDigits (int N) // заголовок функции

{ // начало функции

int d, sum = 0; // тело функции

while (N != 0 )

{

d = N % 10;

sum = sum + d;

N = N / 10;

}

return sum ; // возврат суммы

}

void main()

{

int N, s ;

puts( “Введите целое число “);

scanf (“%d”, &N);

s = SumDigits (N) // Вызов функции

printf (“ Сумма цифр числа %d = %d\n”, N, s );

getch();

}

Логические функции

Очень часто надо составить функцию, которая просто решает какой-то вопрос и отвечает на вопрос «Да» или «Нет». Такие функции называются логическими. В языке Си ноль означает ложное условие, а единица – истинное.

Логическая функция –это функция, возвращающая 1(если ответ «Да») или 0(если ответ «Нет»). Логические функции используются, главным образом, в двух случаях:

• если надо проанализировать ситуацию и ответить на вопрос, от которого зависят дальнейшие действия программы;

• если надо выполнить какие-то сложные операции и определить, была ли при этом какая-то ошибка.

Пример.Ввести число N и определить, простое оно или нет. Использовать функцию, которая отвечает на этот вопрос.

Теперь расположим тело функции ниже основной программы. Чтобы транслятор знал об этой функции во время обработки основной программы, надо объявить её заранее.

#include <stdio.h>

#include <conio.h>

int Prime (int N); // объявление функции

void main()

{

int N;

puts( “Введите целое число “);

scanf (“%d”, &N);

if ( Prime(N) ) // Вызов функции

printf (“ Число %d – простое\n”, N );

else printf (“ Число %d – составное\n”, N );

getch();

}

int Prime (int N) // описание функции

{

for ( int i=2; i*i <=N; i++ )

if ( N % i = = 0) return 0 ; // нашли делитель – составное

return 1 ; // не нашли ни одного делителя – простое

}