/* Note:Your choice is C IDE */
#include "stdio.h"
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
main()
{
int c, i, j, nc, state; /*暂存C,单词长nc,布尔值state*/
int len, len1; /*图长*/
int maxvalue; /*单词长度最大值*/
int ovflow; /*超过MAXWORD长的单词*/
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' );
}
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;
len1 = MAXHIST - len;
while( len1 > 0 ) {
putchar( ' ' );
--len1;
}
while( len > 0 ) {
putchar( '*' );
--len;
}
putchar( '\n' );
}
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("%2d ", i );
putchar('\n');
for( i = 1; i < MAXWORD; ++i )
printf("%2d ", wl[i]);
putchar('\n');
for( i = 1; i < MAXWORD; ++i )
printf("%2d ", i );
putchar('\n');
for( i = 1; i < MAXWORD; ++i )
printf("%2d ", wl[i]);
putchar('\n');
for( i = 0; i < MAXHIST; ++i ) {
for( j = 1; j < MAXWORD; ++j )
if( wl[j] * MAXHIST / maxvalue >= i )
printf(" * ");
else
printf(" ");
putchar('\n');
}
printf( "There are %d words >= %d\n", ovflow, MAXWORD );
}
本来有注释的编译器坑爹了。