| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7361 人关注过本帖
标题:如何打印出垂直的直方图~与打印直方图的方法思路~
只看楼主 加入收藏
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
结帖率:100%
收藏
已结贴  问题点数:13 回复次数:19 
如何打印出垂直的直方图~与打印直方图的方法思路~
程序代码:
  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
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:6 
#include <stdio.h>
#include <ctype.h>
#include <math.h>
int main(void)
{
        int c, i,j=1, length, test;

        length = 0;
        test = 0;

        while( (c=getchar()) != EOF )
        {
                if(isalpha(c))                          //输入的是字母就把长度加一
                {
                        ++length;
                        test = 1;
                }
                else
                {
                        if(test == 1)                   //判断是否是一个单词的结尾
                        {
                                for (i = 0; i < pow(length,2); ++i)  //输出直方图
                                    {
                                           if(i<length||(i>pow(length,2)-length-1&&i<pow(length,2))) printf("*");
                                           else if(i%length==0||i%length==length-1) printf("*");
                                           else printf (" ");
                                           if(i==j*length-1)
                                           {
                                               printf("\n");
                                               j++;
                                         }
                                            
                                    }
                                    length = 0;                     //把单词字符数清零
                                 test = 0;                       //把单词状态改为在单词外
                                 j=1;
                            }
                }
        }
        return 0;
}
不知道是不是符合你的要求
2016-07-25 00:27
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 2楼 linlulu001
不是这个效果,输出应该是每一个单词的垂直直方图并排着输出的。

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

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

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-25 16:40
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
收藏
得分:4 
回复 3楼 Man丶諦
是这样吗:   

          Hello      Word
          *****     
          *****      *****  
          *****      *****
          *****      *****
          *****      *****

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-25 17:14
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
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#define M 10
int main(void)
{
        int c, i,j,k=M-1,length, test;
        char s[10][10];
        for(i=0;i<M;i++)
            for(j=0;j<M;j++)
                s[i][j]=' ';
        length = 0;
        test = 0;
        j=0;
        while( (c=getchar()) != EOF )
        {
                if(isalpha(c))                          //输入的是字母就把长度加一
                {
                        ++length;
                        test = 1;
                }
                else
                {
                        if(test == 1&&j<M)                   //判断是否是一个单词的结尾
                        {
                                for (i = 0; i <length; ++i,k--)  //输出直方图
                                    {
                                            s[k][j]='*';
                                    }
                                k=M-1;
                                length = 0;                     //把单词字符数清零
                                test = 0;                       //把单词状态改为在单词外
                                j++;
                        }
                }
        }
        for(i=0;i<M;i++)
            {
                for(j=0;j<M;j++)
                {
                    printf("%c ",s[i][j]);
                }
                printf("\n");
            }
        return 0;
}
方法大概是样,我这里字符串数组这样定义很容易造成数据溢出。如果要改你自己注意一下这个字符串数组。
2016-07-25 18:22
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
快速回复:如何打印出垂直的直方图~与打印直方图的方法思路~
数据加载中...
 
   



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

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