当程序实现的功能较为复杂时,可提取程序中的某些功能,模块化为一个函数,通过函数的调用执行某个功能,如此将一个冗杂的程序分化开来,可使程序的结构更为清晰……………
从本质意义上来说,函数就是用来完成一定的功能的。所谓函数名就是给该功能起一个名字,如果该功能是用来实现数学运算的,就是数学函数。
2 例如:想输出以下的结果,用函数调用实现
******************
How do you do!
******************
How do you do!
******************
解题思路:题中“*”号输出3行,文字输出两行,显然不必重复写这段代码,用一个函数print_star来实现输出一行“*”号的功能。再写一个print_message函数来输出中间一行文字信息,用主函数分别调用这两个函数即可。
编写程序:
#include< stdio.h>
int main()
{
void print_star(); //声明print_star函数
void print_message(); //声明print_ message函数
print_star(); //调用print_star函数
print_message(); //print_message函数
print_star(); //调用print_star函数
print_message(); //print_message函数
print_star(); //调用print_star函数
return 0;
}
void print_star() //定义print_star函数
{
printf(“******************\n”); //输出一行*号
}
void print_message() //定义print_message函数
{
printf(“How do you do!\n”); //输出一行文字信息
}
运行结果:
******************
How do you do!
******************
1 函数的分类
C语言中,函数可以按如下方法进行分类:
1) 从用户使用的角度分类
⑴标准函数(库函数):它是系统提供的,用户不必自己定义,可直接使用它们。如sin()、fabs()、sqrt() 函数等,但必须在本文件模块的开头写上:
#include <math.h>
⑵用户自定义函数:是用户为了特定的目的需要自己专门去写的函数。
2) 从函数形式分类
⑴无参函数:函数名后面的括号中无没有另何参数(相当是自变量),如上述的printstar(),调用该函数时也就不必给具体的实际参数.
⑵有参函数:函数名后面的括号中有参数(可以一个或多个),如上述的max(intx,int y),调用该函数就要相应地给出具体的实际参数,如求max(3,5)。
2 函数的定义形式
任何函数都是由函数说明部分和函数体组成的,函数的说明部分通常由函数类型(即函数结果值的类型)、函数名、形式参数(包括名字和类型)等三部分组成;而函数体则是函数的主体,主要是由该函数内的局部变量的类型声明和执行语句组成,用来完成具体的功能操作。
1) 无参函数的定义
格式:
类型名 函数名()
{
函数内的局部变量类型声明部分;
执行语句部分;
}
如:
void printstar( )
{
printf (" * * * * * ");
}
此类函数主要是为了完成某项功能而设,不需要带回返回值,所以也不需要函数的具体类型说明符。
2) 有参函数
格式:
类型说明符 函数名(形参表列)
{
函数内的局部变量类型声明部分;
执行语句部分;
}
【例1】定义一个求两个数最大值的函数。
int max (int x, int y )
{
int z;
if(x>y) z=x;
else z=y;
return(z);
}
本函数的值由变量z返回给函数调用处。
3) 空函数
格式:
类型说明符 函数名()
{
…
}
空函数什么也不做,也没任何实际作用。其主要作用表现在进行大的软件开发时,用空函数表示此处还有功能没有写完,等以后扩充函数功能时再作补充,这样人们可以集中精力,先解决主要问题,等有时间再陆续补充,且程序的可读性强、易于扩充。
说明:
(1) 函数的类型可以是任何合法的数据类型说明符,用于确定函数值的类型。
(2) 函数名可以是任何合法的标识符(字母、下划线和数字)。
(3) C程序是由一个或多个函数组成的,但仅能有一个主函数。
(4) C程序是main ( )开始,调用其他函数后该程序返回 main ( )。
(5) 所有函数地位平等,可相互调用,但不可调用 main ( )。

