Функции в программировании на C с примерами: рекурсивные и встроенные
Что такое функция в C?
Функция в программировании на C — это многократно используемый блок кода, который упрощает понимание и тестирование программы и который можно легко модифицировать без изменения вызывающей программы. Функции разделяют код и модулируют программу для достижения лучших и эффективных результатов. Короче говоря, большая программа делится на различные подпрограммы, которые называются функциями.
Когда вы разделяете большую программу на различные функции, становится легко управлять каждой функцией индивидуально. Всякий раз, когда в программе возникает ошибка, вы можете легко исследовать ошибочные функции и исправить только эти ошибки. Вы можете легко вызывать и использовать функции, когда они необходимы, что автоматически приводит к экономии времени и места.
Библиотека против. Пользовательские функции
Каждая программа на языке C имеет по крайней мере одну функцию, которая является основной, но программа может иметь любое количество функций. Функция main() в C — это отправная точка программы.
В программировании на языке C функции делятся на два типа:
- Библиотечные функции
- Пользовательские функции
Разница между библиотечными и пользовательскими функциями в C заключается в том, что нам не нужно писать код для библиотечной функции. Он уже присутствует в заголовочном файле, который мы всегда включаем в начало программы. Вам просто нужно ввести имя функции и использовать его вместе с правильным синтаксисом. Printf, scanf — примеры библиотечных функций.
Принимая во внимание, что определяемая пользователем функция — это тип функции, в котором нам приходится писать тело функции и вызывать ее всякий раз, когда нам требуется, чтобы функция выполнила какую-либо операцию в нашей программе.
Пользовательская функция на языке C всегда пишется пользователем, но позже она может стать частью библиотеки C. Это главное преимущество программирования на языке C.
Функции программирования на языке C разделены на три вида деятельности, такие как:
- Объявление функции
- Определение функции
- Вызов функции
Объявление функции
Объявление функции означает написание имени программы. Это обязательная часть для использования функций в коде. В объявлении функции мы просто указываем имя функции, которую собираемся использовать в нашей программе, как при объявлении переменной. Мы не можем использовать функцию, если она не объявлена в программе. Объявление функции также называется «Функция». прототип".
Объявления функций (называемые прототипом) обычно выполняются над функцией main() и имеют общий вид:
return_data_type function_name (data_type arguments);
- В return_data_type: тип данных функции значения, возвращаемой обратно в вызывающую инструкцию.
- В имя_функции: за ним следуют круглые скобки
- аргументы имена с объявлениями типов данных (необязательно) помещаются в круглые скобки.
Рассмотрим следующую программу, которая показывает, как объявить кубическую функцию для вычисления кубического значения целочисленной переменной.
#include <stdio.h> /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main() {
Имейте в виду, что функция не обязательно возвращает значение. В данном случае используется ключевое слово void.
Например, объявление функции output_message указывает, что функция не возвращает значение: void output_message();
Определение функции
Определение функции означает просто написание тела функции. Тело функции состоит из операторов, выполняющих определенную задачу. Тело функции состоит из одного или блока операторов. Это также обязательная часть функции.
int add(int a,int b) //function body { int c; c=a+b; return c; }
Вызов функции
Вызов функции означает вызов функции всякий раз, когда она требуется в программе. Всякий раз, когда мы вызываем функцию, она выполняет операцию, для которой была разработана. Вызов функции — это необязательная часть программы.
result = add(4,5);
Вот полный код:
#include <stdio.h> int add(int a, int b); //function declaration int main() { int a=10,b=20; int c=add(10,20); //function call printf("Addition:%d\n",c); getch(); } int add(int a,int b) //function body { int c; c=a+b; return c; }
Вывод:
Addition:30
Аргументы функций
Аргументы функции используются для получения необходимых значений при вызове функции. Они соответствуют положению; первый аргумент передается первому параметру, второй — второму параметру и так далее.
По умолчанию аргументы передаются по значению в котором копия данных передается вызываемой функции. Фактически переданная переменная не изменится.
Рассмотрим следующую программу, демонстрирующую параметры, передаваемые по значению:
int add (int x, int y); int main() { int a, b, result; a = 5; b = 10; result = add(a, b); printf("%d + %d\ = %d\n", a, b, result); return 0;} int add (int x, int y) { x += y; return(x);}
Вывод программы:
5 + 10 = 15
Имейте в виду, что значения a и b, переданные в функцию добавления, не были изменены, поскольку в параметр x было передано только его значение.
Переменная область
Область видимости переменных означает видимость переменных в коде программы.
В C переменные, объявленные внутри функции, являются локальными для этого блока кода и на них нельзя ссылаться вне функции. Однако переменные, объявленные вне всех функций, являются глобальными и доступны из всей программы. Константы, объявленные с помощью #define в верхней части программы доступны из всей программы. Рассмотрим следующую программу, которая выводит значение глобальной переменной из основной и пользовательской функции:
#include <stdio.h> int global = 1348; void test(); int main() { printf("from the main function : global =%d \n", global); test () ; return 0;} void test (){ printf("from user defined function : global =%d \n", global);}
Результат:
from the main function : global =1348 from user defined function : global =1348
Обсуждаем детали программы:
- Мы объявляем целочисленную глобальную переменную с начальным значением 1348.
- Мы объявляем и определяем функцию test(), которая не принимает аргументы и не возвращает значения. Эта функция печатает только значение глобальной переменной, чтобы продемонстрировать, что к глобальным переменным можно получить доступ в любом месте программы.
- Мы печатаем глобальную переменную внутри основной функции.
- Мы вызываем тестовую функцию, чтобы напечатать значение глобальной переменной.
В C, когда аргументы передаются параметрам функции, параметры действуют как локальные переменные, которые будут уничтожены при выходе из функции.
Когда вы используете весы для поддона глобальные переменные, используйте их с осторожностью, поскольку это может привести к ошибкам и они могут измениться в любом месте программы. Перед использованием их следует инициализировать.
Статические переменные
Статические переменные имеют локальную область видимости. Однако они не уничтожаются при выходе из функции. Таким образом, статическая переменная сохраняет свое значение навсегда, и к ней можно получить доступ при повторном входе в функцию. Статическая переменная инициализируется при объявлении и требует префикса static.
Следующая программа использует статическую переменную:
#include <stdio.h> void say_hi(); int main() { int i; for (i = 0; i < 5; i++) { say_hi();} return 0;} void say_hi() { static int calls_number = 1; printf("Hi number %d\n", calls_number); calls_number ++; }
Программа отображает:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Рекурсивные функции
Рассмотрим факториал числа, которое вычисляется по формуле: 6! =6*5*4*3*2*1.
Этот расчет выполняется как многократное вычисление факта * (факт -1), пока факт не станет равным 1.
Рекурсивная функция — это функция, которая вызывает саму себя и включает условие выхода для завершения рекурсивных вызовов. В случае расчета факториала условием выхода является факт, равный 1. Рекурсия работает путем «наложения» вызовов до тех пор, пока условие выхода не станет истинным.
Например:
#include <stdio.h> int factorial(int number); int main() { int x = 6; printf("The factorial of %d is %d\n", x, factorial(x)); return 0;} int factorial(int number) { if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number - 1)); }
Программа отображает:
The factorial of 6 is 720
Здесь мы обсуждаем детали программы:
- Мы объявляем нашу рекурсивную функцию факториала, которая принимает целочисленный параметр и возвращает факториал этого параметра. Эта функция будет вызывать сама себя и уменьшать число до тех пор, пока не будет достигнуто выходное или базовое условие. Если условие истинно, ранее сгенерированные значения будут умножены друг на друга, и будет возвращено окончательное значение факториала.
- Мы объявляем и инициализируем целочисленную переменную со значением «6», а затем печатаем ее значение факториала, вызывая нашу функцию факториала.
Рассмотрим следующую диаграмму, чтобы лучше понять рекурсивный механизм, который заключается в вызове самой функции до тех пор, пока не будет достигнут базовый случай или условие остановки, и после этого мы собираем предыдущие значения:
Встроенные функции
Функция в программировании на языке C используется для хранения наиболее часто используемых инструкций. Он используется для модульной организации программы.
Всякий раз при вызове функции указатель инструкции переходит к определению функции. После выполнения функции указатель инструкции возвращается к оператору, из которого он перешел к определению функции.
Всякий раз, когда мы используем функции, нам требуется дополнительный указатель head, чтобы перейти к определению функции и вернуться к оператору. Чтобы устранить необходимость в таких указателях, мы используем встроенные функции.
Во встроенной функции вызов функции напрямую заменяется реальным программным кодом. Он не переходит ни к одному блоку, поскольку все операции выполняются внутри встроенной функции.
Встроенные функции в основном используются для небольших вычислений. Они не подходят, когда задействованы большие вычисления.
Встроенная функция похожа на обычную функцию, за исключением того, что ключевое слово inline помещается перед именем функции. Встроенные функции создаются с помощью следующего синтаксиса:
inline function_name () { //function definition }
Давайте напишем программу для реализации встроенной функции.
inline int add(int a, int b) //inline function declaration { return(a+b); } int main() { int c=add(10,20); printf("Addition:%d\n",c); getch(); }
Вывод:
Addition: 30
Приведенная выше программа демонстрирует использование встроенной функции для сложения двух чисел. Как мы видим, мы вернули сложение двух чисел внутри встроенной функции только без написания дополнительных строк. Во время вызова функции мы только что передали значения, которые необходимо сложить.
Итого
- Функция — это мини-программа или подпрограмма.
- Функции используются для модульной организации программы.
- Библиотечные и пользовательские — это два типа функций.
- Функция состоит из объявления, тела функции и части вызова функции.
- Объявление функции и тело являются обязательными.
- Вызов функции может быть необязательным в программе.
- Программа C имеет хотя бы одну функцию; это основная функция ().
- Каждая функция имеет имя, тип данных возвращаемого значения или пустоту, параметры.
- Каждая функция должна быть определена и объявлена в вашей программе на языке C.
- Имейте в виду, что обычный переменные в функции C уничтожаются, как только мы выходим из вызова функции.
- Аргументы, переданные функции, не будут изменены, поскольку они передаются по значению, а не по адресу.
- Область видимости переменных называется видимостью переменных внутри программы.
- В программе есть глобальные и локальные переменные. C программирование