题目
给定一个长度为100的整型数组。根据键盘输入的整数n(n<100),往数组中依次读入n个整数,输出其中位数,平均数,众数,结果以double数据格式输出。
输入:8
1 2 3 9 9 4 0 6
输出:
中位数:3.500000
平均数:4.250000
众数:9.000000
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//冒泡排序
void paixu(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
//求众数
void zhongshu(int a[],int n)
{
int i,temp,j,l,k=0,flag;
int b[105]={0};
int p=1,count=0;
for(j=0;j<n;j++)
{
temp=a[j];//控制光标移动,实施遍历
for(i=0;i<n;i++)
{
if(temp==a[i])
{
count++;
}
}
if(count>=p) {
if(count==p&&a[j]!=a[j-1]) flag=1;
else if(count>p) flag=0;
p=count;
if(a[j]!=a[j-1]) {b[k++]=a[j];}
}//更新,记录众数
count=0;//计数器重置
}
if(p==1)
{for(i=0;i<105;i++)
{
if(b[i]!=0) printf("%d ",b[i]);}
}
else
{
if(flag)
{
for(i=1;i<k;i++)
{
printf("%d ",b[i]);
}
}
else printf("%d ",b[k-1]);
}
printf("\n");
}
int main()
{
int a[105];
int n,i,l;
double ave,s,zw,z;
while(scanf("%d",&n)!=EOF)
{
s=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
s+=a[i];//求和
}
ave=(double)(s/n);//求平均数
//排序后求中位数
paixu(a,n);
if(n%2!=0) {l=(n-1)/2;zw=a[l];}
else {l=n/2;zw=(double)(a[l-1]+a[l])/2;}
printf("中位数:");
printf("%lf\n",zw);
printf("平均数:");
printf("%lf\n",ave);
printf("众数:");
zhongshu(a,n);
}
return 0;
}