模式,中位数,平均值,标准差,方差计算器



试图编写这个小程序来帮助我在Stats类中学习,除了中位数之外,一切似乎都在相应地计算。我错过了什么?

如果有人愿意为我做方差函数,请额外抵免x)。

使用GCC编译器运行OSX。

#include<stdio.h>  
#include<math.h>   
float mean1(float[],int);  
float median1(float[],int);  
float mode1(float[],int);  
double standarddeviation1(float[],int);  
int main()  
{  
int i,n,choice;  
float array[100],mean,median,mode;  
double standarddeviation;  
printf("Enter No of Elementsn");  
   scanf("%d",&n);  
printf("Enter Elementsn");  
for(i=0;i<=n-1;i++)  
    scanf("%f",&array[i]);  
do  
{  
    printf("ntEnter Choicent1.Meannt2.Mediannt3.Modent4.Standard deviationnt5.Exitn");  
    scanf("%d",&choice);  
    switch(choice)  
    {  
        case 1: mean=mean1(array,n);  
            printf("ntMean = %fn",mean);  
            break;  
        case 2: median=median1(array,n);  
            printf("ntMedian = n",median);  
            break;  
        case 3: mode=mode1(array,n);  
            printf("ntMode = %fn",mode);  
            break;   
        case 4: standarddeviation=standarddeviation1(array,n);  
            printf("ntStandard deviation = %fn",standarddeviation); 
            break;  
        case 5: break;  
        default:printf("Wrong Option");  
            break;  
    }  
}while(choice!=5);  
  getchar(); 
return 0;  
}  
float mean1(float array[],int n) {  
    int i;  
    float sum=0;  
    for(i=0;i<=n;i++)  
    sum=sum+array[i];  
return (sum/n);  
}  
float median1(float array[],int n) {  
float temp;  
int i,j;  
for(i=n-1;i>=0;i--)  
    for(j=0;j<=i;j++)  
        if(array[j]>=array[j+1])  
        {  
            temp=array[j];  
            array[j]=array[j+1];  
            array[j+1]=temp;  
        }  
if(n%2==0)  
    return (array[n/2]+array[n/2-1])/2;  
else  
    return array[n/2];  
}  
float mode1(float array[],int n) {  
return (3*median1(array,n)-2*mean1(array,n));  
}  
double standarddeviation1(float array[],int n) {  
int j;   
double max[100],sum,variance,mean;  
mean=mean1(array,n);  
sum=0;  
for(j=0;j<=n;j++)   
{  
    max[j]=pow((array[j]-mean),2);  
    sum+=max[j];  
}  
variance=sum/(j-1);   
return sqrt(variance);  
}  

您的mean1也不正确。两个错误都有相同的原因,如果您访问的元素超过指定的编号n

float mean1(float array[],int n) {  
    int i;  
    float sum=0;  
    for(i=0;i<=n;i++)  
    sum=sum+array[i];  
return (sum/n);  
}

您在此处添加n+1元素,但除以nn+1 st元素不属于计算中。使循环条件为i < n

float median1(float array[],int n) {  
float temp;  
int i,j;  
for(i=n-1;i>=0;i--)  
    for(j=0;j<=i;j++)

在冒泡排序中,您也可以访问具有任意值的array[n](如果n == 100超过了分配的数组,则会导致未定义的行为)。使内循环条件为j < i或用i = n-2启动外循环。

standarddeviation1中,您也超出了数组的界限。

最新更新