大家好,咱们又见面了,前面我们一起探讨了选择语句和循环语句的相关知识点,在此过程中我自己也是收获颇丰。今天我们将一起探讨一下函数的相关内容。
函数
在数学里函数的近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示,函数概念含有三个要素:定义域A、值域B和对应法则f。这其中定义域的元素称为自变量,值域里的元素称为因变量。在计算机的世界里同样也是如此,一个函数同样也是有自变量、因变量以及对应法则。这里我们可以回顾一下变量的知识点,有兴趣的朋友可以去翻阅一下——计算机萌新的成长历程——初识C语言4。
Q1.什么是变量?
变量也就是会变化的量。
Q2.那什么是自变量?什么又是因变量呢?
自变量也就是自己会变化的量;因变量就是自己本身不会变化,但是会因为别人的变化而变化的量,这里的别人就是自变量。
Q4.那什么又是对应法则呢?
这里我们可以理解为运算方式,就比如一个很简单的y=x+1,这里面的运算法则就是+1,因变量=自变量+1。
好下面回到今天的内容来,我们应该如何在计算机中去使用函数呢?要理解这个问题这时我们需要借助代码来更好的理解。这里我们先编写一个计算两个数相加的代码,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1//用来解决在VS编译器中对于scanf、strcpy、strlen、strcat……这些C语言提供的不安全的库函数报错的问题
#include <stdio.h>
#include<string.h>//这里在使用string相关的库函数如:strlen、strcpy、strcat...等函数时需要引用此头文件。
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d", &a, &b);
c = a + b;
printf("c=%d\n", c);
return 0;
}
正常运行代码后,我们计算来计算一下1+2,以及35+164结果如下:
这里我们就涉及到了C语言提供的库函数scanf——输入函数,以及我们的计算机入口main——主函数。当然这不是我们今天要分享的内容,我们要分享的是a、b、c这三者的关系。大家可以看到,这里我们用数学思维来解析的话,a、b这两个变量因为我们输入的内容不同而发生变化,所以a和b就是我们的自变量,c这个变量会因为a和b的变化而发生变化,所以c就是我们的因变量,那这里我们的对应法则是什么呢?c=a+b,这里a、b、c都提到了,还有谁没有提到啊,没错还有“=”和“+”没有提到,那哪一个是对应法则呢?我们从数学的角度来理解这个问题,函数在数学中的定义是y=f(x),这里面的x是自变量,y是因变量,f是对应法则,这里的f对应的是我们这里的“+”,所以c=a+b这里的对应法则就是“+”,那这里我们可以文字解释为,因变量=自变量1+自变量2。那我如何把它转化为计算机语言呢?下面我们来尝试着编写一下:
1.【分析】:要编写函数,我们就需要三要素——自变量、因变量以及对应法则,这三要素我们目前都有了,只需要将其转化为计算机语言就行,下面三个问题,自变量在计算机中相当于什么?因变量在计算机中相当于什么?对应法则在计算机中相当于什么?
解答:自变量在计算机中就是变量,因变量在计算机中也是变量,对应法则在计算机中就是执行的命令。
2.【写代码】:这里我们简单点,采用int——整型数据类型来进行编写。
//自变量1——int a;自变量2——int b;
//因变量——int c;
//对应法则——c = a + b;
好现在我们写完了。诶诶诶!!!你这写的跟上面的有区别吗?哈哈哈哈,当然没区别了。那我像这样写的意义是什么呢?下面我们先来了解一下函数在计算机中的作用:
这里我们要在此提到库函数了,大家回想一下,我们在接触库函数的时候是不是拿出来就可以直接使用了,不需要去把对应法则从头定义一遍,就比如输入函数scanf,我们在使用的时候,只要把对象确定下来是不是就可以输入了,不管我何时想输入数据,我只需要在键盘上打出scanf这几个字符就OK了,这样我在编写的过程中就很方便了,那以此类推,我们能不能也定义几个字符,让他来代表两个自变量相加呢?答案是当然可以,这里我们把上面的内容再修改一下:
int add(int a, int b)//定义整型函数add,add中有两个整型变量;
{
int c = a + b;//定义整型变量c并将a+b的值赋予c;
return c;//返回c,将c的值返回到add;
}
3.【使用函数】:这里我们来使用这个add函数来完成z=x+y,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1//用来解决在VS编译器中对于scanf、strcpy、strlen、strcat……这些C语言提供的不安全的库函数报错的问题
#include <stdio.h>
#include<string.h>//这里在使用string相关的库函数如:strlen、strcpy、strcat...等函数时需要引用此头文件。
int add(int a, int b)//定义整型函数add,add中有两个整型变量;
{
int c = a + b;//定义整型变量c并将a+b的值赋予c;
return c;//返回c,将c的值返回到add;
}
int main()
{
int x = 0;//根据实际情况的不同,变量的字符不相同,这里我们定义整型变量x,并将0赋值给x;
int y = 0;//定义整型变量y,并将0赋值给y;
int z = 0;//定义整型变量z,并将0赋值给z;
printf("输入两个数\n");
scanf("%d%d", &x, &y);//输入两个整数,并依次赋值给x、y;
z = add(x, y);//将x、y以函数add的形式赋值给z
printf("z=%d\n", z);
return 0;
}
下面我们运行后输入153和135两个数,结果如下:
大家可以看到,这里我们成功的将x、y相加后的值赋值给了z,也就是说,我们成功的调用了上面我们定义的函数。那这里我就有个疑问了,我这里只能用add来表示两个数相加吗?我能不能用其它的符号来表示呢?下面我们就简单点用'A'来表示两数相加,看看能不能正常运行,这里输入还是153和135,结果如下:
这里我们可以得到结论,我们定义的函数的字符没有固定的组合,可以依照个人喜好去进行定义,只要满足下列结构就行:
//自定义函数的结构:
数据类型 函数代表字符(同类型变量1,同类型变量2……同类型变量n)
{
定义同类型变量m并将将变量1~n以对应法则赋值给变量m;
返回m;
}
下面我们来验证一下,接下来我们来定义一个a*b+c的整型函数,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1//用来解决在VS编译器中对于scanf、strcpy、strlen、strcat……这些C语言提供的不安全的库函数报错的问题
#include <stdio.h>
#include<string.h>//这里在使用string相关的库函数如:strlen、strcpy、strcat...等函数时需要引用此头文件。
int A(int a, int b, int c)
{
int d = a * b + c;
return d;
}
int main()
{
int x = 0;
int y = 0;
int z = 0;
int h = 0;
printf("输入3个数\n");
scanf("%d%d%d", &x, &y, &z);
h = A(x, y, z);
printf("h=%d\n", h);
return 0;
}
正常运行后我们来计算1*2+3,结果如下:
由此可知,只要满足自定义函数的结构,函数就能正常调用。这里可能就有朋友要说了,你这先编写函数,到后面又要定义变量,还要调用函数,不麻烦吗?你直接像刚开始编写两个数相加那样不就好了吗?干嘛要多此一举呢?这里我的理解是,函数是为了重复多次的使用,如果我现在需要一个功能,它的代码需要几十行,上百行甚至是更多行,那我使用自定义函数的话是不是就简单方便很多了呢?就像库函数一样,我们需要使用输入功能时,我们只需要输入scanf,我们需要计算字符长度时,我们只需要输入strlen……这才是函数的作用——简化代码,代码复用。
今天的内容到这里就结束了,朋友们你们对函数的相关内容有没有不一样的理解了呢?我希望这篇文章能够帮助到各位朋友更好的去学习C语言,接下来我会继续分享自己在学习过程中的感受,感谢各位朋友的翻阅,咱们下一篇见。