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) 收藏 举报
浙公网安备 33010602011771号