tomspapaya

C语言数组_使用直方图统计随机数出现次数

写一个小程序,生产随机数并打印出来,并以可视化的形式打印直方图:

value	how many
0	10130
1	10072
2	9990
3	9842
4	10174
5	9930
6	10059
7	9954
8	9891
9	9958

0  1  2  3  4  5  6  7  8  9

*  *  *  *     *  *  *     *
*     *  *     *  *  *     *
      *  *        *
                  *
                  *

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #define N 100
 4 
 5 int histogram[N];
 6 int a[N];
 7 int maxline = 0;
 8 
 9 void gen_random(int upper_bound)
10 {
11         int i;
12         maxline = 0;
13         for (i = 0; i < N; i++) {
14                 a[i] = rand() % upper_bound;
15                 ++histogram[a[i]];
16                 if(maxline < histogram[a[i]]) { //记录最大行数
17                         maxline = histogram[a[i]];
18                 }
19         }
20 
21 }
22 
23 void print_numberline()
24 {
25         int i;
26         for(i = 0; i <= 9; i++) {
27                 printf("%d\t", i);
28         }
29         printf("\n");
30 }
31 
32 void print_starline(int rownum, int upper_bound)
33 {
34         int i;
35         if(rownum < maxline) {
36                 for(i = 0; i < upper_bound; i++) {
37                         if(rownum < histogram[i]) {
38                                 printf("*\t");
39                         } else {
40                                 printf(" \t");
41                         }
42                 }
43         }
44 }
45 
46 void print_result(int upper_bound)
47 {
48         printf("number\thowmany\n");
49         int i;
50         for(i = 0; i < upper_bound; i++) {
51                 printf("%d\t%d\n", i, histogram[i]);
52         }
53 
54         printf("\n");
55 
56 }
57 
58 int main(void)
59 {
60         gen_random(10);
61         print_result(10);
62         print_numberline();
63         printf("\n");
64         int i;
65         for(i = 0; i < maxline; i++) {
66                 print_starline(i, 10);
67                 printf("\n");
68                 sleep(1);
69         }
70 
71         return 0;
72 
73 }        

函数说明如下:

gen_random() 生成伪随机数,存放在数组a中。同时统计每个数字出现的次数,以及最大重复次数maxline。这个maxline用于统计需要打印几行。

print_numberline() 按顺序打印0-9

print_starline() 根据行号,打印本行的“*”;如果当前数字的重复次数大于行号,则打印“*”,否则打印“\t”

print_result() 列出每一个数字的出现次数



posted on 2014-12-16 21:21  tomspapaya  阅读(605)  评论(0)    收藏  举报

导航