//这是我从我的一个二维数组求众数的程序里摘出来的,所以看起来可能有点奇怪
//新手拙作 不喜勿喷 谢谢
之所以想发这个是因为我看到的求众数好像多数是局限于整型的???
程序的主要内容为:读入一个自定义长度的实数数组,对其求众数,可针对无众数、只有一个众数以及同时有多个众数三种情况进行输出
INPUT01:1.1 2.2 3.3
OUTPUT:No mods
INPUT02:1 2 3.1 3.1 3.1
OUTPUT:The Mod:3.1 Frequency of Occurrence:3
INPUT03:-1 -1 -2 -2 -3 -3
OUTPUT:The number of mods:3 Mods:-1,-2,-3 Frequency of Occurrence:2
#include <stdio.h>
#include <stdlib.h>
#define WRONG 1724.536
void arsort(long,long,double (*)[]); //Sort one of the latitudes in a two-dimensional array
int main(void)
{
long i[20];
printf("The number of datas:");
scanf("%d",&i[0]);
system("cls");
double ar[1][i[0]];
for(i[1]=0;i[1]<i[0];i[1]++)
{
printf("[%d]:",i[1]+1);
scanf("%lf",&ar[0][i[1]]);
}
printf("\n");
arsort(0,i[0],(void*)*ar);
double mul_sta[20][20];
for(i[8]=0;i[8]<20;i[8]++)
for(i[9]=0;i[9]<20;i[9]++)
mul_sta[i[8]][i[9]]=-WRONG; //初始化基本元素为-WRONG方便判断
i[10]=0;
for(i[8]=0;i[8]<i[0];i[8]++)
if(ar[i[0]][i[8]]==ar[i[0]][i[8]+1])
i[10]++;
if(i[10]==0)
printf("The Mode:No.");
else
{
i[11]=1;
while(i[11]<i[0])
{
if(i[11]==i[0]-1)
{
if(ar[0][i[11]]==ar[0][i[11]-1])
for(i[12]=i[11]-1;i[12]>=0;i[12]--)
if(ar[0][i[12]]!=ar[0][i[12]-1])
for(i[13]=0;i[13]<20;i[13]++)
if(mul_sta[i[13]][i[11]-i[12]+1]==-WRONG)
{
mul_sta[i[13]][i[11]-i[12]+1]=ar[0][i[11]];
goto part4;
}
}
else
{
if((ar[0][i[11]]==ar[0][i[11]-1])&&(ar[0][i[11]]!=ar[0][i[11]+1]))
for(i[12]=i[11]-1;i[12]>=0;i[12]--)
if((ar[0][i[12]]!=ar[0][i[12]-1])&&(ar[0][i[12]]==ar[0][i[12]+1]))
for(i[13]=0;i[13]<20;i[13]++)
if(mul_sta[i[13]][i[11]-i[12]+1]==-WRONG)
{
mul_sta[i[13]][i[11]-i[12]+1]=ar[0][i[11]];
goto part5;
}
}
part5:i[11]++;
}
part4: for(i[14]=1;i[14]<20;i[14]++)
if(mul_sta[0][i[14]]!=-WRONG)
i[15]=i[14]; //求出最高出现次数
for(i[14]=1;i[14]<20;i[14]++)
if((mul_sta[i[14]][i[15]]==-WRONG)&&(mul_sta[i[14]-1][i[15]]!=-WRONG))
{
if(i[14]==1)
{
printf("The Mode:%g Frequency of Occurrence:%d",mul_sta[i[14]-1][i[15]],i[15]);
i[10]=0; i[14]=0;
goto part3;
}
else
{
printf("The number of Mods:%d Mods:",i[14]);
for(i[16]=0;i[16]<i[14];i[16]++)
{
if(i[16]==i[14]-1)
printf("%g ",mul_sta[i[16]][i[15]]);
else
printf("%g,",mul_sta[i[16]][i[15]]);
}
printf("Frequency of Occurrence:%d",i[15]);
i[10]=0; i[14]=0;
goto part3;
}
}
}
part3: printf("\n");
return 0;
}
void arsort(long i1,long i2,double (*ar)[i2]) //Use pointers to sort one of the latitudes in a two-dimensional array
{
long i3,i4;
double i5;
for(i3=0;i3<(i2-1);i3++)
for(i4=0;i4<(i2-i3-1);i4++)
if(*(*(ar+i1)+i4)>*(*(ar+i1)+i4+1))
{
i5=*(*(ar+i1)+i4);
*(*(ar+i1)+i4)=(*(*(ar+i1)+i4+1));
*(*(ar+i1)+i4+1)=i5;
}
}