gpt4 book ai didi

c - C中 float 组的中值计算

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:38 25 4
gpt4 key购买 nike

我有一个程序可以从 .txt 文件中读取 float 并将它们放入一个数组中,但我在计算中位数时遇到了问题。除此以外,一切都运行良好。我做错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int compare (const void * a, const void * b)
{
float fa = *(float*) a;
float fb = *(float*) b;
return (fa > fb) - (fa < fb);
}



//median calculations//
float median1(float[],int);
float median1(float array[],int n)
{
qsort(array, n, sizeof(float), compare);

if(n%2==0)
return (array[n/2]+array[n/2-1])/2;
else
return array[n/2];
}



float x,l=~(257<<23),a,s,t,median;
main(int n,char**f)

{
char fname[20];
int i;
a=-l;

printf("Please type the file name with an extension (.txt)\n");
scanf("%s", fname);


f=fopen(fname,"r");
for(n=0;fscanf(f,"%f",&x)>0;n++,s+=x,x<l?l=x:0,x>a?a=x:0,t+=x*x);

float array[n];

fseek (f, 0, SEEK_SET);

for (i=0; i<n; i++)
{
fscanf (f, "%f", &(array[n]));
}

median=median1(array,n);

printf("Sample size = %d\n", n);
printf("Minimum = %f\n", l);
printf("Maximum = %f\n", a);
printf("Mean = %f\n", s/n);
printf("Median = %f\n",median);
printf("Standard deviation = %f\n", sqrtf(t/n));

return 0;
}

最佳答案

fscanf (f, "%f", &(array[n]));

应该是

fscanf (f, "%f", &(array[i]));

您只写入一个数组元素,而那个元素越界。

即使这不会导致未定义的行为,您以后仍会使用垃圾值。

请参阅@JonathanLeffler 的评论,了解对您的代码的进一步评论。

关于c - C中 float 组的中值计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21358748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com