2867 - 【设计型】第8章:数组8.9 平均数、中位数、众数
在习题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; } } }