您当前的位置:首页 > 计算机 > 编程开发 > C语言

又一个C语言产生随机序列的例子

时间:01-03来源:作者:点击数:

下面的程序将产生有 n 个元素的随机序列。

#include <stdio.h>
#include <stdlib.h>
// rpermute() 返回一个 0..n-1 的随机序列
int * rpermute(int n) {
    int *a = malloc(n*sizeof(int));
    int k;
    for (k = 0; k < n; k++)
        a[k] = k;
    for (k = n-1; k > 0; k--) {
        int j = rand() % (k+1);
        int temp = a[j];
        a[j] = a[k];
        a[k] = temp;
    }
    return a;
}
// 每行输出 8 个元素
int printarray(int n, int *a) {
    int k = 0;
    // 这里本来是要使用数组,但是数组的长度不能是变量,所以要手动开辟内存
    a = (int *)malloc(n*sizeof(int));
    for (k = 0; k < n; k++) {
        printf("%6d   ", a[k]);
        if (k % 8 == 7)
            printf("\n");
    }
    return 0;
}
int main(void) {
    int limit = 6;
    int *a;
    int k;
    // 输出 7 行
    for (k = 0; k < 7; k++) {
        a = rpermute(limit);
        printarray(limit, a);
        printf("\n");
    }
    return 0;
}

可能的输出结果:

5843040    5838560    1163026258    1230195030    859655759    3354723

5847144    5838560    1176530273    1936026729    947398688    1342187830

5847144    5838560    842216502    1547322173    1735357008    544039282

5847144    5838560    1400006007    1819043176    774993500    1867340848

5847144    5838560    2035482725    1835365491    1986622020    977485157

5847144    5838560    1952531568    1867275361    1550606691    1886217556

5847144    5838560    1313423693    2054122813    1635346792    1129327982

注意:笔者在VC6.0下编译,发现输出的所有数都是一样的,然后在 C-Free 5.0 下调用 VC 6.0 的编译器输出结果正常。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门