编写一个程序,打印输入中单词长度的直方图
2017-10-19 20:57
381 查看
#include<stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
int main()
{
int c, i, j, nc, state; //其中C用于计算单词长度,state用于判断是否在计算一个单词
int len; //用于保存根据比例计算出来需要打印的个数结果
int maxvalue; //保存最大单词数量
int ovflow; //用于计算超过规定长度的单词数
int wl[MAXWORD];
state = OUT;
nc = 0;
ovflow = 0;
for (i = 0; i < MAXWORD; i++) //wl用于统计各个长度的单词量
{
wl[i] = 0; //首先初始化数组,全设为0
}
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\t' || c == '\n')
{
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];
}
# if 0 //水平直方图
for (i = 1; i < MAXWORD; ++i)
{
printf("%5d-%5d:", wl[i]);
if (wl[i] > 0)
{
if ((len = wl[i] * MAXHIST / maxval) <= 0)
len = 1;
}
else
{
len = 0;
}
while (len > 0)
{
printf("*");
--len;
}
putchar('\n')
}
#else //垂直直方图
/*垂直直方图的思想在于从最大值开始遍历,由上往下,由左往右*/
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');
# endif
if (ovflow > 0)
{
printf("There ar %d words>= %d\n", ovflow, MAXWORD);
}
return 0;
}
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
int main()
{
int c, i, j, nc, state; //其中C用于计算单词长度,state用于判断是否在计算一个单词
int len; //用于保存根据比例计算出来需要打印的个数结果
int maxvalue; //保存最大单词数量
int ovflow; //用于计算超过规定长度的单词数
int wl[MAXWORD];
state = OUT;
nc = 0;
ovflow = 0;
for (i = 0; i < MAXWORD; i++) //wl用于统计各个长度的单词量
{
wl[i] = 0; //首先初始化数组,全设为0
}
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\t' || c == '\n')
{
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];
}
# if 0 //水平直方图
for (i = 1; i < MAXWORD; ++i)
{
printf("%5d-%5d:", wl[i]);
if (wl[i] > 0)
{
if ((len = wl[i] * MAXHIST / maxval) <= 0)
len = 1;
}
else
{
len = 0;
}
while (len > 0)
{
printf("*");
--len;
}
putchar('\n')
}
#else //垂直直方图
/*垂直直方图的思想在于从最大值开始遍历,由上往下,由左往右*/
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');
# endif
if (ovflow > 0)
{
printf("There ar %d words>= %d\n", ovflow, MAXWORD);
}
return 0;
}
相关文章推荐
- 练习1-13:编写一个程序,打印输入中单词长度的直方图(水平)(C程序设计语言 第2版)
- 练习1-13 编写一个程序,打印输入中单词长度的直方图(垂直)
- 编写一个程序,打印输入中单词长度的直方图
- 练习1-13 编写一个程序,打印输入中单词长度的直方图(水平)
- 练习1-13 编写一个程序,打印输入中单词长度的直方图(水平)(方法2)
- 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易
- 习题1-13(垂直方向直方图):编写一个程序打印输入中单词长度的垂直方向的直方图。
- 练习 1 - 13 编写一个程序,打印输入中单词长度的水平直方图 和 垂直直方图
- 练习1-13 编写一个程序,打印输入中单词长度的垂直方向的直方图(垂直图)
- 编写一个程序,打印输入中单词长度的水平和垂直方向直方图
- 打印输入中单词长度的直方图,垂直方向的。折磨使我强大的一个程序!
- 编写程序,打印输入中单词长度的直方图(up/down/left/right)
- C程序设计语言,练习1-13,编写一个程序,打印输入单词的直方图(垂直方向)
- 打印输入单词长度的直方图 (水平方向)程序分析
- 【c语言】编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。
- 2. 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制
- 编写一个程序,打印输入中各个字符出现频度的直方图
- 编写一个程序,以每行一个单词的形式打印其输入。
- 练习 1-14 编写一个程序,打印输入中各个字符出现频度的直方图
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。