这个程序我有点看不懂,请大家指点一下

法号老鸭 2011-12-11 08:37:14
题目是:编写一个程序,打印输入中单词长度的直方图和垂直方向的直方图
程序如下:
#include <stdio.h>

#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0

main()
{
int c,i,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()) != '#')
{
if(c== ' ' || c== '\n' || c== '\t')
{
if(state = IN)
{
state = OUT;
if(nc > 0)
{
if(nc < MAXWORD)
wl[nc]++;
else
ovflow++;

}

}
}
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)
{
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);
return 0;
}


...全文
118 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liru125504 2011-12-13
  • 打赏
  • 举报
回复
统计输出如下:
2 - 1 :******* //单词长度为2的单词有1个
4 - 3 :************** //单词长度为4的单词有2个
5 - 1 :******* //单词长度为5的单词有1个


是7个*,刚才不小心删除了几个
liru125504 2011-12-13
  • 打赏
  • 举报
回复
第一个函数是每输入一个单词然后回车,这样输入n个单词后在输入结束符‘#’,程序会统计出不同长度的单词,然后用垂直图表示。
例如:
输入单词如下:
hello
word
this
is
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
#
统计输出如下:
1 - 0 :
2 - 1 :***** //单词长度为2的单词有1个
3 - 0 :
4 - 3 :*************** //单词长度为4的单词有2个
5 - 1 :***** //单词长度为5的单词有1个
6 - 0 :
7 - 0 :
8 - 0 :
9 - 0 :
10 - 0 :
there are 1 words >= 11 //单词长度大于等于11的单词有1个
Press any key to continue

7个*表示一个单词,如果有两个单词长度一样就用14个*表示,一次类推。

第二个程序自己单步调试一下看看吧。
法号老鸭 2011-12-12
  • 打赏
  • 举报
回复
木有人回答一下吗
法号老鸭 2011-12-11
  • 打赏
  • 举报
回复
我是楼主,还有垂直方向的直方图:
#include <stdio.h>

#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0

main()
{
int c, i, j, nc,state;
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()) != '#')
{
if(c == ' '||c == '\n'||c == '\t')
{
state = OUT;
if(nc > 0)
{
if(nc < MAXWORD)
wl[nc]++;
else
ovflow++;
}
}
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 = MAXHIST;i > 0;i--) //这段我也看不懂什么意思!!!!!!!!
{
for(j = 1;j < MAXWORD;j++)
{
if(wl[j] * MAXHIST / maxvalue >= i)
printf(" * ");
else
printf(" ");
}
putchar('\n');

}

for(i = 1;i < MAXWORD;i++)
printf("%4d ",i);
putchar('\n');
for(i = 1;i < MAXWORD;i++)
printf("%4d ",wl[i]);
putchar('\n');
if(ovflow > 0)
printf("there are %d words >= %d\n",ovflow,MAXWORD);
return 0;
}

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧