Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 计算3个动态表的中值、平均值和标准偏差,并将其添加到文件中_C_Mean_Median_Standard Deviation - Fatal编程技术网

C 计算3个动态表的中值、平均值和标准偏差,并将其添加到文件中

C 计算3个动态表的中值、平均值和标准偏差,并将其添加到文件中,c,mean,median,standard-deviation,C,Mean,Median,Standard Deviation,我编写了一个程序,读取一个文件,并创建3个动态数组,在其中读取X、Y和RHO值。我想创建函数或程序来计算这些值的平均值、中值和标准偏差​​并将这些统计数据保存到文件中。我试着写,但没用。 节目: #包括 #包括 结构MagicData { 双x; 双y; 双rho; }; 结构数组 { 保留大小; 大小/数量; 结构MagicData*数据; }; void MagicDataArrayAppend(结构MagicDataArray*arr,结构MagicData*数据) { 如果(arr->c

我编写了一个程序,读取一个文件,并创建3个动态数组,在其中读取X、Y和RHO值。我想创建函数或程序来计算这些值的平均值、中值和标准偏差​​并将这些统计数据保存到文件中。我试着写,但没用。 节目:

#包括
#包括
结构MagicData
{
双x;
双y;
双rho;
};
结构数组
{
保留大小;
大小/数量;
结构MagicData*数据;
};
void MagicDataArrayAppend(结构MagicDataArray*arr,结构MagicData*数据)
{
如果(arr->count>=arr->reserved)arr->data=realloc(arr->data,sizeof(struct MagicData)*(arr->count*3/2));
arr->data[arr->count++]=*数据;
}
结构MagicDataArray MagicDataArrayCreate(保留大小){
结构MAGICDATA数组结果={
含蓄的,
0,
malloc(sizeof(struct MagicData)*保留)
};
返回结果;
}
结构MagicDataArray MagicDataArrayReadF(文件*f)
{
struct MagicDataArray结果=MagicDataArrayCreate(10);
结构magicdatatmp;
fscanf(f,“LP X Y RHO”);//忽略标题
而(fscanf(f,“%*d.lf%lf%lf”、&tmp.x、&tmp.y、&tmp.rho)==3)
{
MagicDataArrayAppend(结果和tmp);
}
返回结果;
}
内部主(空)
{
文件*f=fopen(“grades.txt”、“r”);
结构MagicDataArray r=MagicDataArrayReadF(f);
printf(“%zd\n”,r.count);
对于(大小i=0;i

这里有一个指向我的文件的链接:

该链接在该代码段中似乎不起作用:
arr->data=realloc…
,在使用
arr->data
之前,您是否应该验证
realloc…
是否成功?它不起作用,不能很好地描述你的问题。使用您链接的任何代码(顺便说一句,它不起作用)生成一个,然后将其发布。当然,当
if
被纳入
if(arr->count>=arr->reserved)arr->data=realloc(arr->data,sizeof(struct MagicData)*(arr->count 3/2)时,1)
arr->reserved
应更新。2) 希望
arr->count!=0
。我希望现在链接能够正常工作。我认为代码非常容易理解和清晰。我看不到更新代码的好处。但是,可以更清楚地说明在哪种情况下实际出了什么问题。当我编译(在windows下使用cl以及在wsl下使用gcc)并开始提供测试数据时,代码似乎可以工作。是否存在其他问题,而您错误地怀疑上述代码?此代码段中的链接似乎不起作用:
..arr->data=realloc…
,在使用
arr->data
之前,您是否应该验证
realloc…
是否成功?它不起作用,不能很好地描述你的问题。使用您链接的任何代码(顺便说一句,它不起作用)生成一个,然后将其发布。当然,当
if
被纳入
if(arr->count>=arr->reserved)arr->data=realloc(arr->data,sizeof(struct MagicData)*(arr->count 3/2)时,1)
arr->reserved
应更新。2) 希望
arr->count!=0
。我希望现在链接能够正常工作。我认为代码非常容易理解和清晰。我看不到更新代码的好处。但是,可以更清楚地说明在哪种情况下实际出了什么问题。当我编译(在windows下使用cl以及在wsl下使用gcc)并开始提供测试数据时,代码似乎可以工作。是否存在其他问题,而您错误地怀疑上述代码?
#include <stdio.h>
#include <stdlib.h>

struct MagicData
{
    double x;
    double y;
    double rho;
};

struct MagicDataArray
{
    size_t reserved;
    size_t count;
    struct MagicData *data;
};

void MagicDataArrayAppend(struct MagicDataArray *arr, struct MagicData* data)
{
     if (arr->count >= arr->reserved) arr->data = realloc(arr->data, sizeof(struct MagicData) * (arr->count * 3 / 2));
     arr->data[arr->count++] = *data;
}

struct MagicDataArray MagicDataArrayCreate(size_t reserved) {
     struct MagicDataArray result = {
           reserved,
           0,
           malloc(sizeof(struct MagicData) * reserved)
     };
     return result;
}

struct MagicDataArray MagicDataArrayReadF(FILE *f)
{
     struct MagicDataArray result = MagicDataArrayCreate(10);
     struct MagicData tmp;

     fscanf(f, "LP X Y RHO"); // ignore header
     while(fscanf(f, "%*d. %lf %lf %lf", &tmp.x, &tmp.y, &tmp.rho) == 3)
     {
          MagicDataArrayAppend(&result, &tmp);
     }

     return result;
}

int main(void)
{
    FILE *f = fopen("grades.txt", "r");

    struct MagicDataArray r = MagicDataArrayReadF(f);
    printf("%zd\n", r.count);

    for (size_t i=0; i < r.count; ++i)
    printf("%lf %lf %lf\n", r.data[i].x, r.data[i].y, r.data[i].rho);

    return EXIT_SUCCESS;
}