该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#define inside 1
#define outside 0
/*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单词长度的直方图*/
main ()
{
int test,c,i,j,k;
int tj[10];
test=outside;
for (i=0;i<10;++i)
tj[i]=0;
j=0;
k=0;
while ((c=getchar())!=EOF)
{
if (c<65||c>122)
{
if (test==inside)
++tj[j-1];
test=outside;
j=0;
}
else
{
++j;
test=inside;
}
}
for (i=1;i<11;++i)
{
k=k+tj[i-1];
printf("%d个字母长度的单词有%d个\n",i,tj[i-1]);
}
printf("所有单词总共有%d个\n",k);
/*上面是统计单词数并输出的,下面的代码是打印直方图的*/
/*这里先打印横向直方图*/
printf("\n字母长度\t单词个数");
for (i=1;i<11;++i)
{
printf("\n%2d个字母:",i);
if(tj[i-1]>=1)
{
for (j=1;j<=tj[i-1];j++)
putchar(1);
}
}
/*下面打印竖向直方图*/
int tem;
tem=0;
for (i=1;i<11;++i)
if (tem
tem=tj[i-1]; /*这里是找出数组tj[i]的最大值那个并赋值给tem,用来确定纵坐标的最大值*/
printf("\n\n单词个数(个)\n");
printf(" ");putchar(24); /*此处打印纵坐标开始位置,下面每行扫描打印整个图表*/
for (i=tem;i>0;i--)
{
printf("\n%3d",i);putchar(124);putchar(45); /*这里打印每行图表左边部分,下面开始打每行的柱状图*/
for (j=0;j<10;j++)
{
if (tj[j]>=i)
{
printf(" ");
putchar(1);
}
else
printf(" ");
}
} /*下面开始打印横坐标*/
printf("\n 0");putchar(124);
for (i=1;i<33;++i)
putchar(45);
putchar(26);
printf("单词长度(n个字母/单词)\n");
printf(" ");
for (i=1;i<=10;i++)
printf("%3d",i);
}