练习1-13 垂直方向直方图,
练习1-13 垂直方向直方图,
本次是上练习1-13的补充,为垂直方向的直方图
话不多说 上代码
#include <stdio.h>
#include <stdlib.h>
#define IN 1 /*定义IN为当前字符在单词内*/
#define OUT 0 /*定义OUT为当前字符在单词外*/
int main()
{
int nc, nw, ns, i, j, k; /*定义nc为一个单词的长度,nw为单词的个数,ns为判定是否当前字符在单词内,i,j,k为辅助变量*/
int max; /*max为最长单词的长度*/
int a[50]; /*定义单词长度数组*/
char b[50][50]; /*定义单词字符数组*/
char c; /*定义输入字符*/
max = 0; /*最长单词长度初始为0*/
i = 1;
nc = nw = 0; /*单词长度和单词个数初始为0*/
j = k = 1;
ns = OUT; /*ns初始在单词外*/
while ((c = getchar()) != EOF) /*当输入文件结束符,该循环结束*/
{
if ((c >= 'a'&&c <= 'z') || (c <= 'Z'&&c >= 'A')) /*当输入字符是字母时*/
{
++nc; /*单词的长度+1*/
b[j][k] = '*'; /*直方图的表示为星号*/
++k; /*字符数组列下标+1*/
ns = IN; /*当前字符在单词内*/
}
else if (ns == IN) /*当前字符不是字母但又在单词内*/
{
++nw; /*单词个数+1*/
++j; /*字符数组行下标+1*/
a[i] = nc; /*将单词的长度赋值给长度数组*/
if (nc > max) /*寻找最大单词长度*/
max = nc;
++i; /*长度数组下标+1*/
k = 1; /*将k值回归初始值*/
nc = 0; /*将字符长度回归初始值*/
ns = OUT; /*将ns回归初始值*/
}
}
for (k = max; k >= 0; --k) /*打印单词长度垂直直方图*/
{
for (j = 1; j <= nw; j++)
{
if (b[j][k] == '*')
printf("%c ", b[j][k]);
else
printf(" ");
}
printf("\n");
}
for (i = 1; i <= nw; ++i) /*打印各单词长度数*/
printf("%d ", a[i]);
printf("\n");
system("pause");
return 0;
}
评论暂时关闭