- 论坛徽章:
- 0
|
题目要求:
编写一个程序,打印输入中单词长度的直方图。
下面是参考书里面给出的答案:
#include <stdio.h>
#define MAXHIST 15 /*max length of histogram*/
#define MAXWORD 11 /*max length of a word*/
#define IN 1 /*inside a word*/
#define OUT 0 /*outside a word*/ /* 1 */
/* print horizontal histogram*/
main()
{
int c, i, nc, state;
int len; /*length of each bar*/
int maxvalue; /*maximum value for wl[]*/
int ovflow; /*number of overflow words*/
int wl[MAXWORD]; /*word length couters*/
state = OUT;
nc = 0; /*number of chars in a word*/
ovflow = 0; /*number of words >= MAXWORD*/
for (i = 0; i < MAXWORD; ++i)
wl[i] = 0;
while ((c = getchar ())!= EOF ){
if (c == ' ' || c == '\n' || c == '\t'){
state = OUT;
if (nc > 0)
if (nc < MAXWORD)
++wl[nc];
else
++ovflow;
nc = 0;
} else if (state == OUT){
state = IN;
nc = 1 ; /*beginning of a new word*/ /* 2 */
} else
++nc; /*inside a word*/
}
maxvalue = 0;
for (i = 1; i < MAXWORD; ++i)
if (wl[i] > maxvalue)
maxvalue = wl[i];
for (i = 1; i < MAXWORD; ++i){
printf("%5d - %5d :", i, wl[i]);
if (wl[i] > 0){
if ((len = wl[i] * MAXHIST / maxvalue) <= 0)
len = 1;
} else
len = 0;
while (len > 0){
putchar ('*');
--len;
}
putchar('\n');
}
if (ovflow > 0)
printf("There are %d words >= %d\n", ovflow, MAXWORD);
} |
我看了好几遍了,还有以下几个地方看不明白:
1 wl[]的[]为什么是MAXWORD?这个是怎么用来记录字符长度的?
2 为什么nc = 1 是一个新词的开始?
谢谢。
[ 本帖最后由 amro 于 2008-2-20 19:39 编辑 ] |
|