鱼C论坛

 找回密码
 立即注册
查看: 1164|回复: 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 来计算平均值。

修正后的代码如下:
float fun(float array[], int n){    float sum = 0.0;    for (int i = 0; i < n; i++)    {        sum += array[i];    }    float av = sum / n;    for (int i = 0; i < n; i++)    {        if (array[i] > array[Max])        {            Max = i;            J = 1;        }        else if (array[i] == array[Max])        {            J++;        }    }    return av;}
请注意,你需要在程序开头声明全局变量 float Max=0;int J=0;

希望这个回答对你有帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> 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 来计算平均值。

修正后的代码如下:
float fun(float array[], int n){    float sum = 0.0;    for (int i = 0; i < n; i++)    {        sum += array[i];    }    float av = sum / n;    for (int i = 0; i < n; i++)    {        if (array[i] > array[Max])        {            Max = i;            J = 1;        }        else if (array[i] == array[Max])        {            J++;        }    }    return av;}
请注意,你需要在程序开头声明全局变量 float Max=0;int J=0;

希望这个回答对你有帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[Max],而不是 array[ i] 和 array[Max]。
3. 在统计得最高分的人数时,应该在找到更高分的时候将 J 重置为 1,而不是累加。

我对代码进行了修改,初始化了 Max 和 J,并且在比较最高分和统计得最高分的人数时做了相应的改动。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-3 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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