问题:有一个一维数组score,内放10个学生成绩,求平均成绩
我的做法:
#include<stdio.h>
double average(int );
int main()
{
int score[10],j;
double d;
for(j=0;j<10;j++)
scanf("%d",&score[j]);
d=average(score[10]);
printf("%lf\n",d);
return 0;
}
double average(int a[10] )
{
int i;
double c;
int b=0;
for(i=0;i<10;i++)
b=b+a[i];
c=b/10;
return c;
}
这个代码运行不了,有人说要用指针,但是指针我目前还没学到,能否不用指针
课本上有不用指针的答案:
帮忙找找我代码的错误,谢谢
d=average(score[10]);
改为
d=average(score);
参数为数组,应该传递数组名。score[10]是数组元素,不是数组。而且下标越界
另外24行要改为c=b/10.0;否则两个整数相除是整除,没有小数
不要把长度10写死,否则你函数调用了个寂寞:
#include<stdio.h>
double average(int[], int);
int main()
{
int score[10],j;
double d;
for(j=0;j<10;j++)
scanf("%d",&score[j]);
d=average(score);
printf("%lf\n",d);
return 0;
}
double average(int a[], int n)
{
if (n == 0) return 0;
int i;
double c;
int b=0;
for(i=0;i<n;i++)
b=b+a[i];
c=b/n;
return c;
}
你的代码有两个问题:
在调用average函数时,应该传入score数组的地址,而不是score[10]这个元素的值。应该改为d=average(score);。
计算平均数时,应该将分子b强制转换为double类型,避免整数相除产生的精度问题。应该改为c=(double)b/10;。
修改后的代码如下:
#include<stdio.h>
double average(int *);
int main()
{
int score[10],j;
double d;
for(j=0;j<10;j++)
scanf("%d",&score[j]);
d=average(score);
printf("%lf\n",d);
return 0;
}
double average(int *a )
{
int i;
double c;
int b=0;
for(i=0;i<10;i++)
b=b+a[i];
c=(double)b/10;
return c;
}
如果想要不用指针来实现,可以直接将数组名作为参数传递给函数,因为数组名本身就是数组首元素的地址。修改后的代码如下:
#include<stdio.h>
double average(int []);
int main()
{
int score[10],j;
double d;
for(j=0;j<10;j++)
scanf("%d",&score[j]);
d=average(score);
printf("%lf\n",d);
return 0;
}
double average(int a[] )
{
int i;
double c;
int b=0;
for(i=0;i<10;i++)
b=b+a[i];
c=b/10.0;
return c;
}
这样也可以正常计算出数组score的平均值。