首页 > C语言统计10到20之间随机数的出现次数?

C语言统计10到20之间随机数的出现次数?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10

int a[N];

void gen_random(int min, int max)
{
    int i;
    for (i = 0; i < N; ++i) {
        a[i] = rand() % min + (max - min + 1);
    }
}

int main(void)
{
    int m, n, histogram[10] = {0};
    
    srand(time(NULL));
    gen_random(10, 20);
    
    for (m = 0; m < N; ++ m) {
        ++ histogram[a[m]];
    }
    
    for (n = 0; n < N; ++ n){
        printf("No.%d random number %d appears %d times\n", n, a[n], histogram[a[n]]);
    }
  
    return 0;
}

代码生成10-20之间的随机整数,并且统计每个数的出现次数。但是出现了负数和反常统计结果,请问代码那里有问题?
Error:

No.1 random number 17 appears 2 times
No.2 random number 18 appears -68681239 times
No.3 random number 14 appears -529580218 times
No.4 random number 11 appears 2 times
No.5 random number 20 appears 1 times
No.6 random number 11 appears 2 times
No.7 random number 16 appears 1 times
No.8 random number 15 appears 32556 times
No.9 random number 19 appears 32765 times
Segmentation fault

OS: LinuxMint 17 rosa 64bit
GCC: 4.8.4


很好奇,你用一个histogram[10]数组,为何访问的是11-20的下标。


你访问的是histogram数组后的十个元素,这段空间不属于你,也没初始化,所以你得到的是随机数

【热门文章】
【热门文章】