函数调用

一、函数分类:从函数定义角度分为:库函数,用户定义函数。从返回值来分:有返回值得函数,无返回值函数。从参数类型分:无参函数,有参函数。
下面是调用函数例子:

#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函数
	return 0;
}

void print_star()				//定义print_star函数
{
	printf("*****************\n");
}
void print_message()			//定义print_message函数
{
	printf("how do you da!\n");
}

二、定义函数的方法
1、类型名 函数名()
{
函数体
}
2、定义有参函数


    int max(int x,int y)
    {
	int z;
	z=x>y ?x:y;
	return z;
    }

3、定义空函数

void dummy()
{}

注意:
函数类型名为:int ,float ,char,等时,函数需要有返回值给主调函数;当函数名为void类型时,函数无返回值给主调函数.
三、调用函数。
1.函数调用一般形式为:
函数调用语句
函数表达式
函数参数
四、函数调用时的数据传递
1、形式参数和实际参数:
在调用有参函数时,主调函数和被调函数有数据关系
2、
实参和形参间的数据传递
在调用函数过程中,系统会把实参的值传递给被调函数的形参、
例:

int max(int x,int y)			//定义max函数
{
	int z;                     //定义临时变量	
	z=x>y? x:y;		//将最大值赋给z
	return z;		//把z作为max函数的值返回到main函数中
}

#include<stdio.h>
int main()
{
	int max(int x,int y);			//对max函数的声明
	int a,b,c;					
	printf("please enter two number:");
	scanf("%d%d",&a,&b);
	c=max(a,b);				//调用max函数,将a,b的值分别赋给x,y
	printf("max is %d\n",c);
	return 0;
}

在这里插入图片描述

五、函数的嵌套调用
函数可以嵌套调用,但不能嵌套定义。
例:输入四个数判断大小。

#include<stdio.h>
int main()
{		
	int max4(int a,int b,int c,int d);			//定义max4函数
	int a,b,c,d,max;
	scanf("%d%d%d%d",&a,&b,&c,&d);
	max=max4(a,b,c,d);				//对max4函数进行调用
	printf("%d\n",max);
	return 0;
}
int max4(int a,int b,int c,int d)
{
	int max2(int a,int b);				//定义max2函数
	int m;
	m=max2(a,b);					//对max2函数进行调用,将a,b的最大值赋给m;
	m=max2(m,c);					//对max2函数进行调用,将m,c的最大值赋给m;
	m=max2(m,d);					//对max2函数进行调用,将m,d的最大值赋给m;
	return m;						//将四个数中最大值返回但mian函数中
}
int max2(int a,int b)
{
	int z;
	z=a>b? a:b;
	return z;

}

在这里插入图片描述
上面这个代码即是嵌套调用,在main函数中调用max4,在max4函数中调用max2,将max2的值返回到max4,将max4的值返回到main函数中。

六、函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为递归调用。
例:求n!的值

#include<stdio.h>
int main()
{
	int fac(int n);
	int n;
	int y;
	printf("input an integer number\n");
	scanf("%d",&n);
	y=fac(n);
	printf("%d\n",y);
	return 0;
}
int fac(int n)
{
	int f;
	if(n<0)
	printf("n<0,data errors");	
	else if(n==0||n==1)		//n=0或n!=1
	f=1;
	else
	f=n*fac(n-i);				//n>1时,n!=n*(n-1)
	return f;
}

在这里插入图片描述

从函数体中分析f=fac(1)*2,再调用fac(1),返回值为1.这个值就取代了f=fac(1)2中的fac(1),从而f=12=2.递归终止条件n=0或n=1。
七、数组作为函数参数
1、数组元素作函数实参。
在用数组元素作函数实参时,把实参的值传给形参,是值传递方式,数据传递的方向是从实参传到形参,单向传递。

int main()
{
float average(float array[10]);
 float a[10];
 for(i=0;i<9;i++)
 scanf("%d",a[i]);
 int aver;
 aver=average(a);				//向被调函数传入数组
}
float average(float array[10])			//定义average函数
{

}

用数组元素作实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参传递的是数组首元素的地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值