亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 编程中的函数与示例:递归和内联

什么是 C 中的函数?

C 编程中的函数 是一个可重用的代码块,它使程序更易于理解、测试并且可以在不更改调用程序的情况下轻松修改。功能划分代码并模块化程序以获得更好和有效的结果。简而言之,一个较大的程序被划分为各种子程序,这些子程序被称为函数

当您将大型程序划分为各种功能时,单独管理每个功能变得容易。每当程序中出现错误时,您都可以轻松地调查错误功能并仅更正这些错误。您可以在需要时轻松调用和使用函数,从而自动节省时间和空间。

在本教程中,您将学习-

图书馆与。自定义函数

每个“C”程序至少有一个函数是主函数,但一个程序可以有任意数量的函数。 C中的main()函数是程序的起点。

在‘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

请记住,传递给 add 函数的 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。

这个计算是重复计算 fact * (fact -1) 直到 fact 等于 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”的整数变量,然后通过调用我们的阶乘函数打印其阶乘值。

考虑下面的图表,以更好地理解递归机制,它包括调用函数自身,直到达到基本情况或停止条件,然后,我们收集以前的值:

内联函数

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

上面的程序演示了使用内联函数将两个数字相加。正如我们所看到的,我们只在 inline 函数中返回了两个数字的加法,而没有编写任何额外的行。在函数调用期间,我们刚刚传递了我们必须执行加法的值。

总结


C语言

  1. 在 C++ 编程中将数组传递给函数
  2. C 编程中用户定义函数的类型
  3. C++ do...while 循环与示例
  4. 带有示例的 C++ 运算符重载
  5. 带有程序示例的 C++ 函数
  6. 带有程序示例的 C 库中的 calloc() 函数
  7. 带有示例的 Python Lambda 函数
  8. 带有示例的 Python round() 函数
  9. 带有示例的 Python map() 函数
  10. Verilog 函数
  11. C - 函数
  12. MATLAB - 函数