关于一简单学生成绩C程序的改正

来源:百度知道 编辑:UC知道 时间:2024/06/01 19:27:01
能编译通过,可不能正常运行出结果!请大家指教.
#include "stdio.h"

main()
{ float aver(float array[],int n);
float score[10];
float max,min,ave;
int i;
for (i=0;i<10;i++)
scanf("%f",&score[i]);
ave=aver(score,10);
printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);
}

float aver(float array[],int n)
{
int i;
float max=0,min=0;
float aver,sum=array[0];
max=min=array[0];
for (i=1;i<n;i++)
{
if(array[i]>max)max=array[i];
else if(array[i]<min)min=array[i];
sum=sum+array[i];
}
aver=sum/n;
return(aver);
}

程序是没问题??
结果是不是只有ave啊?
max和min的值是错误的啊?
是你在主函数中和aver函数中都定义了max和min变量,当aver函数运行完毕的时候,就会释放aver函数中的变量
max和min,所以就不能正确的返回这两个值了.
所以呢,在aver函数和主函数中不要定义了,直接定义为全局变量了,就会保存正确的结果,直到主函数运行完毕释放了..

ave=aver(score,10);
从上一句看你的aver 好象不象是一个变量!
aver=sum/n;
这一句又把她当作变量
return(aver);
输出aver
你可不可以不要用aver 这个名称变量
换个尝试一个!

你没有搞清楚什么是实参和变参,你在主函数里设的max,和min没有给它值也没有通过任何语句附值给它。所以系统会提示你这两个变量没有用!你在子函数里虽然又设了max,min,子函数里的变量是不会传递数值给主函数里的同名变量的,也就是说,在函数的调用里数值的传递是单向的,主函数传递给子函数。这道题你可以这样改:
#include "stdio.h"

main()
{ float aver(float array[],int n);
float score[10];
float ave;
int i;
for (i=0;i<10;i++)
scanf("%f",&score[i]);
ave=aver(score,10);
printf("average=%6.2f\n",ave);
}

float aver(float array[],int n)
{
int i;
float max=0.0,min=0.0;
float aver,sum=array[0];
max=min=array[0];
for (i=1;i<n;i++)
{