C语言的函数

函数是C语言的基本构成之一,是命名了的程序块。

函数定义

函数定义的通用格式为:

返回类型 函数名 (形式参数)
{
    函数体
}

函数的返回类型是函数返回值的类型,不能是数组,指定为void说明没有返回类型。函数的形式参数是在定义函数时声明调用函数时需要的变量,必须说明其类型,多个形式参数用,分隔,其初始值在函数调用时由实际参数提供。函数体包含声明和语句,函数内声明的变量专使用局限在此函数内,可以为空。

/**************************************
 * function_define.c                  *
 *                                    *
 * C语言中的函数定义                     *
 **************************************/

#include <stdio.h>

float average(float a, float b)
{
  return (a + b) / 2;
}

int main()
{
  float a = 0.0f;
  printf("输入a: ");
  scanf("%f", &a);
  float b = 0.0f;
  printf("输入b: ");
  scanf("%f", &b);
  printf("a和b的平均数是%g\n", average(a,b));
  return 0;
}

函数定义

函数声明和函数原型

函数需要在其被调用之前定义或者在函数调用之前声明该函数。和变量声明类型,函数声明告诉编译器这个函数是实际存在的,其定义在某个文件中。函数声明的格式如下,是函数定义的第一行在末尾加;

返回类型 函数名(形式参数);

函数的声明必须和函数一致,可省略函数形参的名字,函数声明也称为函数原型。

/**************************************
 * function_declare.c                 *
 *                                    *
 * C语言中的函数声明                     *
 **************************************/

#include <stdio.h>

/*函数原型*/
float average(float a, float b);

int main()
{
  float a = 0.0f;
  printf("输入a: ");
  scanf("%f", &a);
  float b = 0.0f;
  printf("输入b: ");
  scanf("%f", &b);
  printf("a和b的平均数是%g\n", average(a,b));
  return 0;
}

float average(float a, float b)
{
  return (a + b) / 2;
}

函数声明和函数原型

函数调用

函数调用由函数名和紧随其后的由圆括号包裹起来的实际参数组成,各实际参数用,分隔。函数调用时后面的圆括号是必须的,对于没有声明形式参数的函数也需要。实际参数是通过值传递的,对形式参数的改变不会影响实际参数的值。

数组常用作函数的实际参数,但C语言没有提供确定传递给它的数组的长度的简单方法,而且在函数体内使用sizeof计算出作为形式参数的数组变量的长度是不正确的。所以如果需要数组的长度,需要将长度作为额外的实际参数传入。数组作为函数参数的声明格式如下:

返回类型 函数名(数组类型 数组名[],...);

调用时直接传入数组名,不需要后面的[]。但数组为多维数组时,只能忽略第一维的长度,其他维的长度必须在数组名后列出来:

返回类型 函数名(数组类型 数组名[][LEN][LEN2]...,...);

void函数使用return语句返回值,并跳出函数的执行。在void函数也可以使用return;语句跳转程序的执行。

/**************************************
 * function_array.c                   *
 *                                    *
 * C语言数组作为函数实际参数          *
 **************************************/

#include <stdio.h>
#define N 10

int sum_array(int a[])
{
  int sum = 0;

  int i = 0;
  for (i = 0; i < N; i++)
  {
    sum += a[i];
  }

  return sum;
}

int main()
{
  int a[N] = {0};

  printf("输入10个整数:");
  int i = 0;
  for (i = 0; i < N; i++)
  {
    scanf("%d",&a[i]);
  }

  printf("十个整数的和为%d\n", sum_array(a));
  return 0;
}

数组作为函数参数

exit函数

exit函数是终止程序的一种方法,在main函数中和return语句的作用相同,在其他函数中,return只是从当前函数返回,而exit是退出程序的执行。exit所在的头文件为stdlib.h,传递的实际参数若是0表示正常退出,否则表示异常终止。EXIT_SUCCESSEXIT_FAILURE是在stdlib.h中定义的明确表示这两类而定义的两个宏,其值与实现有关,典型值为0和1.

/**************************************
 * function_exit.c                    *
 *                                    *
 * exit函数                           *
 **************************************/

#include <stdio.h>
#include <stdlib.h>

int sum(int a, int b)
{
  if (a < 0)
    exit(EXIT_FAILURE);

  return a + b;
}

int main()
{
  int a = 0;
  int b = 0;
  printf("输入a:");
  scanf("%d", &a);
  printf("输入b:");
  scanf("%d", &b);

  if (b < 0)
    exit(EXIT_FAILURE);

  printf("a和b的和为%d\n", sum(a, b));

  exit(EXIT_SUCCESS);
}

exit函数

递归函数

递归函数是调用自身的函数,递归函数必须声明终止条件,保证在有限的步骤后结束。

/**************************************
 * function_recursive.c               *
 *                                    *
 * C语言中的递归函数                  *
 **************************************/

#include <stdio.h>

int frac(int n)
{
  if (n <= 1)
    return 1;

  return n * frac(n - 1);
}

int main()
{
  unsigned int n;
  printf("输入一个正整数:");
  scanf("%u", &n);

  printf("%d! = %d\n", n, frac(n));

  return 0;
}

递归函数

参考文献

  1. K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值