c语言--函数部分

重点掌握

1.库函数
2.自定义函数
3.函数参数
4.函数调用
5.函数声明和定义
6.函数递归
1.库函数
库函数是c语言中提供给程序员用来实现一系列基础功能,方便程序员进行软件开发。
常见的库函数

  • io函数 printf()sacnf()
  • 字符串操作函数strlen()strcmp()
  • 内存操作函数 memset()memcpy()

每个库函数都对应相应的头文件,使用库函数必须引相应的头文件!
2.自定义函数
有的功能库函数不一定可以实现,所以c语言支持程序员使用自定义函数。
自定义函数和库函数一样 都要有自己的参数,返回值,函数名,

return_type fun_name(para)
{
	//语句块
}

return_type 是返回值的类型,
fun_name是函数名
para 是函数的参数
举个例子

int Max(int a,int b)
{
	return a>b? a:b;
}

Max 就是函数名 函数名后一般跟一个括号 里面是函数的参数和参数类型(int a,int b)。
3.函数的参数
函数的参数分为 实际参数形式参数
实参 :是真实传给函数的参数 ,实参可以为常量,变量,表达式,函数等,在进行函数调用时他们必须有自己确定的值 用来将参数传给形参。
形参:在函数调用的时候 将传来的实参保存到形参中,可以说形参是实参的一份拷贝。他们虽然值相等,但是在内存中并不是同一块空间。
例如:

int add(int x,int y)
{
	return x+y;
}
int main()
{
	int a = 0; 
	int b = 20;
	int ret = add(a,b);
	printf("%d", ret);
	return 0;
}

在这个例子中 传给add函数的a,b就是函数中的实际参数,而add函数内部所使用的x,y则是形式参数,是x,y的一份拷贝。
4.函数的调用
因为函数运算的时候使用的是函数的形式参数,所以在函数内部对形参的改变并不会影响函数外实际参数的值。
例如
要交换两个数的值。

void Swap(int x,int y)
{
	int t=0;
	t=x;
	x=y;
	y=t;	
}
int main()
{
	int a=10;
	int b=20;
	Swap(a,b);
	return 0;
}

这样并不会真实的改变a,b的值,因为x,y只是一份拷贝,对x,y的操作并不会影响a,b的值的变化。
所以函数调用分为
传值调用传址调用
上面这种调用就是用的传值调用,是不会修改实参的值的,
而要是真的改变两个数的交换则需要传址调用。

void Swap(int *px,int *py)
{
	int tmp=0;
	tmp=*py;
	*py=*px;
	*px=tmp;
}

这样才可以将两个数交换。
5.函数声明和定义
函数在使用之前必须先进行声明和定义,告诉编译器这个函数是什么。
函数的声明一般要放在头文件中。
6.函数递归
函数递归指的是在函数的内部直接或者间接调用自己。通常可以把一个复杂问题层层转化为一个与原问题相似的问题来求解。
函数递归必须满足两个条件

  • 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
  • 每次递归调用之后要越来越接近这个限制条件。
    例如
int fib(int n)
{
	if(n<= 2)
	return 1;
	else
	return fib(n-1)+fib(n-2);
}

这个函数就可以递归求得第n项斐波那契数列。
但是递归有一个很大的问题。当递归层数越来越深的话,又可以会不断递归递归,耗尽栈空间,会导致Stack Overflow栈溢出。
还有,这个函数进行了多次的重复计算,比如当你要求第9项的时候 你要先计算第8项和第7项。而计算第8项的时候要计算第7项和第6项…不断地进行重复计算,导致效率变低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值