1.函数声明
1.1函数声明格式(函数原型后面加上分号)
int max(int x,int y); //完整清晰,参数意义明确
int max(int,int); //精炼,参数意义不明确
1.2函数声明位置
1.2.1 在文件开头声明,即本文件都可以使用
1.2.2 在某个函数内部声明,只能在具有声明的函数内使用
1.2.3 如果主调函数在被调函数的后面,则可以省略声明
例:文件开头声明(主函数明确,如果子函数过多,主函数不太好找,因此,子函数放后面更好一下,这样只需声明就行)
#include <stdio.h>
/*五个人,第五个比第四大两岁,第四个比第三个大两岁...最后一个学生说他10岁,请问第五个学生多少岁?*/
int nian(int s);
int main()
{
int a,b;
printf("已知第一个学生10岁,下一个比上一个大两岁\n请输入您要求第几个人的岁数:");
scanf("%d",&a);
b=nian(a);
printf("第%d个人的岁数为%d",a,b);
return 0;
}
int nian(int s)
{
int ret;
if(s==1)
ret=10;
else
ret=nian(s-1)+2;
return ret;
}
2.函数嵌套调用
C语言的函数之间是相互平行的、独立的,不允许函数内部定义另一个函数;但可以函数内部调用一个函数,调用函数又调用另一个函数,也就是嵌套调用。
例:输入4个整数,找出其中最大的数,用函数的嵌套调用处理
#include <stdio.h>
/*这两个函数在主调函数前,可省略声明*/
int mm(int num_1,int num_2)
{
//int ret;
//ret=num_1>num_2 ?num_1:num_2;
return num_1>num_2 ?num_1:num_2;
}
int numax(int num_1,int num_2,int num_3,int num_4)
{
int ret;
ret=mm(num_1,num_2);
ret=mm(ret,num_3);
ret=mm(ret,num_4);
return ret;
}
int main()
{
int num_1,num_2,num_3,num_4,max;
printf("比较四个数,找出最大值(输入时中间用空格隔开):\n");
scanf("%d %d %d %d",&num_1,&num_2,&num_3,&num_4);
max=numax(num_1,num_2,num_3,num_4);
printf("这几个数中的最大值为:%d",max);
return 0;
}
3.函数递归调用
调用一个函数的过程中又出现直接或间接的调用该函数本身,称为递归调用。
例:用递归方法求n!
#include <stdio.h>
int fun(int num); //声明函数
int main()
{
int a,b;
printf("求该数的阶乘\n请输入这个数:");
scanf("%d",&a);
b=fun(a);
printf("这个数的阶乘为:%d",b);
return 0;
}
int fun(int num)
{
int ret;
if(num==1)
ret=1;
else
ret=fun(num-1)*num;
return ret;
}