练习1-13:编写一个程序,打印输入中单词长度的直方图。水平容易,垂直难。

对题目不太理解  什么事单词长度  什么是直方图,所以选择直接看答案。 ps 不得不承认智商是硬伤....

直接复制答案:

#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0

int 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()) != 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;
}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);
}

 垂直直方图

#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0

int main()
{

int c, i, nc, j, 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];
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 = 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);

}

posted @ 2013-10-19 12:00  _Jango  阅读(1411)  评论(1编辑  收藏  举报