曾经有人这么说过:函数,是一切编程语言的精髓。
通过函数,你可以达到很多目的:精简代码,整理算法,避免重复代码等种种好处。
函数概念的解释:
人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。C语言中的函数也是这么一个道理,它通过把一个很长的代码简化为多个简单的代码形式,分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。
利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。
函数对于C语言来说,是很重要的,对于我们物联电子专业这些依赖C语言编写代码的同学则更为重要。
单片机,嵌入式,传感器,射频,Arduino等等专业课,都是以C语言为主程序代码进行输入。而这些代码,动辄上百行,上千行,而且重复量会非常大,也就是一模一样的代码会重复多次,这时函数的重要性则会体现的淋漓尽致~所以,函数的学习是重中之重!请大家务必认真学习这篇函数入门教学。
为了让大家更好的学习函数,我们继续通过做题的方式来进行。首先我们优先从最简单的题目开始做起。大家进入OJ后做的第一道题,一般都是1000题 a+b这道题。相信现在大家返回来看这道题都会觉得这题特别简单了,做起来应该也不用几秒钟就能完成。那么我们就从这道题入手,告诉大家怎么用函数形式完成这道简单的a+b。
1000: 整数a+b
题目描述
计算两个整数的和。
输入
输入两个整数,两个整数用空格隔开。
输出
输出为两个整数的和,单独占一行。
原型代码:
#include
int main()
{
int a,b,s;
scanf("%d%d",&a,&b);
s=a+b;
printf("%d\n",i);
}
- 代码解析:
首先我们看这段main()函数代码的原型。一共由三个参数,一个算式以及输出输入构成。
而一个函数的组成部分由返回类型,函数名称,参数,函数主体构成。
这里逐步解析这个组成分别会在原型里处于哪个部分。
1.首先是函数名称:函数名和参数列表一起构成了函数的整个签名。函数名,就是函数的名字,例如下面代码中的add(),我们如果需要用到这个函数的时候,只需要在主函数main()函数中直接引用这个函数的名字即可。而参数列表则是你在运行这个函数时所要引入这个函数中的参数。
2.接着介绍参数:我们定义的add函数里引入了一个整型x,一个整型y。这里被称为虚拟参数,简称“虚参”。对比两个代码我们可以发现,这里函数中引入的是输入的a,b;而a,b在这里被称为实际参数,简称“实参”。虚参实参讲起来太复杂,我们只需要简单的理解为:虚参是自定义函数里的定义,实参是主函数里的定义即可。
3.函数主体:函数主体简单来说就是函数里面计算的部分,算法的部分:包含一组定义函数执行任务的语句。例如这里,我们把原型函数中计算加法的部分放在了函数里完成,这就是函数的主体。
4.返回类型:任何函数都需要有返回值,即使是我们以前写的代码,一样有返回值。只是main()函数的返回值通常默认为0,可以不写。这里我们自定义了一个函数,一样要有他的返回值,我们需要这个函数完成怎样的运算,运算的结果通常就是函数的返回值。
函数代码:
#include
int add(int x,int y)
{
int s;
s=x+y;
return s;
}
int main()
{
int a,b,f;
scanf("%d %d",&a,&b);
f=add(a,b);
printf("%d",f);
return 0;
}
这两段代码所运行的结果是完全一样的,输出输入的过程也是一样的。大家可以通过对比来模仿出其他题目的函数写法。
当然,这里肯定会有同学觉得,明明函数的代码要远比前一段要长呀,你怎么会说他方便呢?
这里卖个关子,等你们以后尝试到在循环里使用函数,以及多个重复的判断过程,但因为参数不同,不能直接用循环进行判断而要分开写成百八十行的代码的时候自然就能领会函数的妙处~
最后希望大家都能熟悉掌握函数的概念用法,并且一定要把C语言学好学会,这样对未来课程的学习中定会收益无穷的。最后,马上期末了,预祝大家考试都能顺利~至少C语言方面不要有人挂科吧😀