声明:文中观点仅代表个人,其中文字、图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式:
80368704@qq.com
QQ:80368704
我们在前面2节中,实现了3个程序的合并,使1个程序实现了3个功能,实现了我们的最初的想法。那么对于第1节中的程序4,现在,让我们很高兴的运行它,用其求3和2的最大值、最小值和平均值. main()在调用max()时,输入3和2,屏幕输出3; main()在调用min()时,输入3和2,屏幕输出3; main()在调用average()时,输入3和2,屏幕输出2.5; 结果没有问题,只是有些许遗憾的地方. 例如:同一个程序,同一组数据3和2,在求解max,min,average时要重复输入3次; 要是能在开始求解前,输入3和2,分别存在变量a和b中,然后,a和b能让3个函数共用,就简单一些了。要实现上面的想法,我们需要把程序改动2个地方: 1、要在调用3个函数之前,输入3和2。 于是我们把3个子函数中的输入语句scanf("%f%f",&a,&b);移动一下,移动到main()函数中,放在 调用3个子函数之前,当然3个子函数中就不要输入语句了。 2、存放3和2的变量a和b,必须能被max()、min()、average()和main()共用。 我们把3个子函数中的 float a,b;也移动一下,移到程序的开头部分, 紧跟着#include〈stdio.h 〉.当然三个函数中的float a,b;语句就不要了. 于是程序4变成了如下程序5: 程序5: /********************************************************/ #include〈stdio.h〉 float a,b;/*-------------改动1------------------------------*/ void max()/*求任意2个数字的最大值。*/ {float m; m=a>b?a:b; printf("%f/n",m); } void min()/*求任意2个数字的最小值。*/ {float m; m=a<b?a:b; printf("%f/n",m); } void average()/*求任意2个数字的平均值。*/ {float m; m=(a+b)/2; printf("%f/n",m); } void main() { scanf("%f%f",&a,&b);/*--------改动2----------------*/ max(); min(); average(); } /**********************************************************/
这样程序5就实现了我们的数据3和2,只输入1次的想法。
需要强调说明一下为什么变量定义语句float a,b;要移到函数外?: 我们看到的程序4,max()、min()、average()每一个函数的函数体中都有同样的变量定义 语句float a,b; 各自是各自的,互不相干。这是因为C语言规定,在某个函数内定义的变量,只能 在本函数中使用,其他函数不能使用。因此max()函数中的float a,b;和min()函数中的float a,b; 是不同的变量,就和你有2只手,我有两只手,都叫手,但你是你的,我是我的。当变量的定义在某 个函数内部,我们叫该变量为局部变量。我们的程序4中,所有变量都是在某个函数内部定义的, 都是局部变量。 在程序5中。我们将float a,b;移出函数,移动到紧跟着#include〈stdio.h〉,在max()、min()、 average()和main(),4个函数的前面。这一移动不要紧,一下子,变量a和b不再属于任何一个函数, 而是在函数之外定义的,对于我们这个程序,变量a和b在所有函数之前。 C语言规定,当变量的定义不在任何函数内部,或者说变量的定义在函数之外,我们叫它全局变量 或全程变量。 我们的程序5中的float a,b;语句定义了2个全局变量,按照C语言的规定,从这一句开始, 其后的所 有函数都可以使用这2个变量,因此max()、min()和average(),以及main()4个函数都可以使用这2个变 量。全局变量可以为本程序文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源程 序文件结束。 你翻回头看看程序5,确实是这样的。 |