Trying to write this small program to help me in my Stats class, everything seems to be calculating accordingly except for the Median. What am i missing?
试着编写这个小程序来帮助我的Stats类,一切似乎都在计算,除了中值。我缺少什么?
Extra Credit if anyone is willing to do the Variance function for me as well x).
如果有人愿意为我做这个方差函数。
Running OSX with the GCC compiler.
使用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 Elements\n");
scanf("%d",&n);
printf("Enter Elements\n");
for(i=0;i<=n-1;i++)
scanf("%f",&array[i]);
do
{
printf("\n\tEnter Choice\n\t1.Mean\n\t2.Median\n\t3.Mode\n\t4.Standard deviation\n\t5.Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1: mean=mean1(array,n);
printf("\n\tMean = %f\n",mean);
break;
case 2: median=median1(array,n);
printf("\n\tMedian = \n",median);
break;
case 3: mode=mode1(array,n);
printf("\n\tMode = %f\n",mode);
break;
case 4: standarddeviation=standarddeviation1(array,n);
printf("\n\tStandard deviation = %f\n",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);
}
1 个解决方案
#1
3
Your mean1
isn't correct either. Both errors have the same reason, you access an element past the assigned number n
你的意思也不正确。这两个错误都有相同的原因,您可以访问被分配的编号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);
}
You are adding n+1
elements here but divide by n
. The n+1
st element doesn't belong in the calculation. Make the loop condition i < n
.
你在这里加n+1个元素但是除以n, n+1元素不属于计算。使循环条件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++)
In your bubble sort, you access array[n]
too, which has an arbitrary value (and if n == 100
is past the allocated array, hence causes undefined behaviour). Make the inner loop condition j < i
or start the outer loop with i = n-2
.
在您的冒号排序中,也可以访问数组[n],它具有任意的值(如果n == 100,则是经过分配的数组,从而导致未定义的行为)。使内循环条件为j < i或以i = n-2启动外部循环。
In standarddeviation1
you overstep the array bounds too.
在标准偏差中,你也超出了数组的界限。
#1
3
Your mean1
isn't correct either. Both errors have the same reason, you access an element past the assigned number n
你的意思也不正确。这两个错误都有相同的原因,您可以访问被分配的编号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);
}
You are adding n+1
elements here but divide by n
. The n+1
st element doesn't belong in the calculation. Make the loop condition i < n
.
你在这里加n+1个元素但是除以n, n+1元素不属于计算。使循环条件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++)
In your bubble sort, you access array[n]
too, which has an arbitrary value (and if n == 100
is past the allocated array, hence causes undefined behaviour). Make the inner loop condition j < i
or start the outer loop with i = n-2
.
在您的冒号排序中,也可以访问数组[n],它具有任意的值(如果n == 100,则是经过分配的数组,从而导致未定义的行为)。使内循环条件为j < i或以i = n-2启动外部循环。
In standarddeviation1
you overstep the array bounds too.
在标准偏差中,你也超出了数组的界限。