打印输入中单词长度的直方图(水平打印)

来源:互联网 发布:java web 项目路径 编辑:程序博客网 时间:2024/05/12 03:21

#include <stdio.h>#define MAXWORDLEN 10//定义最长字符的长度 int main(void){int c;//接受从键盘得到的字符 int inspace = 0;//用于表示当前是否在单词中 long lengtharr[MAXWORDLEN + 1];//记录当前单词长度wardlen的个数 int wordlen = 0;// 单词长度计数器  int thisval = 0;//当前长度单词的个数 long maxval = 0;//所有单词中,最多个数的单词的个数 int thisidx = 0;//当前单词长度 int done = 0;//循环执行条件 for (thisidx = 0; thisidx <= MAXWORDLEN; thisidx++){lengtharr[thisidx] = 0;//初始化 }while (0 == done){c =getchar();if (c == ' ' || c == '\t' || c == '\n' || c == EOF)//当当前字符为以上空白符时 {if (inspace == 0){inspace = 1;if (wordlen <= MAXWORDLEN)//单词长度小于最大单词长度时 {if (wordlen > 0)//数据不为空 {                thisval = ++lengtharr[wordlen - 1];//当前长度的单词的个数加一后赋给thisval if (thisval > maxval)//如果当前长度单词的个数大于最大个数 {maxval = thisval;//刷新最大个数 }//thisval > maxval}//wordlen > 0 }//wordlen <= MAXWORDLENelse{thisval = ++lengtharr[MAXWORDLEN];//单词长度大于最大单词长度时,将横坐标为大于十的个数加一 if (thisval > maxval){maxval = thisval;//刷新最大个数 }//thisval > maxval}}if (c == EOF)//终止 {done = 1;}}else{if (inspace == 1 ){wordlen = 0;inspace = 0;}++wordlen;//个数计数器刷新为当前单词已读入的字母的个数 }}//thisval > maxvalfor(thisidx=10;thisidx>=0;thisidx--)//开始打印,纵坐标单词长度 {for(thisval=1;thisval<=lengtharr[thisidx]+1;thisval++)//打印星星,因为还要打印坐标轴所以打印次数为星星数+1 {if(thisidx==10)//因为第一行纵坐标不同于后几行所以单独用if区别开来         {  if(thisval==1)//对第一次打印,打印坐标轴 printf(" >%d|",MAXWORDLEN);else//以后每次打印都打印星星      printf(" * ");       }         else//同上  {    if(thisval==1)printf("%4d|",thisidx+1);else     printf(" * ");     }    }    printf("\n");//每打印完一个长度的数量对应的星星后后就换行 } printf("    +");//打印坐标原点 for(thisval=1;thisval<=maxval;thisval++)printf("---");//对每个横坐标分配3个横线作为坐标轴防止出现是大于一位的个数空间不够 printf("\n");printf("     ");for(thisval=1;thisval<=maxval;thisval++)printf("%2d ",thisval);//打印横坐标 printf("\n");//换行。。。 return 0;}


 
0 0
原创粉丝点击