------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、函数的概念
(1)一般来说,C语言源程序是由函数组成的。C源程序往往由一个主函数main和若干个别的函数组成,函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。
(2)用户可以把自己的算法编程一个个相对独立的函数模块,然后用调用的方法来使用函数。可以说C程序的全部工作都是由各种各样的函数完成的,所以也把C语言称为函数式语言。
2、函数的分类
(1)从函数定义分,函数分为库函数和用户定义函数。
(2)语言的函数兼有其他语言中的函数和过程两种功能,从这个角度看,又把函数分为有返回值函数和无返回值函数。
(3)从主调函数和被调函数之间数据传送角度看,分为无参函数和有参函数。
函数的定义和使用分为三个步骤:声明函数-定义函数-调用函数
函数的基本格式如下:
返回值类型 函数名称(函数参数){
函数体;
}
通常在我们实际使用中,往往把函数分为:无參无返回值函数,无參有返回值函数,有參无返回值函数,有參有返回值函数四种。
1--无参无返回值函数
一般形式如下:
void 函数名(){
声明部分
语句
}
无參无返回值指的是返回值是void类型,此处的void就是无返回值类型。并且函数参数部分为空,这类函数就是无參无返回值函数。
例:
void line(){
printf(“--------”);
}
2--无参有返回值函数
一般形式如下:
返回值类型 函数名(){
声明部分
语句
return 返回值类型的变量或常量 //返回给主调函数
}
此类函数有一个固定的return函数语句,用来返回给主调函数。
例:
#include <stdio.h>
int sum(); //函数的声明
int main(){ //主函数
int Sum=sum(); //调用函数
printf("%d",Sum);
return 0;
}
int sum(){
int num1=3;
int num2=5;
return num1+num2;//返回值
}
3--有参无返回值函数
一般形式如下:
void 函数名(形参参数列表){
声明部分
语句
}
其中形参列表的格式是:类型 变量名1,类型 变量名2......
例:
void line(int a,float b){
printf(“%f”,a+b);
}
4--有参有返回值函数
一般形式如下:
返回值类型 函数名(形参参数列表){
声明部分
语句
return 返回值类型的变量或常量;
}
例:
#include <stdio.h>
int sum(int a,int b); //函数的声明
int main(){
int Sum=sum(3,5); //调用函数
printf("%d",Sum);
return 0;
}
int sum(int a,int b){
return a+b; //返回值
}
注意:
1--有参函数中,实参和形参的类型要保持一致。
2--有返回值的函数,返回值类型和函数类型保持一致。
3、函数的参数
函数的参数包括实参和形参。
实参是主调函数调用函数时给函数参数赋的值,也称为实际参数。
形参是指被调函数中的参数。
如:
int sum(int a,int b){ //此处的a和b就是形参
return a+b; //sum()函数是被调函数
}
int main(){ //main函数是主调函数
int Sum=sum(3,5); //此处的3和5是实参
return 0;
}
注意:
1--形参定义后,并不会立即分配存储空间,只有在函数被调用的时候才会真正的分配存储空间。
2--如果有多个形参,应该用逗号隔开。
3--多个形参的类型可以不同。
4--实参可以是变量,也可以是常量。
4、函数的声明
所谓函数的 声明,就是告诉主调函数被调函数实际存在,如果主调函数不知道被调函数是否存在,那么程序将编译出错。所以,函数的声明应该在主调函数之前声明。
函数声明格式:
返回值类型 被调函数名称(类型 参数1,类型 参数2......);
或
返回值类型 被调函数名称(类型,类型......);
当被调函数的定义在主调函数之前,此时,就不用对被调函数进行函数声明。主调函数可以直接调用被调函数。
5、函数的调用
一般格式为:
函数名(实参列表);
当调用无參函数时,实参列表为空。实参可以是常量、变量或其它构造类型及表达式。
如:
int Sum=sum(3,5);
这样一个语句就是在本函数中调用sum函数,并且有两个参数,分别用3和5赋值,并且返回一个int型的数据赋值给Sum。
注意:变量名不能和函数名重名
6、递归函数
所谓递归函数就是在一个函数的函数体中调用自身。此时的函数既是主调函数,又是被调函数。
例:
int f(int x){
int y;
z=f(y);//函数体中调用自身f()函数
return z;
}
递归函数应用:求一个数的阶乘
#include <stdio.h>
int jiecheng(int n){
int ji;
if(n==1){
ji=1;
}else{
ji=jiecheng(n-1)*n;调用自身
}
return ji;返回ji
}
int main(){
int ji=jiecheng(5);//调用jiecheng()函数
printf("ji=%d\n",ji);
return 0;
}