C语言实现单词长度直方图
讲一下自己的思路:刚开始一直在正向思维想这个直方图怎么去画完整,从无到有,所以一直在考虑怎么在从上往下画的时候依据高度来增加不同位置的图形,整个的思路是从无到有,是一个增加的过程,很麻烦
现在的想法:从有到无,是一个减的过程。
纵坐标为单词的个数,反映为直方条的高度。横坐标为1,2,3,4…默认为单词的输入顺序,代表对应的单词。
思路:1. 按最长的单词个数(对应为高度)去画在每一个横坐标(每个单词的坐标)上,这样就相当于一个嵌套for循环就行了。
2. 在内层for循环做每个位置的条件判断,只有当前正在画的高度满足小于等于这个位置的的高度(单词长度)时,才可以画,否则画空格代替。
不做任何处理的情况下,是把整个坐标轴画的满满的。当做了条件判断时,就减少了一些位置画图(就是那些不该画的位置),是一个思考上的减的过程。
测试结果图
有很多不完美之处,并且刚开始写代码,写的也不优美,轻喷,没时间修饰了,最重要的就是掌握这个从大到小的思想即可。
上核心代码
mlength 是单词的最长长度,num是单词的个数,data存放相应坐标的单词长度。
// 画y轴及直方条
void display_Y(int mlength,int num,int data[])//画Y轴及数据
{
int i,j;
for(i=mlength+1;i >= 1; i--)//最外层循环,mlegth为单词的最长长度,加1是为了y轴高度比直方条的最高度再高一,不影响下面的比较
{
printf("\t\t\t%d-|", i);//每次都需要先画y轴,\t控制直方图的位置
for(j=1;j