输入数据如下

100
974.8 1002.6 1588.1 770.7 1008.9 1206.8 1271.5 1101.9 1341.2 1331.0 1085.4 1184.4 1113.4 1203.9 1170.7 975.4 1462.3 947.8 
1416.0 709.2 1147.5 935.0 1016.3 1031.6 1105.7 849.9 1233.4 1008.6 1063.8 1004.9 1086.2 1022.5 1330.9 1439.4 1236.5 1088.1 
1288.7 1115.8 1217.5 1320.7 1078.1 1203.4 1480.0 1269.9 1049.2 1318.4 1192.0 1016.0 1508.2 1159.6 1021.3 986.1 794.7 1318.3 
1171.2 1161.7 791.2 1143.8 1602.0 951.4 1003.2 840.4 1061.4 958.0 1025.2 1265.0 1196.5 1120.7 1659.3 942.7 1123.3 910.2 
1398.5 1208.6 1305.5 1242.1 1572.3 1416.9 1253.8 1282.3 982.1 1388.5 1057.5 1282.8 1472.7 1011.7 1214.8 1193.4 1139.5

1012.4 1237.6 903.5 1025.5 1121.8 807.8 815.6 1180.1 1105.0 989.4 900.8

第一行为数据个数,下面为数据,结果如下:

频数分布       累积频数分布
组 序      组   距h        组中值m    频数f  频率% 累积频数F  累积频率%
 1       649.8~768.6        709.2       1    0.01       1       0.01
 2       768.6~887.3        828.0       7    0.07       8       0.08
 3       887.3~1006.1       946.7      16    0.16      24       0.24
 4      1006.1~1124.9      1065.5      27    0.27      51       0.51
 5      1124.9~1243.6      1184.3      22    0.22      73       0.73
 6      1243.6~1362.4      1303.0      14    0.14      87       0.87
 7      1362.4~1481.2      1421.8       8    0.08      95       0.95
 8      1481.2~1599.9      1540.5       3    0.03      98       0.98
 9      1599.9~1718.7      1659.3       2    0.02     100       1.00
平均值为:  1140.31
中位数为:  1155.66
众数为:    1074.86

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "math.h"
int main( )
{FILE *fp1,*fp2;double *data,min,max,R,p;int i,j,k,count,n,h,m,t;            fp1=fopen("data.txt","r");if(fp1==0){printf("Error!Can't open it!\n");return 0;}fscanf(fp1,"%d",&count);data=(double *)malloc(count*sizeof(double));     //读入数据for(i=0;!feof(fp1);i++){fscanf(fp1,"%lf",&data[i]);}fclose(fp1); min=max=data[0];for(j=0;j<count;j++){if(min>data[j])  min=data[j];if(max<data[j])  max=data[j];}R=max-min;n=1+3.32*log10((double)count);      //log函数里面必须是double的h=R/n+0.5;t= min-0.5*h;     if(double(7*h)+t<max){n=n+1;h=R/n+0.5;}typedef struct  DATA            //注意DATA和data{                             //vc中间不能定义只能放在前面double limitlast;double limittop;double average;int count1;int pinglv;int leijips;int leijipl;}DATA;DATA bk[245];for(k=0;k<=n;k++){bk[k].limitlast=min+k*h-0.5*h;bk[k].limittop=bk[k].limitlast+h-0.1;bk[k].average=(bk[k].limitlast+bk[k].limittop+0.1)/2;bk[k].count1=0;for(j=0;j<count;j++){ if(data[j]>=bk[k].limitlast&&data[j]<=bk[k].limittop)bk[k].count1++;}bk[0].leijips=bk[0].count1;bk[0].leijipl=bk[0].pinglv;bk[k].pinglv=(bk[k].count1*100/count);    //注意100的位置  放在外面和放在里面不一样if(k>0){bk[k].leijips=bk[k-1].leijips+bk[k].count1;bk[k].leijipl=bk[k-1].leijipl+bk[k].pinglv;}}double sun=0,average1,M,M1;int a,b=0,c=bk[0].count1,Q,max2;for(i=0;i<count;i++)sun=sun+data[i];average1=sun/count;for(k=0;k<=n;k++){if(bk[k].leijips>(0.5*count)){a=k;break;}}for(m=count;m>=0;m--){for(j=0;j<count;j++){if(data[j]>data[j+1]){p=data[j+1];data[j+1]=data[j];data[j]=p;}   }} M=(data[49]+data[50])/2;max2=bk[0].count1;for(i=0;i<=n;i++){if(max2<bk[i].count1){max2=bk[i].count1;Q=i;}}M1=bk[Q].limitlast+(bk[Q+1].count1/(bk[Q+1].count1+bk[Q-1].count1))*h;           //输出到文件fp2=fopen("result.txt","w");fprintf(fp2,"                     频数分布表\n");fprintf(fp2,"组序|     组距h     |  组中值m  |   频数分布   |     累积频数分布\n");fprintf(fp2,"    |               |           | 频数 |频率/%| 累积频数 |累积频率/%\n");for(i=0;i<=n;i++)fprintf(fp2," %d  | %6.1lf~%-6.1lf |  %6.1lf   |  %2d   |  %2d  |    %3d    |   %3d   \n",i+1,bk[i].limitlast,bk[i].limittop,bk[i].average,bk[i].count1,bk[i].pinglv,bk[i].leijips,bk[i].leijipl);fprintf(fp2,"算术平均数为%.1lf\n",average1);fprintf(fp2,"中位数为%.1lf\n",M);fprintf(fp2,"众数为%.1lf\n",M1);fclose(fp2);return 0;
}

计量地理-求中值频率频数相关推荐

  1. Matlab 求矩阵的中值

    比如给出一个矩阵a = [1 3 4; 6 8 9; 3 6 7] a = 1 3 4 6 8 9 3 6 7 而a(:)则是把它变换为一个矢量,即 ans = 1 6 3 3 8 6 4 9 7 这 ...

  2. 快速求数组的中值(不是中间序号的值)

    /* 电脑上食用更佳哦! */ 之前需要做3*3的中值滤波,将图片的数据取出来之后要找出3*3窗口中的中值,并替换掉中间序号的值,所以快速找到中值很重要,这对程序运行时间影响很大 一般要处理数组的元素 ...

  3. 5.1matlab数据统计分析(最大值、最小值、平均值、中值、和、积、累加和、累加积、标准差、相关系数、排序)

    1.求最大元素和最小元素 max():求向量或矩阵的最大元素. min( ):求向量或矩阵的最小元素. (1)当参数为向量时,函数有两种调用格式: ①y=max(X):返回向量X的最大值存入y,如果X ...

  4. 数字图像处理——中值滤波及其改进算法

    一.算法介绍 中值滤波器是非线性滤波器的一个例子,它在保留图像特征方面非常有效. 但是,滤波器的窗口大小直接影响中值滤波器的性能. 较小的窗口保留了特征,但会导致噪声抑制的减少. 在较大窗口的情况下, ...

  5. 高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx

    . .. 快速中值滤波及c语言实现 学生姓名: 刘 勇 学 号: 6100410218 专业班级: 数媒101 [摘要]本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程 ...

  6. 直方图实现快速中值滤波opencv

    中值滤波能够有效去除图像中的异常点,具有去除图像噪声的作用.传统中值滤波的算法一般都是在图像中建立窗口,然后对窗口内的所有像素值进行排序,选择排序后的中间值作为窗口中心像素滤波后的值.由于这个做法在每 ...

  7. 【20180128】【matlab】均值、标准差、方差、协方差、中值的求解

    求均值: 向量 行向量A:mean(A) A = [1,2,3,4,5]; mean(A)ans =3 列向量A:mean(A) B = [0,3,1,0,6]'; mean(B)ans =2 矩阵- ...

  8. 快速中值滤波——Python实现

    原理 中值滤波是空域中常用的一种滤波方式,是一种非线性的滤波.它的原理就是将窗口像素排序,取中值,然后移动窗口,不断重复取中值的过程. 但是,可以发现,每次移动窗口,都需要对像素点进行排序,从而选取中 ...

  9. 中值滤波原理及其C++实现与CUDA优化

    对于数字图像的去噪,前边我们讲了均值滤波算法与高斯滤波算法,此外很常见的还有中值滤波算法,这些滤波算法都属于空间滤波,即对于每一个像素点,都选取其周围矩形区域中的像素点来计算滤波值.最近在项目中要使用 ...

最新文章

  1. BZOJ 2152 「国家集训队」聪聪可可(点分治)【BZOJ计划】
  2. ble串口程序设计流程图_流程图程序设计的步骤
  3. APT 信息收集——shodan.io ,fofa.so、 MX 及 邮件。mx记录查询。censys.io查询子域名。...
  4. LA3415保守的老师
  5. Twitter Heron 实时流处理系统简介
  6. java executorser 停止_Java使用ExecutorService来停止线程服务
  7. BP算法,用梯度下降法更新权值W与偏置项b
  8. 怎样挑选最健康的酸奶?
  9. Docker操作补充
  10. python把dict转成json_Python dict(或对象)与json之间的互相转化
  11. python字符串(in 和not in)(一分钟读懂)
  12. zabbix 自动发现
  13. 吴恩达教授机器学习课程学习【一】- 线性回归(1)
  14. WAP技术与网站建立(转)
  15. 基本软件开发模型:瀑布模型、V型模型、迭代模型、增量模型、螺旋模型、大爆炸模型、敏捷模型、原型模型、W模型 特点分析与总结
  16. 华为云Web应用防火墙 ——为网络安全打通“第一公里”
  17. KO data-bind=“click: func“函数自动执行问题
  18. 自媒体视频号博主个人兴趣认证怎么选择?
  19. js三元表达式使用方法概述
  20. 学习日志(一):与SISR相关又没用的一些概念

热门文章

  1. 神经网络连子棋V1.2版使用说明
  2. 预见2021:云计算发展十大趋势
  3. 零基础想学编程,应该学习哪一门语言呢?看看各种语言的简介!
  4. Python:蟒蛇大战C语言(一)
  5. 17 v-for循环数组和对象及对象数组的方法
  6. Arduino学习笔记之供电方式
  7. 科技云报道:大风起兮,元宇宙的迷惑与野望
  8. python数据爬取疫情实时数据
  9. CG-MB 奔驰怪兽
  10. linux+添加字段命令,linux shell 将一列值相加 的写法