你干嘛哈哈哎哟 发表于 2022-11-6 11:26:47

平均值不对

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

为什么平均值是小数时结果就不对,float不是可以到小数点后6位吗?

zhangjinxuan 发表于 2022-11-6 11:32:51

原因是你限制了结果的输出
printf("%.1f",b);
这种情况,求出来的平均值只有一位小数,不管是 5.303,还是 5.3999,用 %.1f 输出都是 5.3
解决方法:
printf("%f", b); //或者 printf("%.6f", b);

你干嘛哈哈哎哟 发表于 2022-11-6 11:35:50

zhangjinxuan 发表于 2022-11-6 11:32
原因是你限制了结果的输出

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

不是吧,我输入5个1和5个2结果却不是1.5,不信你可以去试试

zhangjinxuan 发表于 2022-11-6 11:36:28

你先别下线,我先研究研究

jackz007 发表于 2022-11-6 11:41:33

本帖最后由 jackz007 于 2022-11-6 11:43 编辑

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

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

zhangjinxuan 发表于 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;
    }
    d = sum / c;
    return d;
}
int main() {
    double b;
    int e;
    for (int i = 0; i < 10; ++i)
            scanf("%d", &e);
    b = average(e, 10);
    printf("%g", b); //输出不能 %.1f ,可以试试 %.6f, %f, %g 等等
    return 0;
               
}

zhangjinxuan 发表于 2022-11-6 11:43:29

根本原因在于函数的返回值,比如声明返回类型为 int,即使返回一个 double,C会自动帮你转换为 int 再返回

zhangjinxuan 发表于 2022-11-6 11:43:59

jackz007 发表于 2022-11-6 11:41
int average(int a[],int c )
{
. . . . . .


同时回帖{:10_277:}

zhangjinxuan 发表于 2022-11-6 11:45:20

jackz007 发表于 2022-11-6 11:41
int average(int a[],int c )
{
. . . . . .


就看楼主会选谁的了

你干嘛哈哈哎哟 发表于 2022-11-6 13:01:45

zhangjinxuan 发表于 2022-11-6 11:43
同时回帖

他比你快一分钟{:10_284:}

zhangjinxuan 发表于 2022-11-6 14:10:54

你干嘛哈哈哎哟 发表于 2022-11-6 13:01
他比你快一分钟

俺这--
页: [1]
查看完整版本: 平均值不对