C语言打印直方图(垂直方向)

C语言打印直方图(垂直方向)

本人学生,在学习C时用的是学校编的书,效果很差,后来买了《The C Programming Language》,重新学习C语言,感觉很好。做里面的习题,打印单词长度的直方图,参考网上大神的代码,并加以修改,达到了自己满意的效果,代码方面我自己加了许多注释,希望对大家有用。

1
程序功能说明

输入:输入单词,以空格、回车、制表符为间隔,EOF为结束输入。(window 下CTRL+Z ,Linux 下CTRL +D)

输出:打印输入的单词数量、最大单词长度以及单词长度直方图。
1
2
3
程序功能展示

输入

输出

代码片段
绘制直方图的代码,两个For循环

/*
绘制直方图
备注:本来想用\t制表符来替换空格的,但发现\t 打出来的空格不一样多
下面我会注释用了多少空格的 ,用空格是为了打印出来的直方图对齐
/
void vertical(int array[],int len)
{
int maxValue = max(array,len);
int j;
int i;
printf(" y/num↑\n"); /
打印直方图的y轴顶部 , y前面2个SP */

for(i = maxValue + 1; i > 0; i--)
{
    printf("%8d|_  ", i);           /*  打印直方图的y轴    */
    for(j = 0; j < len; j++)
    {
        if(array[j] == i)           /*  打印直方图的顶部 ,1个SP,3个_,4个SP */
        {
            printf(" ___    ");      
        }
        else if(array[j] >= i)      /*  打印直方图的侧部 ,2个|,3个SP,3个SP */
        {
            printf("|   |   ");
        }
        else if(array[j] == i-1)    /*  打印该数据,位于直方图顶部的上方     */
        {
            printf(" (%d)    ",array[j]);
        }
        else
        {
            printf("        ");     /*  无数据     8个SP                 */
        }
    }

    printf("\n");
}

/*
*   纯属美观需要,并打印 X轴 
*
*/
printf("       0");

for(i = 0; i < len + 1; i++)
{
    printf("|___|___");
}
printf("|___→\n");

for(i = 0; i< (2 * len); i++)
{
    printf("\t");
}
printf("\tx/word\n\t ");

for(i = 0; i < len; i++)
{
    printf("   word%d",i+1);     /* 3个SP */ 
}
printf("\n\n");

}

最终代码

#include<stdio.h>
#include<string.h>

/* word 数量*/
#define NUM 100

/*
数组中的最大数
/
int max(int
array,int len)
{
int maxValue = 0;
int i=0;
for(i = 0; i < len; i++)
{
if(array[i] > maxValue)
{
maxValue = array[i];
}
}
return maxValue;
}

/*
绘制直方图
备注:本来想用\t制表符来替换空格的,但发现\t 打出来的空格不一样多
下面我会注释用了多少空格的 ,用空格是为了打印出来的直方图对齐
/
void vertical(int array[],int len)
{
int maxValue = max(array,len);
int j;
int i;
printf(" y/num↑\n"); /
打印直方图的y轴顶部 , y前面2个SP */

for(i = maxValue + 1; i > 0; i--)
{
    printf("%8d|_  ", i);           /*  打印直方图的y轴    */
    for(j = 0; j < len; j++)
    {
        if(array[j] == i)           /*  打印直方图的顶部 ,1个SP,3个_,4个SP */
        {
            printf(" ___    ");      
        }
        else if(array[j] >= i)      /*  打印直方图的侧部 ,2个|,3个SP,3个SP */
        {
            printf("|   |   ");
        }
        else if(array[j] == i-1)    /*  打印该数据,位于直方图顶部的上方    */
        {
            printf(" (%d)    ",array[j]);
        }
        else
        {
            printf("        ");     /*  无数据     8个SP                        */
        }
    }

    printf("\n");
}

/*
*   纯属美观需要,并打印 X轴 
*
*/
printf("       0");

for(i = 0; i < len + 1; i++)
{
    printf("|___|___");
}
printf("|___→\n");

for(i = 0; i< (2 * len); i++)
{
    printf("\t");
}
printf("\tx/word\n\t ");

for(i = 0; i < len; i++)
{
    printf("   word%d",i+1);     /* 3个SP */ 
}
printf("\n\n");

}

int main()
{
int words[NUM];
char temp[NUM][100];
int i;
int num;

num = 0;

printf("请输入单词:");
while(1)                                /* 循环输入单词,直到EOF结束 */ 
{
    if (scanf("%s", temp[num])==EOF)
    {
        break;
    }
    else
    {
        num++;
    }
}
printf("\n共输入了%d个单词:", num);


for(i = 0; i < num; i++)
{
    printf("\n\t word%2d is %s\n", i+1, temp[i]);
}

for(i = 0; i < num; i++)
{
    words[i] = strlen(temp[i]);
}

int maxValue = max(words,num);
printf("maxValue =%d \n", maxValue);
vertical(words,num);
return 0;

}

————————————————
版权声明:本文为CSDN博主「juping2465」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/juping2465/article/details/76587200

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值