大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
平均值 中位数 众数
在习题8.8的基础上, 用一个整型数组feedback保存调查的40个反馈意见。用函数编程计算反馈意见的平均值(Mean) 、中位数(Median) 和众数(Mode) 。中位数指的是排列在数组中间的数。如果原始数据的个数是偶数,那么中位数等于中间那两个元素的算术平均值。众数是数组中出现次数最多的那个数(不考虑两个或两个以上的反馈意见出现次数相同的情况)。
输入:
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 9
输出:
4.725000 5.000000 9
#include <stdio.h>
#define N 40
double Mean (int feedback[N]);
double Median (int feedback[N]);
int Mode (int feedback[N],int count[]);
int main (void)
{
int feedback[N]={
0},count[10000]={
0},i,mode=0;
double mean,median;
for (i=0;i<N;i++)
{
scanf("%d",&feedback[i]);
}
mean=Mean(feedback);
median=Median(feedback);
mode=Mode(feedback,count);
printf("%f %f %d",mean,median,mode);
return 0;
}
double Mean (int feedback[N])
{
int i;
double sum=0,mean;
for (i=0;i<N;i++)
{
sum+=feedback[i];
}
mean=sum/N;
return mean;
}
double Median (int feedback[N])
{
int i,temp,count;
double median;
do{
count=0;
for (i=0;i<N-1;i++)
{
if (feedback[i]<feedback[i+1])
{
temp=feedback[i];
feedback[i]=feedback[i+1];
feedback[i+1]=temp;
count++;
}
}
}while (count!=0);
if (N%2!=0)
{
median=feedback[N/2];
}
else
{
median=(feedback[N/2]+feedback[(N/2)-1])/2.0;
}
return median;
}
int Mode (int feedback[N],int count[])
{
int i,mode=0,max;
max=0;
for (i=0;i<N;i++)
{
count[feedback[i]]++;
}
for (i=0;i<N;i++)
{
if(max<count[feedback[i]])
{
max=count[feedback[i]];
mode=feedback[i];
}
}
return mode;
}
众数部分参考了别人的代码(因为一开始没想到T^T
⚠修改:
谢谢@囷囷jn 的提醒,确实一开始的中位数部分只考虑了N为奇数的情况(学校oj居然给我AC了,太BUG了),没有考虑N为偶数的情况,目前已修改。
而且!!修改过程中发现了一个很恐怖的事情,我一开始在求中位数的函数部分,冒泡排序的时候数组⚠越界了!!!越界真的是很恐怖的事情,感受到了!!!
时间:2020/11/26 17:09:23
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192439.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...