| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3083 人关注过本帖
标题:数组应用实例:直方图(c语言)
只看楼主 加入收藏
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
结帖率:94.12%
收藏
已结贴  问题点数:10 回复次数:11 
数组应用实例:直方图(c语言)

将直方图以可视化的形式打印,类似如下:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: c语言 实例 应用 
2010-07-16 22:29
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
那副图的意思是随机产生10个数,统计出现次数,下面的符号是表示统计的次数。例如0下面的符号就表示出现随机产生的0次数为2次。以此类推
2010-07-17 10:24
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:4 
你要实例,好吧,这是我几年前做的习题,你就拿去用吧:
#include <stdio.h>
#define IN 1
#define OUT 0
#define MAXL 80
int nw;
void gram2(int s[],int i)
{int k;
for(k=1;k<=nw;++k)
if(s[k]>=i)printf("|");
else printf(" ");
printf("\n");
}
void word_len(int nword[])
{int i,c,state=OUT;
nw=0;
while((c=getchar())!=EOF)
if(c==' '||c=='\n'||c=='\t')
state=OUT;
else
{if(state==OUT)
{state=IN;++nw;}
++nword[nw];
}
for(i=1;i<=nw;++i)
{printf("%3d",nword[i]);
if(i%20==0)printf("\n");
}
printf("\n");
}
main()
{int nwarr[MAXL]={0};
int i,mlength;
word_len(nwarr);
mlength=0;
for(i=1;i<=nw;++i)
if(nwarr[i]>mlength)mlength=nwarr[i];
for(i=mlength;i>0;--i)
gram2(nwarr,i);
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-17 10:28
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
这是我写的统计单词个数,打印直方图

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-17 10:28
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
回复 4楼 sunyh1999
额、能否讲讲你程序什么意思,执行结果啊
2010-07-17 11:02
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:1 
执行结果你自己看看

#include <stdio.h>
#define IN 1
#define OUT 0
#define MAXL 80
int nw;
void gram2(int s[],int i)//打印直方图其实就是这个函数,根据你说的这个函数比较重要
{int k;//定义k
for(k=1;k<=nw;++k)//这个for循环你看主函数就知道循环多少次了
if(s[k]>=i)printf("|");//如果s[k]>=i就是直方图还没有打完,就是打印一个“|”符号,这就达到了打印直方图的效果
else printf(" ");//这就是打印空格啦,不用我多讲
printf("\n");//打印换行
}
void word_len(int nword[])//这一段就是统计单词了
{int i,c,state=OUT;
nw=0;
while((c=getchar())!=EOF)
if(c==' '||c=='\n'||c=='\t')
state=OUT;
else
{if(state==OUT)
{state=IN;++nw;}
++nword[nw];
}
for(i=1;i<=nw;++i)
{printf("%3d",nword[i]);
if(i%20==0)printf("\n");
}
printf("\n");
}
main()//主函数
{int nwarr[MAXL]={0};
int i,mlength;
word_len(nwarr);
mlength=0;
for(i=1;i<=nw;++i)
if(nwarr[i]>mlength)mlength=nwarr[i];
for(i=mlength;i>0;--i)
gram2(nwarr,i);
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-17 11:06
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
回复 6楼 sunyh1999
杯具,为什么执行后一直输入单词都没反应。
2010-07-17 15:03
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
我明白了,这是EOF,你随便改一个就可以终止循环了,例如while((c=getchar())!=EOF)//将EOF可以改成这样while((c=getchar())!=‘@’)这样如果用户输入了@键并回车系统就终止循环


欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-17 16:29
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
终于写出来了 哈哈
#include <stdio.h>
#include <stdlib.h>
#define N 30

int a[N];

void gen_random(int upper_bound)
{
    int i;
    for (i = 0; i < N; i++)
        a[i] = rand() % upper_bound;
}
int howmany(int value)
{
    int count = 0, i;
    for (i = 0; i < N; i++)
        if (a[i] == value)
            ++count;
    return count;
}
int main(void)
{
    int j;
    int i, histogram[10];

    gen_random(10);
    for (i = 0; i < 10; i++)
        histogram[i] = howmany(i);
    for (i = 0;i < 10;i++ )
        printf("%d ",i);
    printf("\n");
/*    for (i = 0;i < 10;i++ )
        printf("%d ",histogram[i]);
    printf("\n");*/
    for (j = 0;j <=N;j++)
    {
        for (i = 0;i < 10;i++)
            if (histogram[i] <= j)
                printf("  ");
            else
                printf("* ");
            printf("\n");
    }

    return 0;
}
2010-07-17 17:25
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:5 
可以这样考虑问题,定义一个数组a[10],产生0到9的随机数,可以用a[rand] +=1来累计该数出现的次数。
我大致写一下主要的方法。
int a[10] = {0};
int _rand = rand()%10;
a[_rand] += 1;
2010-07-17 18:41
快速回复:数组应用实例:直方图(c语言)
数据加载中...
 
   



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

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