练习1-13 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。
//横向向打印输入中单词长度的直方图
#include<stdio.h>
#define MAXWORDNUM 100 //最大单词数
main()
{
int cnow, clast; //clast:上一个字符,cnow:当前字符
int i = 0, j = 0;
int len = 0, maxlen = 0; //len:单词长度
int num = 0; //num:文本中单词数目
int word[MAXWORDNUM]; //单词长度数组
for (i = 0; i<MAXWORDNUM; i++)
word[i] = 0;
i = 0;
//文本单词数统计,单词长度统计
cnow = getchar();
clast = cnow;
if (clast != '\40' && clast != '\n')
++len;
while ((cnow = getchar()) != EOF) {
if (cnow != '\40' && cnow != '\n')
++len;
if ((cnow == '\40' && (clast != '\n' && clast != '\40')) || (cnow == '\n' && (clast != '\n' && clast != '\40'))) {
word[num] = len;
++num;
if (len > maxlen) maxlen = len;
len = 0;
}
clast = cnow;
}
//横向直方图绘制
for (i = 0; i<num; i++) {
printf("%d: ", i + 1);
for (j = word[i]; j>0; j--) printf("*");
printf("\n");
}
}
//纵向打印输入单词长度的直方图;
#include<stdio.h>
#define MAXWORDNUM 100
main() {
int cnow, clast; //clast:上一个字符,cnow:当前字符
int i = 0, j = 0;
int len = 0, maxlen = 0; //len:单词长度
int num = 0; //num:文本中单词数目
int word[MAXWORDNUM]; //单词长度数组
for (i = 0; i < MAXWORDNUM; i++)
word[i] = 0;
i = 0;
//文本单词数量统计,单词长度统计
cnow = getchar();
clast = cnow;
if (clast != '\40' && clast != '\n')
++len;
while ((cnow = getchar()) != EOF) {
if (cnow != '\40' && cnow != '\n')
++len;
if ((cnow == '\40' && (clast != '\n' && clast != '\40')) || (cnow == '\n' && (clast != '\n' && clast != '\40'))) {
word[num] = len;
++num;
if (len > maxlen) maxlen = len;
len = 0;
}
clast = cnow;
}
//纵向直方图绘制
for (i = maxlen; i >0; i--) {
for (j = 0; j < num; j++) {
if (word[j] >= i) {
if ((j>8) && (j<99)) printf("* ");
else printf("* ");
}
else {
if ((j> 8)&& (j<99)) printf(" ");
else printf(" ");
}
}
printf("\n");
}
for (i = 0; i < num; i++) {
printf("%d ", i + 1);
}
}
该程序包括两个部分,分别用于横向和纵向绘制输入文本中单词长度的直方图。首先,程序统计文本中的单词数量及其长度,然后使用星号(*)绘制直方图。横向直方图每个单词长度对应一列星号,而纵向直方图则将星号按长度堆叠。代码适配于C语言环境,能够处理空格和换行符以区分单词。

被折叠的 条评论
为什么被折叠?



