新人问一个有关c语言的问题

输入num名学生的成绩并计算平均数
请问我的代码哪错了?我看了好久不知道怎么改

#include
#include
#define n 40

float Average(int a[],int n);
void Readscore(int a[],int n);
int main()
{
int a[n];
float aver,num;
printf("人数:");
scanf("%d", &num);
Readscore(a,num);
aver=Average(a,num);
printf("%f",aver);
return 0;
}
//读取学生成绩
void Readscore(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("请输入成绩:\n");
scanf("%d",&a[i]);
}
}
//计算平均数
float Average(int a[],int n)
{
int i,sum=0;
float aver;
for(i=0;i<n;i++)
{
sum=sum+a[i];
}
aver=(float)sum/n;
return aver;
}
编译器提示:
1.float Average(int a[],int n);
void Readscore(int a[],int n);
这两句声明里的错误:数字常量之前的语法错误
2.Readscore函数scanf那行有错
3.sum=sum+a[i] 那行有错
4.下面开始写float Average(int a[],int n){}
void Readscore(int a[],int n){}的开头处有错

你的两个函数里的参数变量错了,你已经在文件头声明n是常数,后面两个函数定义的时候又int n这本身编译不会错,但是你使用函数的时候是把那个作为传参变量使用。所以你函数里你可以换个名字,比如int m

 float aver,num;
->
float aver;
int num;

aver=(float)sum/n;
->
aver=(float)sum/(float)n;

float Average(int a[],int n)两处
->
float Average(int * a,int n)

void Readscore(int a[],int n)两处
->
void Readscore(int * a,int n)

其它没什么问题,如果是VC++ 2012/13/15,默认不许使用scanf,修改为scanf_s

#define n 40 全局的宏定义以后,后面的n都是40了