练习1-13
2016-09-13 本文已影响0人
Hy_Slin
这个练习直到求最大值之前的部分都是一样的。关键是那两个for语句。
for(i = MAXHIST; i > 0; ++i){
for (j = MAXHIST; j > 0; --j)
for (i = 1; i < MAXWORD; ++i)
if(wl[j] * MAXHIST / maxvalue >= i)
printf("");
else
printf(" ");
wl[j] * MAXHIST / maxvalue这个公式依然是计算需要打多少个,然后判断当前这个高度是否需要打.他是从上到下从左到右进行扫描的,
简单的说就是从直方图最高的那一行开始判断,假设是20,那么开始从左到右进行判断,因为从左到右依次是1、2、3……MAXWORD。所以这个公式将从1个单词长度开始判断出现的次数的比例是否满足这个高度,比如弱这个公式判断的是最大值 那么这个公式的结果就是20.那么当前的高度i也是20的话则打印,如果当前高度是19.公式得到的结果还是20,那么>=当前高度i,所以依然要打印。而如果公式的计算结果<i也就是说没达到这个高度的条件的话则打印空格然后进行下一个,就是wl[++j]的判断。然后把这个高度i从1到MAXWORD都判断后高度i减一然后继续判断公式是否达到此高度。
这两个练习包括之前的都是我看习题解答那本书琢磨的,让我一个初学者去编写这种题目简直丧心病狂,我不清楚有没有初学者不看答案自己编出来。反正我是没办法。但是再弄懂后开起来还是蛮简单的。
练习1-14那个答案中的头文件我还不知道是什么,因为没看到那。所以先不写等看到那的时候再回来写。