• C语言实现直方图统计和直方图均衡化
万次阅读
2017-12-06 11:56:54

## C语言实现直方图统计

#include <stdio.h>

void DrawHistogram(int nArray[], int nCount, char ch) {

for (int i = 0; i < nCount; i++) {
for (int j = 0; j < nArray[i]; j++)
printf("%c", ch);
printf(" %d\n", nArray[i]);
}
printf("\n");
}

void CountRangeItems(int dArray[], int nDataItems, int nArray[]) {
for (int i = 0; i < nDataItems; i++) {
if (dArray[i] <= 160) nArray[0]++;
else if (dArray[i] < 165) nArray[1]++;
else if (dArray[i] < 170) nArray[2]++;
else if (dArray[i] < 175) nArray[3]++;
else if (dArray[i] > 175) nArray[4]++;
}
}

int main() {
int height[] = { 185, 176, 165, 169, 160, 152, 173, 196, 178, 169, 166, 182, 181, 171, 159, 163, 168 };
int nArray[5] = { 0 };
int nCount = 5, size = sizeof(height) / sizeof(height[0]);
CountRangeItems(height, size, nArray);
DrawHistogram(nArray, nCount, '*');
getchar();
return 0;
}


## C语言实现直方图均衡化

#include <stdio.h>

void DrawHistogram(int nArray[], int nCount, char ch) {

for (int i = 0; i < nCount; i++) {
for (int j = 0; j < nArray[i]; j++)
printf("%c", ch);
printf(" %d\n", nArray[i]);
}
printf("\n");
}

void CountRangeItems(int dArray[], int nDataItems, int nArray[]) {
for (int i = 0; i < nDataItems; i++) {
if (dArray[i] <= 160) nArray[0]++;
else if (dArray[i] < 165) nArray[1]++;
else if (dArray[i] < 170) nArray[2]++;
else if (dArray[i] < 175) nArray[3]++;
else if (dArray[i] > 175) nArray[4]++;
}
}

int main() {
int height[] = { 158, 176, 165, 159, 160, 182, 173, 159, 178, 169, 166, 182, 179, 171, 159, 166, 157, 176, 171, 159 };
int nArray[5] = { 0 };
int nCount = 5, size = sizeof(height) / sizeof(height[0]);
CountRangeItems(height, size, nArray);
DrawHistogram(nArray, nCount, '*');
printf("\n");

//直方图归一化
float histPDF[] = { 0 };
printf("直方图归一化：\n");
for (int i = 0; i < nCount; i++)
{
histPDF[i] = float(nArray[i])/20.0;
//printf(" (%d) ", nArray[i]);
printf("%.2f ", histPDF[i]);
}

//累积直方图
printf("\n累积直方图：\n");
float histCDF[] = { 0 };
for (int i = 0; i < nCount; i++)
{
if (0 == i)
histCDF[i] = histPDF[i];
else
histCDF[i] = histCDF[i - 1] + histPDF[i];
printf("%.2f ",histCDF[i]);

}
//直方图均衡化，映射
printf("\n直方图均衡化：\n");
int histEQU[] = {0};
for (int i = 0; i < nCount; i++)
{
histEQU[i] = (int)(5.0 * histCDF[i] + 0.5);
printf("%d ",histEQU[i]);
}
getchar();
return 0;
}
更多相关内容
• C语言计算图片直方图，RGBA原图像，有四个颜色通道分别为R,G,B,A。本例循环分别将三个通道的RGB值取出，返回指针
• 关键字：直方图统计C语言、lena256色灰度图 本文内容主要给大家介绍数字图像处理领域中直方图的相关内容以及在C语言下的实现，重点介绍了BMP图像文件格式，对于进一步的直方图均衡、直方图匹配、局部直方图处理等...

关键字：直方图统计、C语言、lena256色灰度图

本文内容主要给大家介绍数字图像处理领域中直方图的相关内容以及在C语言下的实现，重点介绍了BMP图像文件格式，对于进一步的直方图均衡、直方图匹配、局部直方图处理等内容之后会陆续推出。

目录

1.直方图

2.图像的格式

2.1位图文件头

2.2位图信息头

2.3调色板

2.4位图数据

3.C语言实现

参考

# 1.直方图

直方图是多种空间域处理技术的基础，从统计学角度出发，提供关于一幅图像质量、对比度的相关信息，在暗图像中，直方图的分量集中在灰度级的低端，类似的，亮图像直方图的分量倾向于灰度级的高端；低对比度图像具有较窄的直方图，而高对比度图像倾向于占据整个可能的灰度级并且分布均匀。

# 2.图像的格式

图像有多种存储格式，像我们熟悉的jpg、png、bmp等等，其中bmp(bitmap的缩写)作为Windows操作系统的图像标准格式，使用广泛，加上bmp格式通常是不压缩的，初学数字图像处理时更易上手些，本文使用BMP格式的lena图像，该图适度的混合了细节、平滑区域、阴影和纹理，能够很好的测试各种图像处理算法，是数字图像处理的标准图之一。

BMP文件格式主要由位图文件头、位图信息头、调色板、位图数据四部分组成，下面我们依次介绍：

## 2.1位图文件头

 字段 大小（字节） 描述 bfType 2 位图类别，Windows下为BM bfSize 4 该BMP图像文件的大小 bfReserved1 2 保留字段，总为0 bfReserved2 2 保留字段，总为0 bfOffBits 4 BMP位图数据的地址

我们结合lena.bmp图像具体来看一下

 十六进制值 描述 42 4D BM的ASCII值，表明该文件为BMP格式 36 04 04 00 40436H=263222字节，约257KB 00 00 00 00 保留字段，总为0 36 04 00 00 436H=1078，位图数据开始的地方，即文件头、信息头、调色板的总长

## 2.2位图信息头

 字段名 大小(字节) 描述 biSize 4 本结构的大小，在Windows中总为28H=40字节 biWidth 4 该位图的宽度，以像素为单位 biHeight 4 该位图的高度，以像素为单位 biPlanes 2 目标设备的位平面数，必须为1 biBitCount 2 位深度，常用1、4、8、24分布对应单色、16色、256色、真彩色 biCompression 4 位图的压缩类型，0、1、2分别对应不压缩、BI-RLE8压缩、BI-RLE4压缩 biSizeImage 4 位图的大小，以字节为单位 biXPelsPerMeter 4 位图的目标设备水平分辨率，以每米像素数为单位 biYpelsPerMeter 4 位图的目标设备垂直分辨率，以每米像素数为单位 biClrUsed 4 该位图使用的颜色数 biClrImportant 4 位图显示时被认为重要的颜色数

结合lena.bmp图像具体看一下

 十六进制值 描述 28 00 00 00 该部分共28H=40字节 00 02 00 00 该位图宽200H=512个像素 00 02 00 00 该位图高200H=512个像素 01 00 目标设备平面数，必须为1 08 00 位深度为8，256色 00 00 00 00 位图不压缩 00 00 04 00 位图大小不超过40000H=262144个字节 00 00 00 00 目标设备参数 00 00 00 00 目标设备参数 00 01 00 00 使用颜色100H=256色 00 01 00 00 其中重要的颜色100H=256色

## 2.3调色板

 字段 大小(字节) 描述 rgbBlue 1 蓝色亮度值 rgbGreen 1 绿色亮度值 rgbRed 1 红色亮度值 rgbReserved 1 保留，总为0

## 2.4位图数据

接下来便是真正的位图数据了，14 + 40 + 256 * 4 = 1078，即位图文件头中的bfOffBits字段。另外要注意，我们这里用的是256色的图像，24位的真彩色图像时没有调色板的，位图信息头后直接就是位图数据。

# 3.C语言实现

由于篇幅原因，这里给出统计直方图相关代码，灰度最大值、最小值、数学期望、方差、图像熵等源码在下方GitHub地址中一并给出：https://github.com/fuyuanhao/HDIL-DIP :)欢迎大家给我点点小星星

//需要引入头文件window.h
//声明相关变量
BYTE bmpValue[512 * 512];
FILE *fp;
//打开lena.bmp图像文件
fp = fopen("lena.bmp", "rb");
if (!fp){
printf("Cann't open the file!\n");
return 0;
}
//读取图像信息
fread(bmpValue, 1, 512 * 512, fp);
//将图像灰度值存入一位数组中
int grayValue[512 * 512] = { 0 };
for (int i = 0; i < 512 * 512; i++)
{
grayValue[i] = bmpColorTable[bmpValue[i]].rgbBlue;
}
//统计直方图
int grayCount[256] = { 0 };
double grayFrequency[256] = { 0.0 };
for (int i = 0; i < 512 * 512; i++)
{
grayCount[grayValue[i]]++;
}
for (int i = 0; i < 256; i++){
if (grayCount[i]){
grayFrequency[i] = grayCount[i] / (512.0*512.0);
printf("灰度值%3d 频数为%6d 频率为%f\n", i, grayCount[i], grayFrequency[i]);
}
}
//关闭图像文件
fclose(fp);


# 参考

[1]冈萨雷斯.数字图像处理[M].电子工业出版社:北京,2011:72-87.

[2]贾永红.数字图像处理[M].武汉大学出版社:武汉,2015:34-38.

此外，本文撰写时参考了网上多篇博客，在此感谢大家的帮助。

如果觉得本文有帮助，可以关注公众号【妙手】，获取更多数字图像处理相关内容：

展开全文
• 用C编写的直方图显示，每个矩形分别为不同颜色，在WinTC下编译通过
• 这是那本著名的《C语言程序设计》里的数组那部分的一个练习题基本思路是先统计出每个单词的长度(longth)和每个长度的单词出现的次数(number)，然后用用两重循环分别扫描X和Y轴绘制直方图代码：#include #include #...

这是那本著名的《C语言程序设计》里的数组那部分的一个练习题

基本思路是先统计出每个单词的长度(longth)和每个长度的单词出现的次数(number)，然后用用两重循环分别扫描X和Y轴绘制直方图

代码：

#include

#include

#define N 50

struct words

{

int longth;

int number;

};

int main()

{

//statistics

words w[N];

for(int i=0;i

int flag=0;

char c;

for(int i=0;i

{

while((c = getchar())!= ' ')

{

if(c == '\n') break;

else w[i].longth++;

}

flag = i;

if(c == '\n') break;

}

printf("Count the longth of each word inputted:\n");

printf("No.\tLongth\n");

for(int j=0;j

{

if(w[j].longth != 0) printf("%2d\t%2d\n",j+1,w[j].longth);

}

//统计长度为i的单词有几个

for(int i=1;i

{

for(int j=0;j<=flag;j++)

if(w[j].longth == i) w[i].number++;

else continue;

}

printf("Count the appearance times of each longth word:\n");

printf("Longth\tCount\n");

for(int i=1;i

if(w[i].number!=0)printf("%d\t%d\n",i,w[i].number);

//sort

int s[N];

for(int i=0;i

//for(int i=0;i

//找到横坐标的最大值

for(int j=0;j

for(int k=0;k

if(s[k]

{

int temp=s[k];

s[k]=s[k+1];

s[k+1]=temp;

}

int ss[N];

for(int i=1;i

//for(int i=1;i

//找到纵坐标的最大值

for(int j=1;j

for(int k=1;k

if(ss[k]

{

int temp=ss[k];

ss[k]=ss[k+1];

ss[k+1]=temp;

}

//draw the Histogram

int max_longth = s[0];//最长的长度，即横坐标的最大点

int max_number = ss[1];//最多的个数，即纵坐标的最高点

printf("max_longth=%d\nmax_number=%d\n",max_longth,max_number);

//print

printf("The Histogram :\n");

printf("X: The longth of each input word\n");

printf("Y: The statistics of their appearance\n");

for(int i=max_number;i>0;i--)//打印纵坐标

{

printf("%2d",i);

for(int k=1;k<=max_longth;k++)//开始对横坐标进行扫描

{

if((w[k].longth = k)&&(w[k].number >= i)) printf("%c",219);

else printf(" ");

}

printf("\n");

}

printf(" ");

for(int i=1;i<=max_longth;i++)

printf("%d",i);

printf("\nJob Done!\n");

}

其实一部分调试时所用的语句我没有删掉，或许对读程序有帮助。

下面是我的一个测试的结果图：

展开全文
• 直方图既是一种精确表示数值型数据分布的统计图。从更一般的数学意义看，直方图也是一种不预先设定概率分布模型，只利用数据本身，进行概率密度估计的算法。属于统计学中非参数估计的基础算法。直方图也有很多种，用...

一、直方图的基本概念

在上文中介绍了，要计算联合熵，可以借助直方图提供的概率密度估计结果。

直方图既是一种精确表示数值型数据分布的统计图。从更一般的数学意义看，直方图也是一种不预先设定概率分布模型，只利用数据本身，进行概率密度估计的算法。属于统计学中非参数估计的基础算法。

直方图也有很多种，用得最多的一维频率直方图。虽然这种直方图看起来跟条形图(bar graph)差不多，但是条形图目的是关联两个数据维度，而直方图只涉及一个数据维度。要构建一维频率直方图，大致分为如下几步：

第一步，是将一维数据的所有n个样本从小到大升序排列，记作{x1, x2, x3, … , xn}，从而确定其样本取值范围[x1, xn]；

第二步是将整个取值范围划分为一系列连续的间隔，这个间隔被称之为箱(bin)或者bucket(桶)，间隔通常(但不是必须)具有相同的尺寸；

第三步是计算每个间隔中落入了多少个样本(频数)，从而计算出每个间隔中落入样本的频率(频数/n)；

第四步是作图，在直角坐标系上，纵坐标是频率，横坐标是一维数据的数值。在每个间隔上方依据其频率画一个矩形。矩形的高度总和等于1。

直方图概念可以参考维基百科hisogram词条或者百度百科频率直方图词条。直方图绘制中，最重要的工作就是间隔的选取。当样本总数n趋近与无穷而间隔趋近于极小时，频率直方图的阶梯形折线将逼近于概率密度曲线。下文中将统一以bin(箱)来代表间隔。

二、直方图的数学意义

在更一般的数学意义上，直方图是计算落入每个不相交类别(bin)的观察数量的函数mi，而直方图的图形仅仅是表示直方图的一种方式。设bin的宽度为h，bin的数量为k，样本总数为n。这直方图函数m满足如下条件：

样本中最大值为max x, 最小值为min x, 则bin的数量k可以计算如下：

每个设第i个bin内落入的样本数量为mi个，对应的频率fi为：

fi = mi / n

题外话：使用数组将每个bin的上下确界(记作Si和Ii)和对应的频率fi以键值对的形式保存，记为(Si, Ii]: fi，即可将整个直方图的计算结果保存，可随时取出绘制成图形。python的pandas类库就是这么做的。

然而bin的宽度如何选取呢？没有“最佳”的bin宽度，不同的bin宽度可以揭示数据的不同特征。这就是分组数据的精妙之处。有一些经验性的规则可以帮我们。比如：

平方根选择：它取样本总数的平方根并舍入到下一个整数。此方法由Excel、python等许多程序使用

Sturges公式，来自二项式分布，并隐含地假设近似正态分布。它隐含地将箱尺寸基于数据范围，并且如果n  <30 则可能表现不佳  ，因为箱的数量将小 – 小于7 – 并且不太可能在数据中显示趋势。如果数据不是正态分布，它也可能表现不佳。

更多的bin宽度/个数 的经验选择法请参考维基百科hisogram词条。

三、使用Python计算直方图

使用python的pandas类库可以非常轻松地计算一维频率直方图。pandas有两个主要数据结构Series(一维)和DataFrame(二维)。使用Series.value_counts()方法，可以很容易地把某一维数据series的分组频率结果，也保存成series的结构。series结构其实就是个一维数组，只不过其数组下标不一定是递增的自然数列，也可以是指定的索引。关于该函数的详细介绍请参考pandas官方文档pandas.Series.value_counts

PowerShell

In [121]: data = np.random.randint(0, 7, size=50)

In [122]: data

Out[122]:

array([6, 4, 1, 3, 4, 4, 4, 6, 5, 2, 6, 1, 0, 4, 3, 2, 5, 3, 4, 0, 5, 3, 0,

1, 5, 0, 1, 5, 3, 4, 1, 2, 3, 2, 4, 6, 1, 4, 3, 5, 2, 1, 2, 4, 1, 6,

3, 6, 3, 3])

In [123]: s = pd.Series(data)

In [124]: s.value_counts()

Out[124]:

4 10

3 10

1 8

6 6

5 6

2 6

0 4

dtype: int64

//注意，value_counts只统计了频数，没算频率

//要算频率需要归一化，s.value_counts(normalize=True)

//另外bin数量这里取的默认值，如果想指定bin数量，可以写成s.value_counts(bins=10)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

In[121]:data=np.random.randint(0,7,size=50)

In[122]:data

Out[122]:

array([6,4,1,3,4,4,4,6,5,2,6,1,0,4,3,2,5,3,4,0,5,3,0,

1,5,0,1,5,3,4,1,2,3,2,4,6,1,4,3,5,2,1,2,4,1,6,

3,6,3,3])

In[123]:s=pd.Series(data)

In[124]:s.value_counts()

Out[124]:

410

310

18

66

56

26

04

dtype:int64

//注意，value_counts只统计了频数，没算频率

//要算频率需要归一化，s.value_counts(normalize=True)

//另外bin数量这里取的默认值，如果想指定bin数量，可以写成s.value_counts(bins=10)

另外python的numpy类库也有numpy.histogram函数也可以计算直方图统计结果，只是更为底层，它会将频率和bin用两个数组返回。

四、二维联合直方图( 2D Joint Histograms )

之前主要以一维频率直方图为例简单介绍什么是直方图。事实上多个维度也可以计算直方图。先从最简单的二维联合直方图开始介绍。

设有两个样本集X和Y，各有n和m个样本。如果这X与Y各自绘制一维频率直方图，bin的尺寸分别为hx和hy，bin的个数分别是kx, ky。则X与Y构成的二维联合直方图，是一个三维图形：纵轴代表X，横轴代表Y，则二维直方图的bin是一个矩形，面积h = hx * hy。bin的总数k = kx *ky 个。落入每个bin中的样本数或者频率，则以颜色或者Z轴高度表示。

上图是使用python的numpy类库中的numpy.histogram2d 方法来计算二维联合直方图后的结果。这里使用了颜色来表示每个bin中的样本频率。三个小图的不同显示效果是由bin边缘的不同设置造成的。详见numpy官方文档numpy.histogram2d

上图是同时使用颜色和Z轴高度来表示每个bin中的样本频率的二维联合直方图。在这个图中，还在X轴和Y轴处还将各自的一维频率直方图展示了出来，更为容易理解。

存储二维联合直方图的重点，是使用标号保存每个bin的位置信息，及bin所对应的频率。故可以用二维数组来存储。简单记作bin[x][y] = f(x,y)， 其中x和y是数组下标， f(x,y)是下标为x,y的bin对应的频率。

五、多维联合直方图( Multivariate Joint Histogram )

我们可以将直方图这一概率密度估计的算法推广到3维或者更高维度，但3维或者更高维度的联合直方图就不好用图形表示了，更多的时候是作为一种记录统计数据的数据结构而存在，可直接帮助我们计算多个数据维度的联合概率分布，稍作变换就可以计算联合熵和条件熵。

站在计算机科学的角度，多维联合直方图的一个重要问题是，如何表示和存储其计算结果。

一个简单的方法是将多变量联合直方图直接存储为多维数组。一维数据的直方图可以存储成一维数组bin[x]=f(x),二维数据的二维联合直方图可以存储为二维数组bin[x][y] = f(x,y)， 以此类推，n维数据可以存储为n维数组bin[x1][x2]…[xn]=f(x1, x2, …, xn)。

有一些C语言类库可以直接计算多维联合直方图，并且可以与python绑定： https://github.com/boostorg/histogram

然而，使用多维数组的内存需求会随着数据维度和bin数量的增加而显著增加。假设有N个数据维度，我们对所有维度都使用B个bin，如果频率也以浮点数进行存储，那么我们就需要B^N个浮点数才能表示这个多维联合直方图。这对存储空间的消耗也指数型增长的。这给我们处理多维联合直方图造成了很大的麻烦。在下一节中将详细介绍存储多维联合直方图的新数据结构。

展开全文
• 本篇介绍数字图像处理中的图像直方图，读完本文，您将达到仅仅使用C语言来绘制一张图像的灰度直方图和彩色直方图，而完全不用依赖任何第三方库。
• 直方图统计的原理   直方图统计从数学上来说，是对图像中的像素点进行统计。图像直方图统计常用于统计灰度图像，表示...用C语言实现直方图统计： unsigned int histoBuffer[256]; for(int idxCol = 0; idxCol <
• 也可以选择对数据提取特征、再对特征进行计数，这里的特征可以是梯度的长度、梯度的方向、颜色或者其他任何可以反映数据特点的特征，也就是说，直方图是一种用来揭示数据分布的统计特性的工具。直方图的维度通常比...
• 本文实现彩色图像的全局直方图均衡。分别对R/G/B三通道均衡，读写图片采用OpenCV。代码如下：#include //#include //#include //#include #include #include #include #include "EqualizeHist.h"//typedef unsigned ...
• C语言实现灰度直方图 问题描述 一幅长宽分别为n个像素和m个像素的灰度图像可以表示为一个 n*m大小的矩阵 。 其中每个元素 Aij（）是一个 范围内的整数，表示对应位置像素的灰度值。 具体来说，一个 比特的灰度图像中...
• 直方图均衡化部分是用c语言写的，最后用opencv显示原图像，处理后图像以及原图和处理后图的灰度直方图。 虽然做出来了，效果还可以，但不知道为什么处理后图像中有三条白线，真心搞不懂，有看出来问题的大神麻烦...
• CCF CSP 2021-4-1 灰度直方图 C语言100分 灰度直方图 完成时间11-04 16:46 代码长度364B C 正确 100分 耗时15ms 空间使用3.281MB 应该会慢慢更新，0算法基础极限挑战今年12月得CSP。（尽量）坚持每天一道 题目内容：...
• c语言直方图 主要是将数据统计出来，然后再画出直方图
• C语言·数组·灰度直方图 类别 数组 时间限制 2S 内存限制 1000Kb 问题描述 一幅m×n的灰度图像可以用一个二维矩阵表示，矩阵中的每个元素表示对应像素的灰度值。 灰度直方图表示图像中具有每种灰度级的象素的...
• C语言学习记录——打印直方图 编写一个程序，打印输入的数字字符中各个数字出现次数的直方图。 打印水平直方图 #include <stdio.h> main() { int number[10]; int i,c,x,y,maxy; maxy = 0; for (i = 0; i...
• 要显示这样的直方图统计数字出现的频率 x x x x x x 0 1 2 3 开始打印，统计出现次数最多的数，相应出现次数为n，满足出现次数为n的打印’*’，不满足的打印空格；然后让n-1，再统计出现次数为n-1的元素进行判断和...
• 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #define inside 1#define outside 0/*编写一个程序，统计并打印输入单词不同长度的个数，并打印输入中单词长度的直方图*/main (){int test,c,i,j,k;int tj[10];...
• ///直方图归一化 // 获取直方图统计的最大值，用于动态显示直方图 float max_value; cvGetMinMaxHistValue(hist_lbp, 0, &max_value, 0, 0 ); // 设置直方图显示图像 int scale = 2; int hist_height = 100; int ...
• 反投影映射 meanshift LUT查表
• 统计文本单词长度出现频率并打印直方图。#include#define MAXHIST 15#define MAXWORD 11 //统计最长单词的长度#define IN 1 //状态标示#define OUT 0int main(){int c,i,nc,state;int len;int maxvalue;int ovflow;...
• 文章目录直方图均衡化原理实现出现问题附代码 直方图均衡化 原理 直方图均衡化(Histogram ...直方图是表示数字图像中每一灰度出现频率的统计关系。直方图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图
• 统计随机1000个数字在各个区域出现的个数，并画出扇形图，直方图，折线图。
• 2021-08-08 CFF-CSP 灰度直方图 C语言实现 前言 本次实验所用设备为微软Surface pro4，操作系统为windows10。 注意事项 （1）CFF-CSP考试提交一定要使用C++编译环境 。 实验题目 实现代码如下 #include<stdio.h...
• 直方图均衡化Tag内容描述：1、直方图均衡化的matlab实现 海南大学课程论文课程名称：数字图像处理 题目名称：直方图均衡化的matlab实现 学 院：信息科学技术学院 专业班级：2010级计算机科学与技术专业姓名：学号： ...
• 学习《C 程序设计语言》时，练习1-13需要我们绘制单词统计直方图，作为C语言学习的初学者，看到绘制直方图的时候，脑子里是没有概念的，在参考了一些人的程序后，编写了以下代码： #include&lt;stdio.h&gt...
• 原标题：C语言精简案例--销售统计直方图01C语言精简案例-销售统计直方图//今晚内容：C语言新案例-数据表//讲课老师：范志军#include #include void ShowSales(int* sales)//在窗口上打印销售统计直方图{int i,j;...

...