C语言编译没错,运行报错是怎么回事啊

# include <stdio.h>
# define N 3
float aver(int data[],int,int,int);
extern int max, min;
void main()
{
int a[N],i;
float av;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
av=aver(a,N,max,min);
printf("av=%f\n",av);
printf("max=%d\nmin=%d\n",max,min);

}
float aver(int data[],int n,int j,int k)
{
int m=1;
float avg=data[0];
j=k=data[0];
for(m=1;m<n;m++)
{
avg+=data[m];
if(data[m]>j)
j=data[m];
else
k=data[m];

}
avg/=n;
return avg;

}

这个程序在编译的时候没有错。。。在运行的时候会报错
Linking...
1.obj : error LNK2001: unresolved external symbol _max
1.obj : error LNK2001: unresolved external symbol _min
Debug/1.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

1.exe - 1 error(s), 0 warning(s)
有高手知道怎么解决吗???
PS:这是一个求平均值和最大,最小值并输出的程序。。。

第1个回答  2011-05-25
extern int max, min;这一句有问题
改成 int max, min;
因为extern是引用外部文件中的变量,他表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。但是,你没有相应的外部文件,直接在本文件中用变量的话不用extern。
第2个回答  2011-05-25
# include <stdio.h>
# define N 3
float aver(int data[],int);
int max, min;//全局变量定义有误!
void main()
{
int a[N],i;
float av;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
av=aver(a,N);
printf("av=%f\n",av);
printf("max=%d\nmin=%d\n",max,min);

}
float aver(int data[],int n)
{
int m=1;
float avg=data[0];
max=min=data[0];
for(m=1;m<n;m++)
{
avg+=data[m];
if(data[m]>max)
max=data[m];
if(data[m]<min)
min=data[m];
}
avg/=n;
return avg;

}本回答被提问者采纳
第3个回答  2011-05-25
max min 是系统默认的宏操作。。
请换个名字。。和extern无关。。
PS:我顺带吐槽下你的i,j,k的参数名称。。看的头疼。建议使用有实际意义的单词代替,养成好习惯。
相似回答