|
本帖最后由 yangcheng84 于 2014-5-22 23:34 编辑
本帖最后由 yangcheng84 于 2014-5-21 17:00 编辑
初学贴<1>:http://www.crystalradio.cn/thread-552316-1-1.html
初学贴<2>:http://www.crystalradio.cn/thread-552827-1-1.html
初学贴<2>续:http://www.crystalradio.cn/thread-553057-1-1.html
初学贴<3>函数的应用
/************************************************************/
函数的应用
我们写程序的时候,可能会遇到一种情况,就是反复执行功能类似的动作,
比如:有方程y=2x+5; 求x=0, x=1, x=5; x=80 ….时方程 y的解
数学里,我们就是一个一个数字的代入上面的公式,在稿纸上就是这样写
y=2*0+5 (x=0时);
y=2*1+5 (x=1时);
y=2*5+5 (x=5时);
y=2*80+5 (x=80时);
y=2*n+5 (x=n时);
在程序中,我们也是可以那样写的,算多少次就写多少行. 但是我们也发现,这有点雷同、机械化了,占用程序ROM空间多。对,就是要机械化,但不是算一次重写一次的机械化。C语言中,积极鼓励用户将功能类似的代码独立起来,应用时,机械化的套用就可以了.这就是所谓的“模块化设计”上例中,这个模块就叫“函数”
在数学里,函数有着自变量和因变量的说法,y=2x+5 中,如果称x自变量的话,y就是因变量了。换句话说,x就是函数的输入,y就是函数的输出. C语言也一样,有输入和输出的
形式,只不过,
输入-------惯用名称:形参
输出-------惯用名称:返回值,在前面加关键字return
且一个函数只能有一个返回值. 中断函数不能有形参输入.
有的函数可能不需要输入给它,有的函数也是,算完了也不需要把结果传递出来,那么这些不需要的情况就用关键字:void (空的意思) 替代就可以了.
格式:
返回值数据类型声明 自定义的函数名(形参表)
{
//函数体,括号就是函数的边界
}
来,我们用C语言描述y=2x+5 ,写一个功能函数(假设我们计算的y数值范围在65535以内,且x为正整数)
unsigned int sum( unsigned int a )
{
unsigned int y;
y=2*a+5;
return (y); //返回(即输出)
}
上例里,我们定义输出范围是unsigned int ,形参(输入变量)是a.名称是 sum
有了这个函数,那么我们计算方程y=2x+5; 当x=0, x=1, x=5; x=80 ….时方程 y的解就简单了,
需要用就调用一次就可以了。
y= sum(0); //变量 x=2 被输入给计算函数sum,其结果送给y;
y= sum(1); //变量 x=1 被输入给计算函数sum,其结果送给y;
y= sum(5); //变量 x=5 被输入给计算函数sum,其结果送给y;
y= sum(80); //变量 x=80 被输入给计算函数sum,其结果送给y;
…..
最后,和一般变量一样,除返回值为int型外,都需要遵循C语言先定义在引用的原则。完整练习用的程序如下:
#include <AT89X52.H>
#define LED P1_0
unsigned int sum( unsigned int a ); //函数声明(定义)
/**************************************
函数功能:计算2*a + 5 的值
入 口:a
返 回:2*a + 5 的值
**************************************/
unsigned int sum( unsigned int a )
{
unsigned int y;
y=2*a+5;
return (y); //返回(即输出)
}
/**************************************
函数功能:主调函数
入 口:无
返 回:无
**************************************/
main()
{
while(1)
{
if( sum( 2) = =9 ) LED=0; //计算2*a+5,当a=2时,结果为5就点灯
else LED=1; //否则灭灯
}
}
最后,引用函数的目的就是简化程序结构,将一个复杂逇任务分解成许许多多的,功能简单的函数,通过函数的多次调用,组合、排序,得到许多复杂的功能 ,那样一来,方面了设计,用同样的ROM能完成更多的事情.啦
|
评分
-
1
查看全部评分
-
|