主题:全局变量问题
cyp2010 [专家分:10] 发布于 2010-04-28 16:53:00
#include <stdio.h>
float Max=0,Min=0; /* 定义全局变量 */
void main()
{
float averag(float array[],int n) /*声明函数*/
int i;
float ave,score[10];
pirntf(" input 10 numbers\n");
for (i=0;i<10;i++)
scanf("%f",&score[i]); /*定义的据组为浮点型 ,用%F*/
ave=averag(score,10);
printf("max=%6.2f\nmin=%6.2f\naver=%6.2f\n",Max,Min,ave);
}
float averag(float arry[],int n)
{
int i;
float aver,sum=array[0];
Max=Min=array[0];
for (i=1;i<10;i++) /*i从1开始*/
{
if(Max<a[i])
Max=a[i];
else if (Min>a[i])
Min=a[i];
sum=sum+a[i];
}
aver=sum/n;
return(aver)
}
对于该程序,全局变量Max;Min 的值是怎么传过来的???(我不是很明白) ,如果不定义全局变量,该怎么返回三个数值(ave Max Min)??那位高手给改改,不用全局变量该怎么写? 谢了
回复列表 (共9个回复)
沙发
yansheng [专家分:1530] 发布于 2010-04-28 18:45:00
用指针试下啊!
板凳
Jasperu [专家分:80] 发布于 2010-04-28 22:12:00
全局变量的作用域是整个程序,,也就是说,如果你定了A,那么在这个程序中A的值都是你定义的这个值,,而如果你在程序内部定义了一个A,那么整个全局变量的A的值会失效 ,,,
再就是,如果你要是不用全局变量,你就是用个变量来指向要求的,变量就行了。。。。。其实就是用这个变量来保存,整个变量的值,,是思路
3 楼
雪光风剑 [专家分:27190] 发布于 2010-04-28 22:36:00
简单的说,全局变量是一块保护性较弱的内存,整个程序各个函数都能访问他们
如果不用全局,那么返回三个量最简单直接的办法是写3个不同的函数分别求值
4 楼
cyp2010 [专家分:10] 发布于 2010-04-28 22:49:00
那Max Min是怎么传递出来的呀?? [em18]
5 楼
cxxcomp [专家分:2370] 发布于 2010-04-28 22:57:00
当然可以完全不用全局的对象。这么做
[code=c]
#include <stdio.h>
#include <stdlib.h>
double averag(double*, int, double&, double&);
int main()
{
double Max = 0;
double Min = 0;
int i;
double ave;
double score[10];
printf(" input 10 numbers\n");
for (i = 0; i < 10; i++)
scanf("%lf",&score[i]);
ave = averag(score, 10, Max, Min);
printf("max=%6.2f\nmin=%6.2f\naver=%6.2f\n", Max, Min, ave);
system("pause");
}
double averag(double* parry, int n, double& Max, double& Min)
{
int i;
double sum = parry[0];
Max = Min = parry[0];
for (i = 1; i < 10; i++) /*i从1开始*/
{
if(Max < parry[i])
Max = parry[i];
else if (Min > parry[i])
Min = parry[i];
sum += parry[i];
}
double aver = sum/n;
return aver;
}
[/code]
6 楼
cxxcomp [专家分:2370] 发布于 2010-04-28 23:00:00
[quote]
那Max Min是怎么传递出来的呀?? [em18][/quote]
用了一点“C++”的东西,不过不要一看是引用就认为是C++的标志,虽然是随着C++引入的,但理解其语义,好似比刻意的区分是什么不是什么要重要的多。这个地方,使用引用显然比指针更好理解一些。
答案是Max,Min使用引用方式传出来。相当于pascal的var 变量。请仔细看上述代码。:)
7 楼
雪光风剑 [专家分:27190] 发布于 2010-04-29 06:39:00
[quote]
那Max Min是怎么传递出来的呀?? [em18][/quote]
服了,都跟你说了全局变量不在函数的保护内存段而是全局读写你为什么还在探究所谓的“传出”呢?这两个变量作为全局变量的时候是本程序内可以公共读写的,从来没有在函数之间发生传递行为,任何一个函数对这两个变量做出的改变,其他函数稍后使用这两个变量的时候得到的都是较新的值
8 楼
强强 [专家分:4740] 发布于 2010-04-29 09:09:00
哎……
9 楼
cxxcomp [专家分:2370] 发布于 2010-04-29 12:15:00
[quote]哎……[/quote]
哎…哎…
我来回复