yangzhixiaohuli 发表于 2023-11-16 14:29:38

求助一下

请编写一个函数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;
}

Mike_python小 发表于 2023-11-16 14:31:26

你的代码中存在几个问题:

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;。

希望这个回答对你有帮助。如果你还有其他问题,请随时提问。

isdkz 发表于 2023-11-16 14:39:48

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]
查看完整版本: 求助一下