C语言的 直方图问题 请高手前辈指点一二

编写一个统计相同单词长度的出现次数的直方图#include<stdio.h>#defineMAXHIST15/*最大*个数*/#defineMAXWORD11/*最大单词... 编写一个统计相同单词长度的出现次数的直方图
#include <stdio.h>
#define MAXHIST 15 /* 最大 * 个数 */
#define MAXWORD 11 /* 最大单词长度 */
#define IN 1 /* 进,单词中间 */
#define OUT 0 /* 出,单词末尾 */

int main()
{
int c,i,nc,state; // nc - 当前单词的长度, state - 当前单词的进出状态
int len; // 画直方图时的条形长度
int maxvalue; // 最大的单词长度
int ovflow; // 超长 的单词个数
int wl[MAXWORD]; // 不同长度的 单词个数

state=OUT;
nc=0;
ovflow=0;

// 各长度的 单词个数 初始为零
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]; // 单词长度为nc的个数 累加 1
else
++ovflow; // 超长了
nc=0;
}
else if(state == OUT) // 遇到字母,
{
state=IN; // 进,单词开始
nc=1; // 记录单词长度
}
else
++nc; // 进,单词中间,记录单词长度
}
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)
{
// 每种单词长度的条形的长度(* 的个数),最多单词的那个定为15 个 *,
// 其他单词数量的长度按比例
if((len = wl[i] * MAXHIST / maxvalue) <= 0)
len=1; // 不足1个 * 的按1个计
}
else
len=0; // 有一些长度的单词个数为零,不打印条形

while(len > 0) // 打印 条形(一串 *)
{
putchar('*');/*这里的putchar也可以作为打印使用么???*/
--len; /*这里彻底不明白,为什么要len=len-1???*/
}
putchar('\n'); // 每种长度的统计结果显示成一行
}

if(ovflow > 0) // 有木有单词超长的?
// 有,ovflow 个单词的长度超过 MAXWORD
printf("There are %d words >= %d\n",ovflow,MAXWORD);
return 0;/*这个return 0的作用?*/
}
展开
 我来答
匿名用户
2011-12-29
展开全部
我演示了下没结果,不懂,求解,希望一起学习!!
追问
for(i=1;i0){ if((len=wl[i]*MAXHIST/maxvalue)0){   /*以len=wl[i]*MAXHIST/maxvalue为条件*/
putchar('#'); --len;} /*这里在进行一个循环 算出多少len打多数个#*/
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式