函数的引入和定义

261 阅读4分钟

「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

函数的引入

引入函数可以把一个复杂的任务分解为子任务,每一个子任务都是一个较小的功能模块,通过实现这些小功能模块来实现复杂的问题,从而使得比较复杂的问题变得简单。

函数的意义

每一个C程序中包含一个main()函数和若干个其他函数。程序的执行永远是从main()函数开始的,如果主函数中调用了其他函数,那么调用完其他函数之后任会回到main函数,程序在main()函数结束的时候结束。

C语言中,所有函数之间是平行关系,任何函数都不隶属于任何一个函数,每个函数定义是独立进行的,所以函数不可以嵌套定义。

函数之间可以相互调用,也可以嵌套调用。函数还可以调用自己本身,也就是我们平时所说的递归调用。有一点需要注意的是main()函数为主函数,不允许被其他函数调用。

函数设计原则
  1. 函数功能的独立性 每一个函数应该只实现一个特定的功能,不能在此函数中实现其它功能,这样才能在主函数中调用这个函数,不然可能会对其它函数造成影响。每个函数中最好使用局部变量,以免收到外部数据的影响。

  2. 函数的层次不能过多 简单的说就是嵌套调用的函数层次不要太多。

函数的分类
  1. 库函数 库函数就是C编译系统定义好的函数,都是一些经常用到的函数,我们直接调用即可,例如一些数学计算函数,求绝对值函数fabs()、求平方根函数sqrt函数都是属于库函数。 不同的函数包含在不同的文件中,程序中如果要使用某函数,必须将包含该函数的头文件使用#include编译预处理命令包含到程序中。
  2. 用户自定义函数 由程序员自己编写的一段代码,可完成某种功能。

函数的定义

C语言中,根据函数的形式,函数可分为无参数函数和有参数函数。

函数的分类

1.无参数函数的一般定义形式 无参数函数是没有形参的函数,无参函数被调用时,调用函数不需要向无参函数传入数据。函数执行完成后不向调用者返回函数值。

类型标识符  函数名(void)
{
说明语句部分;
可执行语句部分;
}

例如:

#include <stdio.h>
woid writespr()
{
printf("-----------------\n");
}
int main()
{
writespr();
printf("this is a example!\n");
writespr();
}

2.有参数函数的一般定义形式 有参函数与无参函数的区别就是多了一个参数表,调用有参函数时,调用函数对这些参数赋予了具体的值。定义形式如下:

类型标识符  函数名(数据类型  参数[,数据类型   参数......])
{
说明语句部分;
可执行语句部分;
}

例如:

int max(int a,int b)
{
int m;
m=(a>b?a:b)
}
main()
{
int x,y,k;
scanf("%d%d",&x,&y);
k=max(x,y);
printf("%d",k);
}

其中,max()函数是一个有参函数,当main()函数调用max()函数时,必须将max()函数所需要的参数的值传入。

说明

从上面两个例子可以看出,一个函数是由函数说明部分和函数体构成的。

(1)函数说明部分 函数说明部分包括类型标识符、函数名、参数表及参数类型等。

(2)函数体 函数体是函数的语句执行部分,也是由两部分组成:说明语句部分和可执行语句部分。

  • 说明语句:主要包括声明语句、声明变量、数组、指针
  • 可执行语句:是完成函数功能的执行语句。 (3)函数定义不允许嵌套 在一个函数的函数体内,不能在定义另外一个函数。