C语言Double型动态一维数组求众数

//这是我从我的一个二维数组求众数的程序里摘出来的,所以看起来可能有点奇怪

//新手拙作 不喜勿喷 谢谢

之所以想发这个是因为我看到的求众数好像多数是局限于整型的???

程序的主要内容为:读入一个自定义长度的实数数组,对其求众数,可针对无众数、只有一个众数以及同时有多个众数三种情况进行输出

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;
		}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值