鱼C论坛

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

[已解决]如何从指定文件中取出数值并求其平均值及方差

[复制链接]
发表于 2020-10-13 23:29:51 | 显示全部楼层 |阅读模式

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

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

x
如题 ,麻烦各位大佬给个思路!
最佳答案
2020-10-14 02:29:34
你的要求是给个思路,所以下面的程序是能够满足你的(原因是下面的程序读取数据时少读一个,我还没找到原因,这就要求你的数据要多加一个)。在D盘下建立一个 data.txt 文件,写入数据:

182 198 188 175 185 184 175 178 192 176 0

( 最后这个 0 就是那个多余的数据,当然也可以是任何的数,反正也不会读到它)
// 从文本文件"data.txt"中取出数据,并计算平均值,方差

#include<stdio.h>
#include <math.h>
#define hh printf("\n===================================\n");
void main()
{
    FILE *fp; 
    float a[520],x,avr,fc,sum = 0.0;
    int i,k = 0;
    fp = fopen("D:\\data.txt","r");
    if(fp == NULL)
    {
        printf("文件打开失败!\n");
    }
    else
    { 
        printf("读取数据:\n");
        fscanf(fp,"%f",&x);

        while(fgetc(fp) != EOF)    // 读取文件数据 x
        {
            a[k++] = x;
            printf("%.0f ",x);
            sum += x;
            fscanf(fp,"%f",&x);
        }

        avr = sum / k;             // k 为读到的数据个数
        sum = 0; 
        for(i = 0;i < k;i++)
        {
            sum += (a[i] - avr) * (a[i] - avr);
        }
        fc = sum / (k - 1);
        hh
        printf("  读取个数:%d\n",k);
        printf("  平 均 值:%.2f\n",avr);
        printf("  方    差:%.2f\n",fc);

    }
    hh
    fclose(fp);
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-14 02:29:34 | 显示全部楼层    本楼为最佳答案   
你的要求是给个思路,所以下面的程序是能够满足你的(原因是下面的程序读取数据时少读一个,我还没找到原因,这就要求你的数据要多加一个)。在D盘下建立一个 data.txt 文件,写入数据:

182 198 188 175 185 184 175 178 192 176 0

( 最后这个 0 就是那个多余的数据,当然也可以是任何的数,反正也不会读到它)
// 从文本文件"data.txt"中取出数据,并计算平均值,方差

#include<stdio.h>
#include <math.h>
#define hh printf("\n===================================\n");
void main()
{
    FILE *fp; 
    float a[520],x,avr,fc,sum = 0.0;
    int i,k = 0;
    fp = fopen("D:\\data.txt","r");
    if(fp == NULL)
    {
        printf("文件打开失败!\n");
    }
    else
    { 
        printf("读取数据:\n");
        fscanf(fp,"%f",&x);

        while(fgetc(fp) != EOF)    // 读取文件数据 x
        {
            a[k++] = x;
            printf("%.0f ",x);
            sum += x;
            fscanf(fp,"%f",&x);
        }

        avr = sum / k;             // k 为读到的数据个数
        sum = 0; 
        for(i = 0;i < k;i++)
        {
            sum += (a[i] - avr) * (a[i] - avr);
        }
        fc = sum / (k - 1);
        hh
        printf("  读取个数:%d\n",k);
        printf("  平 均 值:%.2f\n",avr);
        printf("  方    差:%.2f\n",fc);

    }
    hh
    fclose(fp);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-14 21:54:51 | 显示全部楼层
这个思路还不行吗?帮你顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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