鱼C论坛

 找回密码
 立即注册
查看: 2819|回复: 10

[已解决]平均值不对

[复制链接]
发表于 2022-11-6 11:26:47 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
int average(int a[],int c )
{
        float d,sum=0;
        int i;
        for(i=0;i<c;i++)
        {
                sum=sum+a[i];
        }
        d=sum/c;
        return (d);
}
int main()
        {
                float b;
                int e[10];
                scanf("%d %d %d %d %d %d %d %d %d %d",&e[0],&e[1],&e[2],&e[3],&e[4],&e[5],&e[6],&e[7],&e[8],&e[9]);
                b=average(e,10);
                printf("%.1f",b);
                return 0;
               
        }

为什么平均值是小数时结果就不对,float不是可以到小数点后6位吗?
最佳答案
2022-11-6 11:41:33
本帖最后由 jackz007 于 2022-11-6 11:43 编辑

int average(int a[],int c )
{
. . . . . .

float average(int a[],int c )
{
. . . . . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-6 11:32:51 | 显示全部楼层
原因是你限制了结果的输出
printf("%.1f",b);
这种情况,求出来的平均值只有一位小数,不管是 5.303,还是 5.3999,用 %.1f 输出都是 5.3
解决方法:
printf("%f", b); //或者 printf("%.6f", b);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-6 11:35:50 | 显示全部楼层
zhangjinxuan 发表于 2022-11-6 11:32
原因是你限制了结果的输出

这种情况,求出来的平均值只有一位小数,不管是 5.303,还是 5.3999,用 %.1f ...

不是吧,我输入5个1和5个2结果却不是1.5,不信你可以去试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:36:28 | 显示全部楼层
你先别下线,我先研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:41:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-6 11:43 编辑

int average(int a[],int c )
{
. . . . . .

float average(int a[],int c )
{
. . . . . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:42:28 | 显示全部楼层
问题解决了:
#include <stdio.h>
double average(int a[], int c) { //返回值必须为double(或float),否则就会强制转换为int而失去小数位数
    double d, sum = 0; //推荐double
    int i;
    for(i = 0; i < c; i++) {
            sum = sum + (double)a[i];
    }
    d = sum / c;
    return d;
}
int main() {
    double b;
    int e[10];
    for (int i = 0; i < 10; ++i)
            scanf("%d", &e[i]);
    b = average(e, 10);
    printf("%g", b); //输出不能 %.1f ,可以试试 %.6f, %f, %g 等等
    return 0;
               
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:43:29 | 显示全部楼层
根本原因在于函数的返回值,比如声明返回类型为 int,即使返回一个 double,C会自动帮你转换为 int 再返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:43:59 | 显示全部楼层
jackz007 发表于 2022-11-6 11:41
int average(int a[],int c )
{
. . . . . .

同时回帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:45:20 | 显示全部楼层
jackz007 发表于 2022-11-6 11:41
int average(int a[],int c )
{
. . . . . .

就看楼主会选谁的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-6 13:01:45 | 显示全部楼层

他比你快一分钟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-6 14:10:54 | 显示全部楼层

俺这--
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 07:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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