鱼C论坛

 找回密码
 立即注册
查看: 1395|回复: 2

[已解决]求助一下

[复制链接]
发表于 2023-11-16 14:29:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请编写一个函数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()
{
float  a[10],ave;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
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[i];
        
    }
float av=sum*1.0/n;
for(float i=0;i<n;i++)
{
     if(array[i]>array[Max])
     {
         Max=i;
         J++;
     }
}

return av;
}
最佳答案
2023-11-16 14:31:26
你的代码中存在几个问题:

1. 在最外层的 for 循环中,你使用了 float i=0 来作为循环变量,但在后续的比较中,你使用了 array[i] > array[Max],这里的 i 是浮点数而不是整数,不符合逻辑。建议将 i 的类型修改为整型。

2. 在比较最高分的部分,你使用了 array[i] > array[Max] 来判断当前学生的成绩是否大于最高分,然后更新 MaxJ。但是 Max 是用来保存最高分所在的数组下标,应该将其初始化为 0 而不是 0.0。另外,在更新 Max 时,应该将 Max 更新为 i 而不是 i 对应的成绩。

3. 最后,在计算平均成绩时,你将 sum 乘以 1.0/n 得到平均值。这里可以直接使用 sum/n 来计算平均值。

修正后的代码如下:
  1. float fun(float array[], int n)
  2. {
  3.     float sum = 0.0;
  4.     for (int i = 0; i < n; i++)
  5.     {
  6.         sum += array[i];
  7.     }
  8.     float av = sum / n;
  9.     for (int i = 0; i < n; i++)
  10.     {
  11.         if (array[i] > array[Max])
  12.         {
  13.             Max = i;
  14.             J = 1;
  15.         }
  16.         else if (array[i] == array[Max])
  17.         {
  18.             J++;
  19.         }
  20.     }
  21.     return av;
  22. }
复制代码

请注意,你需要在程序开头声明全局变量 float Max=0;int J=0;

希望这个回答对你有帮助。如果你还有其他问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-16 14:31:26 | 显示全部楼层    本楼为最佳答案   
你的代码中存在几个问题:

1. 在最外层的 for 循环中,你使用了 float i=0 来作为循环变量,但在后续的比较中,你使用了 array[i] > array[Max],这里的 i 是浮点数而不是整数,不符合逻辑。建议将 i 的类型修改为整型。

2. 在比较最高分的部分,你使用了 array[i] > array[Max] 来判断当前学生的成绩是否大于最高分,然后更新 MaxJ。但是 Max 是用来保存最高分所在的数组下标,应该将其初始化为 0 而不是 0.0。另外,在更新 Max 时,应该将 Max 更新为 i 而不是 i 对应的成绩。

3. 最后,在计算平均成绩时,你将 sum 乘以 1.0/n 得到平均值。这里可以直接使用 sum/n 来计算平均值。

修正后的代码如下:
  1. float fun(float array[], int n)
  2. {
  3.     float sum = 0.0;
  4.     for (int i = 0; i < n; i++)
  5.     {
  6.         sum += array[i];
  7.     }
  8.     float av = sum / n;
  9.     for (int i = 0; i < n; i++)
  10.     {
  11.         if (array[i] > array[Max])
  12.         {
  13.             Max = i;
  14.             J = 1;
  15.         }
  16.         else if (array[i] == array[Max])
  17.         {
  18.             J++;
  19.         }
  20.     }
  21.     return av;
  22. }
复制代码

请注意,你需要在程序开头声明全局变量 float Max=0;int J=0;

希望这个回答对你有帮助。如果你还有其他问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-16 14:39:48 | 显示全部楼层
  1. float Max=0;
  2. int J=0;
  3. float fun(float array[],int n);

  4. float fun(float array[],int n)
  5. {
  6.     float sum=0.0;
  7.     for(int i=0;i<n;i++)
  8.     {
  9.         sum+=array[ i];
  10.     }
  11.     float av=sum*1.0/n;
  12.     for(int i=0;i<n;i++)
  13.     {
  14.         if(array[ i]>array[(int)Max])
  15.         {
  16.             Max=i;
  17.             J=1;
  18.         }
  19.         else if(array[ i]==array[(int)Max])
  20.         {
  21.             J++;
  22.         }
  23.     }
  24.     return av;
  25. }
复制代码


问题在于:
1. 没有正确初始化 Max 和 J。应该在函数外部初始化。
2. 在比较最高分时,应该比较的是 array[ i] 和 array[Max],而不是 array[ i] 和 array[Max]。
3. 在统计得最高分的人数时,应该在找到更高分的时候将 J 重置为 1,而不是累加。

我对代码进行了修改,初始化了 Max 和 J,并且在比较最高分和统计得最高分的人数时做了相应的改动。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表