- 论坛徽章:
- 0
|
我看的书是 机械工业出版社出版 c语言设计语言(第2版·新版)习题解答
第12页有一个程序
编写一个程序,打印输入中各个字符出现的频率的直方图。
#include <stdio.h>;
#include <ctype.h>;
#define MAXHIST 15 /*max length of histogram*/
#define MAXCHAR 128 /*max different characters*/
main()
{
int c, i;
int len;
int maxvalue;
int cc[MAXCHAR];
for(i = 0; i < MAXCHAR; ++i)
cc = 0;
while((c = getchar()) != EOF)
if(c < MAXCHAR)
++cc[c];
maxvalue = 0;
for(i = 1; i < MAXCHAR; ++i)
if(cc >; maxvalue)
maxvalue = cc;
for(i =1; i < MAXCHAR; ++i){
if(isprint(i))
printf("%5d - %c - %5d : ", i , i, cc);
else
printf("%5d - -%5d : ", i , cc);
if(cc >; 0){ /*
if((len = cc * MAXHIST / maxvalue) <= 0) /*
len = 1; /*
}else /*
len = 0; /*
while(len >; 0){ /*
putchar('*'); /*
--len; /*
}
putchar('\n');
}
}
原程序中因为cc, MAXHIST,maxvalue都是大于等于0的,所以len肯定大于等于0,当len>;0时,按原程序
else
len = 0;
那么len = 0,这样的话,就不会继续执行后面的while语句了,也就是说
当 cc *MAXHIST / maxvalue大于0时,将不打印*. 可是 当我运行此程序时发现,
上面最后的做了*/记号的那几行竟然等效于
len = cc * MAXHIST / maxvalue;
while(len >; 0){
putchar('*');
--len;
}
各位大哥帮我看看,我对原程序的分析哪里出问题了? |
|