Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Функции в программировании на C с примерами:рекурсивные и встроенные

Что такое функция в C?

Функция в программировании на C это повторно используемый блок кода, который упрощает понимание и тестирование программы, а также позволяет легко модифицировать ее без изменения вызывающей программы. Функции разделяют код и модулируют программу для получения лучших и эффективных результатов. Короче говоря, большая программа делится на различные подпрограммы, которые называются функциями

Когда вы делите большую программу на различные функции, становится легко управлять каждой функцией по отдельности. Всякий раз, когда в программе возникает ошибка, вы можете легко исследовать неисправные функции и исправлять только эти ошибки. Вы можете легко вызывать и использовать функции всякий раз, когда они требуются, что автоматически приводит к экономии времени и места.

В этом уроке вы узнаете-

Библиотека против. Пользовательские функции

Каждая программа на языке C имеет по крайней мере одну функцию, которая является основной, но программа может иметь любое количество функций. Функция main() в C является отправной точкой программы.

В программировании на языке C функции делятся на два типа:

  1. Библиотечные функции
  2. Пользовательские функции

Разница между библиотечной и пользовательской функциями в C заключается в том, что нам не нужно писать код для библиотечной функции. Он уже присутствует внутри заголовочного файла, который мы всегда включаем в начале программы. Вам просто нужно ввести имя функции и использовать его вместе с правильным синтаксисом. Printf, scanf — примеры библиотечной функции.

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

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

Функции программирования C разделены на три действия, такие как,

  1. Объявление функции
  2. Определение функции
  3. Вызов функции

Объявление функции

Объявление функции означает написание имени программы. Это обязательная часть для использования функций в коде. В объявлении функции мы просто указываем имя функции, которую собираемся использовать в нашей программе, подобно объявлению переменной. Мы не можем использовать функцию, если она не объявлена ​​в программе. Объявление функции также называется «Функция прототип». .”

Объявления функций (называемые прототипами) обычно выполняются над функцией main() и имеют общий вид:

return_data_type function_name (data_type arguments);

Мы рассмотрим следующую программу, которая показывает, как объявить функцию куба для вычисления кубического значения целочисленной переменной

#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

Обсуждаем детали программы:

  1. Мы объявляем целочисленную глобальную переменную с 1348 в качестве начального значения.
  2. Мы объявляем и определяем функцию test(), которая не принимает аргументы и не возвращает значение. Эта функция выводит только значение глобальной переменной, чтобы продемонстрировать, что глобальные переменные доступны в любом месте программы.
  3. Мы печатаем глобальную переменную внутри основной функции.
  4. Мы вызываем тестовую функцию, чтобы напечатать значение глобальной переменной.

В 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

Здесь мы обсуждаем детали программы:

  1. Мы объявляем нашу рекурсивную факториальную функцию, которая принимает целочисленный параметр и возвращает факториал этого параметра. Эта функция будет вызывать себя и уменьшать число до тех пор, пока не будет достигнуто выходное или базовое условие. Когда условие истинно, ранее сгенерированные значения будут умножены друг на друга, и будет возвращено окончательное значение факториала.
  2. Мы объявляем и инициализируем целочисленную переменную со значением "6", а затем печатаем ее значение factorial, вызывая нашу функцию factorial.

Рассмотрим следующую диаграмму, чтобы лучше понять рекурсивный механизм, который состоит в вызове самой функции до тех пор, пока не будет достигнут базовый случай или условие остановки, а после этого мы собираем предыдущие значения:

Встроенные функции

Функция в программировании на C используется для хранения наиболее часто используемых инструкций. Он используется для модуляции программы.

Всякий раз, когда вызывается функция, указатель инструкции переходит к определению функции. После выполнения функции указатель инструкции возвращается к оператору, с которого он перешел к определению функции.

Всякий раз, когда мы используем функции, нам требуется дополнительный указатель, чтобы перейти к определению функции и вернуться к оператору. Чтобы устранить необходимость в таких указателях, мы используем встроенные функции.

Во встроенной функции вызов функции напрямую заменяется фактическим программным кодом. Он не переходит ни к какому блоку, потому что все операции выполняются внутри встроенной функции.

Встроенные функции в основном используются для небольших вычислений. Они не подходят, когда речь идет о больших вычислениях.

Встроенная функция похожа на обычную функцию, за исключением того, что ключевое слово 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

  1. Передача массива в функцию в программировании на C++
  2. Типы пользовательских функций в программировании на C
  3. Цикл C++ do…while с примерами
  4. Перегрузка оператора C++ с примерами
  5. Функции C++ с примерами программ
  6. Функция calloc() в библиотеке C с программой ПРИМЕР
  7. Лямбда-функции Python с ПРИМЕРАМИ
  8. Функция Python round() с ПРИМЕРАМИ
  9. Функция Python map() с ПРИМЕРАМИ
  10. Верилог-функции