第六讲:函数

目录

1.函数的概念

2.库函数

3.自定义函数

4.形参和实参

5.return语句

6.数组作函数参数

7.嵌套调用和链式访问

8.函数的声明和定义

1.函数的概念

函数可以被理解为一个个小的零件,可以完成程序中特定的任务。一个项目可以拆分成多个函数,就像一个机器有多个零件,举个例子:

题目:输入两个整数,求这两个数的和,积,差。

如果不用函数,我们可以这么写:

#include <stdio.h>
int main()
{
	int x, y;
	scanf("%d%d", &x, &y);
	int he = x + y;//计算和
	printf("%d\n", he);

	int ji = x * y;//计算积
	printf("%d\n", ji);

	int cha = x - y;//计算差
	printf("%d\n", cha);

	return 0;
}

不难发现,这个代码要完成三个功能:

1.求和并打印

2.求积并打印

3.求差并打印

我们可以用三个函数分别实现这三个功能,所以诞生了以下的写法:(后面会详解自定义函数,现在不需要看懂)

​
#include <stdio.h>
void he(int x, int y)//求和函数
{
	printf("%d\n", x + y);
}

void ji(int x, int y)//求积函数
{
	printf("%d\n", x * y);
}

void cha(int x, int y)//求差函数
{
	printf("%d\n", x - y);
}

int main()
{
	int x, y;
	scanf("%d%d", &x, &y);

	he(x, y);//求和函数

	ji(x, y);//求积函数

	cha(x, y);//求差函数

	return 0;
}

​

这个函数更长,看起来更复杂,但是实际上完成了函数的分装,简化了该项目。

我们从主函数开始看,不难发现,该程序将一个大的工程分装成了多个小工程,更具有条理性和可读性(更容易读懂),也有助于程序员的思考。由于该代码比较简单,很难看出函数的优点,但是,你可以发挥想象力,如果是一个几百行代码的大工程,这里用函数分工行动,是不是会简化代码,帮助程序员梳理思绪?

其次,如果一个功能在程序中多次使用,这个函数也是可以复用的(在程序中的其他地方,如果想要再次使用该函数的功能,可以直接用该函数,不用再写一遍),提升了开发软件的效率。

可见,函数的好处很多,很值得我们去学习。

2.库函数

2.1:定义:c语言标准中提供了语法规则,但不提供库函数,他是由编译器厂家生产出来的,库函数也是函数,也是完成一个个各不相同的功能的。同时,具有类似功能的函数会被包含在同一个头文件中(printf和scanf函数都被包含在<stdio.h>中,如果想使用这两个函数,就要在第一行写上熟悉的#include<stdio.h>)。举例:前面学习的scanf,printf以及你见过的函数都是库函数。

2.2;怎么学习库函数

1.cplusplus网站,他具有最权威的解释。

2.观看csdn上其他人的文章,嘿嘿。

在学习的时候要注意几个要点:

1.记住函数的名字,该函数被什么头文件所包含

2.学习函数的参数及参数类型

3.学习返回值以及返回值的类型

4.函数有什么功能

5.代码举例

初学者自学库函数还是有些困难,但授人以鱼不如授人以渔,现在由我带领大家学习一个库函数

sqrt

double sqrt(double x)

1.该函数的名字是sqrt,该函数被<math.h>所包含

2.使用该函数要上传一个double类型的参数

3.该函数会返回一个double类型的值

4.该函数是用来求一个数的平方根的

5:

#include <stdio.h>
#include <math.h>//sqrt函数被math.h包含
int main()
{
	double d = 16.0;//d是一个double类型的值
	double r = sqrt(d);//我们将d写在括号里,简化它上传上去
	//然后sqrt计算被上传的值(d)的平方根,由于返回值类型是
	//double,所以d的平方根会以double的类型返回,所以此处会返回
	//4.000000(12个0,double型的数据保留小数点后6位)
	//所以sqrt(d)等价于4.000000,然后,我们用double型的r
	//接收这个值,那么,r就是4.000000了。
	printf("%lf", r);
	return 0;
}

    我们将d写在括号里,将它上传上去
    //然后sqrt计算被上传的值(d)的平方根,由于返回值类型是
    //double,所以d的平方根会以double的类型返回,所以此处会返回
    //4.000000(6个0,double型的数据保留小数点后6位)
    //所以sqrt(d)等价于4.000000,然后,我们用double型的r
    //接收这个值,那么,r就是4.000000了。

3.自定义函数

要点:

1.函数的参数及参数类型

2.返回值以及返回值的类型

3.函数有什么功能

ret_type fun_name(形参)
{

}

这是一个函数的基本写法

ret_type是返回值类型

fun_name是函数的名字

花括号里是函数体

现在,可以讲讲前面的函数了

​
#include <stdio.h>
void he(int x, int y)//求和函数
{
	printf("%d\n", x + y);
}

void ji(int x, int y)//求积函数
{
	printf("%d\n", x * y);
}

void cha(int x, int y)//求差函数
{
	printf("%d\n", x - y);
}

int main()
{
	int x, y;
	scanf("%d%d", &x, &y);

	he(x, y);//求和函数

	ji(x, y);//求积函数

	cha(x, y);//求差函数

	return 0;
}

​

第一个求和函数:

1.函数有两个int型的参数,要上传两个整数

2.函数返回值类型是void,所以不返回值

3.函数的功能是求这两个整数的和,并打印。(函数体)

现在我们修改这个函数,从另一个方向学习。

int he(int x, int y)//求和函数
{
	return x + y;
}

int main()
{
	int x, y;
	scanf("%d%d", &x, &y);

	int he = he(x, y);//求和函数
    printf("%d",he);

	return 0;
}

1.函数有两个int型的参数,要上传两个整数

2.函数返回值类型是int,所以返回一个整数

3.函数的功能返回两个数的和(return x+y;)

4.形参和实参

被传递的量叫实参,传递到函数中的量叫形参。

形参,顾名思义,是形式上的参数。如果函数调用时用到了形参,才需要向内存申请空间,否则都不用申请空间。

申请空间意味着实参和形参的量虽然相同,但是在内存中的位置不同。形参只是实参的一份临时拷贝。

5.return语句

1.return接表达式,会先算表达式,后返回该值

2.return不接任何东西,仅适用于返回值为void型的函数

3.如果返回值与返回值类型不一致,会将返回值的类型强转

4.遇到return,函数结束

5.如果在函数内用了if等分支语句,要保证每种情况都有return返回

6.数组作函数参数

1.数组传参,实参是数组名,形参可以写成数组的形式

2.形参是一维数组时,元素个数可省略

3.形参是二维数组,行可以省略,但是列不能

4.传参时,没有创建新的数组

5.形参与实参操作的是同一个数组

7.嵌套调用

在一个函数中调用另一个函数叫嵌套调用

8.链式访问

将一个函数的返回值用作另一个函数的参数叫链式访问

9.函数的声明和定义

函数声明:交代一个函数的名字,参数类型,返回值类型

举例:int my_strlen(char* p1);

1.若将函数写在主函数下方,要在主函数上方声明,声明只需交代参数类型和返回值类型即可。(如图)

2.一般将函数的声明放在头文件中,函数的实现放在源文件中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

INUYACHA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值