6 C++函数

6 函数

6.1 函数的定义

求平方根函数r = squrt(100.0);
已知底数x,幂指数y,求幂函数k = pow(x, y);
求一个字符串的长度i = strlen(str1);
比较两个字符串的大小v = strcmp(str1, str2);
把字符串转换为相应的整数n = atoi(str1);

返回值类型 函数名(参数列表)
{
	函数体语句
	return 表达式
}

在这里插入图片描述
根据需要可以定义有无返回值,有无输入参数。main也可以带输入参数。

6.2 函数的声明

函数定义的位置可以在main之前,也可以在main之后。
如果函数定义写在main之前,就不用写函数的声明;
如果函数定义在main之前,就要写上函数声明float max(float, float);,它也叫函数的原型。函数的原型=返回值类型 + 函数名 +参数类型。
在这里插入图片描述

6.3 函数的执行

每一个函数都开辟一块新的空间。
在这里插入图片描述

6.4 全局变量 vs 局部变量

当全局变量与局部变量同名时,局部变量将在自己作用与内有效,他将屏蔽同名的全局变量。
不在非必要情况下,不要使用全局变量。

#include<iostream>
using namespace std;
int a = 0, b = 0;
void exchange(int a,int b)
{
	int p;
	if (a < b)
	{
		p = a; a = b; b = p;
	}
}
int main()
{
	a = 3; b = 5;
	exchange(a,b);
	cout << a << ' ' << b << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

#include<iostream>
using namespace std;
int a = 0, b = 0;
void exchange()
{
	int p;
	if (a < b)
	{
		p = a; a = b; b = p;
	}
}
int main()
{
	a = 3; b = 5;
	exchange();
	cout << a << ' ' << b << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

6.5 数组与函数

数组元素做函数参数

#include<iostream>
using namespace std;
void change(int a,int b)
{
	a = 30; b = 50;
}
int main()
{
	int a[2] = { 3,5 };
	change(a[0], a[1]);
	cout << a[0] << ' ' << a[1] << endl;
	system("pause");
	return 0;
}

在这里插入图片描述
数组名做函数参数。数组名代表地址,地址COPY了。

#include<iostream>
using namespace std;
void change(int a[])
{
	a[0] = 30; a[1] = 50;
}
int main()
{
	int a[2] = { 3,5 };
	change(a);
	cout << a[0] << ' ' << a[1] << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

6.5 函数的分文件编写

1、创建后缀名为.h的头文件;
2、创建后缀名为.cpp的源文件;
3、在头文件中写函数声明;
4、在源文件中写函数定义。

函数是C程序的基本构成单位
一个C程序由一个或者多个源程序文件组成。
一个源程序文件可以由一个或多个函数组成。
函数是有类型的,函数的返回值就是函数的数据类型。
max.hcompare.cpp放在在同一目录。通过include "max.h"将两个函数连接起来。使用“”,而不使用<>,与编译器的默认路径有关,<>默认搜索系统的函数库,“”搜索当前目录。
在这里插入图片描述

6.6 函数的递归

函数不能嵌套定义,所有函数一律平等;
函数可以嵌套调用,无论嵌套多少层,原理都一样。
函数可以调用自己。例如求n!阶乘。

#include<iostream>
using namespace std;
int fact(int n)
{
	if (n == 1)
		return 1;
	else
		return n * fact(n - 1);
}
int main()
{
	int n = 3;
	cout << fact(n) << endl;
	system("pause");
	return 0;
}

递归的过程:
在这里插入图片描述
在这里插入图片描述

1 递归应用实例

切饼

#include<iostream>
using namespace std;
int q(int n)
{
	if(n==0)
		return 1;
	else
		return(n + q(n - 1));
}

int main()
{
	cout << q(4) << endl;
	system("pause");
	return 0;
}

把关注点放在要求解得目标上,进而找到第n次于第n-1次之间的关系,确定第1次的返回结果。

2 内联函数

函数调用是有时间开销的,需要参数入栈,复制。如果函数本身只有几条语句,执行非常快,函数被反复执行很多次,相比之下调用函数产生的开销就很大。为了减少开销,引入内联函数。处理内联函数时,将整个代码插入到调用语句,缺点代码量大。
在函数定义前面加inline关键字,即可定义内联函数。

inline int Max(int a,int b)
{
	if(a > b)
		return a;
	else
		return b;
}

3 函数重载

名字相同,参数个数不同

4 函数缺省参数

void func(int x1, int x2 = 2, int x3 = 3){ }
func(10);//等效func(10, 2, 3)
func(10, 8);//等效func(10, 8, 3)
func(10, , 8);//不行,只能连续若干个连续参数缺省
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值