练习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);
}
}