编写程序,打印输入中单词长度的直方图(up/down/left/right)

来源:互联网 发布:网络教育毕业证怎么拿 编辑:程序博客网 时间:2024/05/02 04:23
/* Note:Your choice is C IDE */#include "stdio.h"#define MAXHIST 15#define MAXWORD 11#define IN 1#define OUT0main(){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(" * ");elseprintf("   ");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(" * ");elseprintf("   ");putchar('\n');}printf( "There are %d words >= %d\n", ovflow, MAXWORD );}

本来有注释的编译器坑爹了。