| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7360 人关注过本帖
标题:如何打印出垂直的直方图~与打印直方图的方法思路~
取消只看楼主 加入收藏
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
结帖率:100%
收藏
已结贴  问题点数:13 回复次数:13 
如何打印出垂直的直方图~与打印直方图的方法思路~
程序代码:
  GNU nano 2.2.6                                      文件: lx_1_13.c                                                                                


/* 打印输入中单词长度的直放图,水平或垂直的 */

/* 思路

 * 输入字符-判断出一个完整的单词-记录单词的长度

 * 打印直方图

 */

#include <stdio.h>
#include <ctype.h>
int main(void)
{
        int c, i, length, test;

        length = 0;
        test = 0;

        while( (c=getchar()) != EOF )
        {
                if(isalpha(c))
                {
                        ++length;
                        test = 1;
                }
                else
                {
                        if(test == 1)
                        {
                                for (i = 0; i < length; ++i)
                                        printf("*");
                                printf("\n");
                                length = 0;
                                test = 0;
                        }
                }
        }
        return 0;
}



[此贴子已经被作者于2016-7-26 14:37编辑过]

搜索更多相关主题的帖子: 直方图 如何 单词 记录 
2016-07-24 23:43
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 2楼 linlulu001
不是这个效果,输出应该是每一个单词的垂直直方图并排着输出的。

  像这样
 *
 *    *
 * * *
 * * *

第一个单词有4个字符,第二个单词2个,第三个单词3个。
 

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 16:40
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 4楼 晓益
我的理解是这样的,不过我应该是理解错了练习题的意思了~

题目是这样的:
        编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要难些。

是,输入中-单词长度-的直方图。
我理解成输入单词长度的直方图了。

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 18:04
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
我在重新写一个程序试试。

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 18:05
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
程序代码:
/* 打印输入中单词长度的直放图,水平或垂直的 */

/* 思路

 * 输入字符-判断出一个完整的单词-记录单词的长度到一个数组中

 * 打印数组中各个单词长度的直方图

 *    如单词数为1的有一个单词输出一个*号

 */

#include <stdio.h>
#include <ctype.h>
int main(void)
{
    int c, i, x, nc, test;
    int length[10];
    test = 0;
    nc = 0;
   

    for(i = 0; i < 10; i++)
        length[i] = 0;

    while( (c=getchar()) != EOF )
    {
        if(isalpha(c))
        {
            ++nc;
            test = 1;
        }
        else
        {
            if(test == 1 && nc >= 1 && nc <= 9)
            {
                ++length[nc];
                nc = 0;
                test = 0;
            }
        }
    }

    for(i = 0; i < 10; ++i) {
        printf("%4d - %4d : ", i, length[i]);
        for(x = 0; x < length[i]; ++x)
            printf("*");
        printf("\n");
    }
    return 0;
}

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 18:29
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
这样应该就符合题目意思了。
    可是我还是不知道该如何输出垂直的直方图。

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 18:32
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 7楼 linlulu001
char s[10][10]  这一句声明是-数组吗,怎么可以有两个10.
    s[10] 是 s[0]~s[9] 呢么两个10应该怎么理解?

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 18:40
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 11楼 linlulu001
谢谢你的帮助~
    那个数组什么的确是第一次见到,我应该先去百度一下在回复的。不好意思~
    我啥也不懂自学《c语言程序设计》现在也才学到第一章。有很多不理解的,可能你们觉得非常白痴的问题~
    可是都会让我疑惑个几天,都不一定可以理解。

希望你们多多谅解~谢谢~

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 19:26
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 12楼 晓益
单个单词的垂直直方图我理解怎么解决~
    可是如果输入多个单词的话,就不知道该用什么方法或思路来输出了

要不我去百度下,这个练习题的答案看看~

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 19:31
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
找到了答案,可是里面打印直方图的地方不理解它是如何运作的~~

程序代码:
#include <stdio.h>

#define MAXHIST 15                            /* 直方图的最大长度 */
#define MAXWORD 11                            /* 输入单词的最大长度 */
#define IN 1                                /* 在一个单词内部 */
#define OUT 0                                /* 在一个单词外部 */

main()
{
    int c, i, j, nc, state;
    int maxvalue;                            /* wl[] 数组里最大的值 */
    int ovflow;                                /* 溢出的词数 */
    int wl[MAXWORD];                        /* 计算单词长度 */

    state = OUT;
    nc = 0;                                    /* 一个单词的字符数 */
    ovflow = 0;                                /* 单词字符数大于最大长度 */

    for (i = 0; i < MAXWORD; ++i)            /* 给数组赋值 */
        wl[i] = 0;
   

    while ( (c = getchar()) != EOF ){
        if (c == ' ' || c == '\n' || c == '\t'){    /* 遇到空格,换行,Tab表示一个单词的结束 */
            state = OUT;
            if (nc > 0)                        /* 单词长度大于0 */
                if (nc < MAXWORD)            /* 长度小于最大值 */
                    ++wl[nc];                /* 在相应的单词长度上加1 */
                else
                    ++ovflow;                /* 大于最大值的单词加1 */
            nc = 0;
        } else if (state = OUT) {            /* 是否是单词的开始 */
            state = IN;                        /* 把状态改为在单词内 */
            nc = 1;                            /* 重新开始记录单词数 */
        } else
            ++nc;
    }

    maxvalue = 0;
    for (i = 1; i < MAXWORD; ++i)            /* 找出数组里最大的值 */
        if (wl[i] > maxvalue)
            maxvalue = wl[i];

    for (i = MAXHIST; i > 0; --i) {            /* 打印直方图 */
        for (j = 1; j < MAXWORD; ++j)
            if (wl[j] * MAXHIST / maxvalue >= i)    /* 这条语句是什么原理? */
                printf("*");
            else
                printf(" ");
        putchar('\n');
    }

    for (i = 1; i < MAXWORD; ++i)
        printf("%4d ", i);
    putchar('\n');

    for (i = 1; i < MAXWORD; ++i)
        printf("%4d ", wl[i]);
    putchar('\n');

    if (ovflow > 0)
        printf("There are %d words >= %d\n", ovflow, MAXWORD);
}


还有运行的结果,貌似也有点不对:
图片附件: 游客没有浏览图片的权限,请 登录注册


它的直方图,不是对应在相应的字符数上~不知道是哪里出了问题


    for (i = MAXHIST; i > 0; --i) {            /* 打印直方图 */
        for (j = 1; j < MAXWORD; ++j)
            if (wl[j] * MAXHIST / maxvalue >= i)    /* 这条语句是什么原理? */
                printf("*");
            else
                printf(" ");
        putchar('\n');
    }

还有这一个for循环输出直方图,可是不理解它是如何实现的。



电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 20:46
快速回复:如何打印出垂直的直方图~与打印直方图的方法思路~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021165 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved