求助一下
请编写一个函数fun,函数的功能是:统计出若干个学生的平均成绩,最高分以及得最高分的人数。函数接口定义:
float fun(float array[],int n);
其中 array 和 n 都是用户传入的参数。函数须统计 array数组中学生的平均成绩,最高分以及得最高分的人数,函数返回平均成绩,最高分以及得最高分的人数存放在全局变量 Max 和 J中 。
裁判测试程序样例:
#include <stdio.h>
float Max=0;
int J=0;
float fun(float array[],int n);
int main()
{
floata,ave;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a);
ave=fun(a,10);
printf("ave=%.2f\n",ave);
printf("max=%.02f\n",Max);
printf("Total:%d\n",J);
return 0;
}
/* 请在这里填写答案 */
输入样例:
84 75 86 59 25 94 76 84 15 65
输出样例:
ave=66.30
max=94.00
Total:1
我这样写哪里错了
float fun(float array[],int n)
{float sum=0.0;
for(int i=0;i<n;i++)
{
sum+=array;
}
float av=sum*1.0/n;
for(float i=0;i<n;i++)
{
if(array>array)
{
Max=i;
J++;
}
}
return av;
}
你的代码中存在几个问题:
1. 在最外层的 for 循环中,你使用了 float i=0 来作为循环变量,但在后续的比较中,你使用了 array > array,这里的 i 是浮点数而不是整数,不符合逻辑。建议将 i 的类型修改为整型。
2. 在比较最高分的部分,你使用了 array > array 来判断当前学生的成绩是否大于最高分,然后更新 Max 和 J。但是 Max 是用来保存最高分所在的数组下标,应该将其初始化为 0 而不是 0.0。另外,在更新 Max 时,应该将 Max 更新为 i 而不是 i 对应的成绩。
3. 最后,在计算平均成绩时,你将 sum 乘以 1.0/n 得到平均值。这里可以直接使用 sum/n 来计算平均值。
修正后的代码如下:
float fun(float array[], int n)
{
float sum = 0.0;
for (int i = 0; i < n; i++)
{
sum += array;
}
float av = sum / n;
for (int i = 0; i < n; i++)
{
if (array > array)
{
Max = i;
J = 1;
}
else if (array == array)
{
J++;
}
}
return av;
}
请注意,你需要在程序开头声明全局变量 float Max=0; 和 int J=0;。
希望这个回答对你有帮助。如果你还有其他问题,请随时提问。 float Max=0;
int J=0;
float fun(float array[],int n);
float fun(float array[],int n)
{
float sum=0.0;
for(int i=0;i<n;i++)
{
sum+=array[ i];
}
float av=sum*1.0/n;
for(int i=0;i<n;i++)
{
if(array[ i]>array[(int)Max])
{
Max=i;
J=1;
}
else if(array[ i]==array[(int)Max])
{
J++;
}
}
return av;
}
问题在于:
1. 没有正确初始化 Max 和 J。应该在函数外部初始化。
2. 在比较最高分时,应该比较的是 array[ i] 和 array,而不是 array[ i] 和 array。
3. 在统计得最高分的人数时,应该在找到更高分的时候将 J 重置为 1,而不是累加。
我对代码进行了修改,初始化了 Max 和 J,并且在比较最高分和统计得最高分的人数时做了相应的改动。
页:
[1]