2867 - 【设计型】第8章:数组8.9 平均数、中位数、众数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 2 MB

在习题8.8的基础上,用一个整形数组feedback保存调查的40个反馈意见。用函数编程计算反馈意见的平均数(Mean)、中位数(Median)、中数(Mode)。中位数指的是排列在数组中间的数。如果原始数据的个数是偶数,那么中位数等于中间那两个元素的算术平均值(中间指的是元素大小,而不是数组下标.此题的平均值按整数做除法计算即可,结果为整数)。众数是数组中出现次数最多的那个数(不考虑两个或两个以上的反馈意见出现次数相同的情况)。

题目输入

40个数。

题目输出

3行,每一行1个数,分别用来表示平均数、中位数和众数。

输入/输出样例

输入格式

5 7 9 8 7 6 8 9 10 7
9 5 8 10 9 6 8 5 9 7
6 10 5 9 8 9 7 7 9 8
6 9 9 9 8 8 7 9 5 6

输出格式

7
8
9

C语言解答

#include<stdio.h>
#define M 40
#define N 11
int Mean(int answer[],int n);
int Median(int answer[],int n);
int Mode(int answer[],int n);
void DataSort(int a[],int n);
int main()
{
	int i,feedback[M];
	for(i=0;i<M;i++)
	{
		scanf("%d",&feedback[i]);
	}
	printf("%d\n",Mean(feedback,M));
	printf("%d\n",Median(feedback,M));
	printf("%d\n",Mode(feedback,M));
	return 0;
}
int Mean(int answer[],int n)
{
	int i,sum=0;
	for(i=0;i<n;i++)
	{
		sum+=answer[i];
	}
	return n>0?sum/n:-1;
}
int Median(int answer[],int n)
{
	DataSort(answer,n);
	if(n%2==0)
	    return (answer[n/2]+answer[n/2-1])/2;
	else
	    return answer[n/2];
} 
int Mode(int answer[],int n)
{
	int i,grade,max=0,modeValue=0,count[N]={0};
	for(i=0;i<n;i++)
	{
		count[answer[i]]++;
	}
	for(grade=1;grade<=N-1;grade++)
	{
		if(count[grade]>max)
	    {
	    	max=count[grade];
	    	modeValue=grade;
	    }
	}
	return modeValue;
}
void DataSort(int a[],int n)
{
	int i,j,k,temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(a[j]>a[k]) k=j;
		}
		if(k!=i)
		{
			temp=a[k];
			a[k]=a[i];
			a[i]=temp;
		}
	}
}