C语言K&R习题系列――统计文档中每个单词所占字母个数,以直方图形式输出

原题:


Write a program to print a histogram of the lengths of words in its input. It is easy to draw the histogram with the bars horizontal; a vertical orientation is more challenging.

这也是我第一个过百行的代码(带注释,空格什么的)

主要分两个部分:输入和输出

#include < stdio.h >

#define MAXWORDLEN 10

main ( void )
{
	int c;
	int wordLen = 0;
	int thisIdx = 0;
	long lengthArray[MAXWORDLEN + 1];
	long thisVal = 0;
	long maxVal = 0;
	
	//initialize
	
	int inspace = 0;
	int firstLetter = 1;
	int done = 0;
	
	for ( thisIdx = 0; thisIdx <= MAXWORDLEN; thisIdx++ )
	{
		lengthArray[thisIdx] = 0;
	}
	
	while ( done == 0 )
	{
		c = getchar();
		
		if ( c == ' ' || c == '\n' || c == '\t' || c == EOF )
		{
			if ( inspace == 0 )
			{
				inspace = 1;
				firstLetter = 0;
				
				if( wordLen <= MAXWORDLEN )
				{
					thisVal = ++lengthArray[wordLen - 1];
					
					if	( thisVal > maxVal )
					{
						maxVal = thisVal;
					}
				}
				else
				{
					thisVal	= ++lengthArray[MAXWORDLEN];
					
					if	( thisVal > maxVal )
					{
						maxVal = thisVal;
					}
				}
			}
			if ( c	== EOF )
			{
				done = 1;
			}
		}
		else
		{
			if ( inspace == 1 || firstLetter == 1 )
			{
				wordLen	= 0;
				inspace	= 0;
				firstLetter = 0;
			}
			
			++wordLen;
		}
	}


之后为输出部分



for ( thisVal = maxVal; thisVal > 0; thisVal-- )
      {
            printf ( "%4d  |", thisVal );
            for ( thisIdx = 0; thisIdx <= MAXWORDLEN; thisIdx++ )
            {
                  if ( lengthArray[thisIdx] >= thisVal )
                  {
                        printf ( " * " );
                  }
                  else
                  {
                        printf ( "   " );
                  }
            }
                  printf ( "\n" );
      }
      
      printf ( "      |_" );
      for ( thisIdx = 0; thisIdx <= MAXWORDLEN; thisIdx++)
      {
            printf ( "___" );
      }
      printf ( "\n      " );
      for ( thisIdx = 0; thisIdx < MAXWORDLEN; thisIdx++ )
      {
            printf ( "%3d", thisIdx + 1 );
      }
      printf ( "  >\n" );
      for ( thisIdx = 0; thisIdx < MAXWORDLEN + 2; thisIdx++ )
      {
            printf ( "   " );
      }
      printf ( "  %2d\n", MAXWORDLEN );
}

 

运行后的测试:


wKioL1UEMPbB9PFKAAOBbmCEAcs586.jpg

你可能感兴趣的:(C语言,统计,习题)