【问题标题】:Random number generation in sets of 2 [duplicate]2组随机数生成[重复]
【发布时间】:2015-08-13 20:35:21
【问题描述】:

我已经编写了一个代码来在两个类似坐标的集合中生成随机数,例如 (1.00,4.00)、(3.00,6.00),但我想要十进制的结果,例如 (1.45,4.87),(3.56,6.45) 一些小数点后的数字我的代码只显示小数点后的零。

我的代码是

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main () {
    srand(time(NULL));
    int a[100][2],i,j;
    for (i=0; i<100; i++) {
        for (j=0; j<2; j++) {
            a[i][j]= rand()%11;
        }
    }
    for (i=0; i<100; i++) {
        printf("(");
        for (j=0; j<2; j++) {
            printf("%d",a[i][j]);
            if(j==0)
                printf(",");
        }
        printf(") ");
    }
    scanf("%d");
    return 0;
}

【问题讨论】:

  • 也许你应该生成随机浮点数而不是int
  • 使用getchar();(或者getch(),如果你可以使用的话)而不是scanf("%d");
  • 这段代码根本不打印小数点。

标签: c decimal-point


【解决方案1】:

使用double 而不是int

// int a[100][2],i,j;
double a[100][2];
int i, j;

还要写一个函数来生成浮点随机数,而不是整数随机数

// generate numbers in the interval [0, 1[
double randd_opened(void) {
    return rand() / (RAND_MAX + 1.0);
}

// generate numbers in the interval [0, 1]
double randd_closed(void) {
    return rand() / (double)RAND_MAX;
}

注意:区间[0, 1]中的随机数乘以x得到区间[0, x]中的随机数。

【讨论】:

  • 你的回答中这两个函数有什么区别?
  • 一个在区间[0, 1[中给出随机数,另一个在区间[0, 1] ...或1中是一个可能的随机值,但不是另一个。
  • 注意:打印有限数量的小数的任务最好留给printf,并且不应该尝试像尝试那样不准确(和完全错误)的东西将“仅”2 或 3 个小数放入 double(这是不可能的)。
  • 我仍然没有得到想要的结果,我认为你给出的代码是 c++。如果你运行我的代码,它将产生 100 组数字 (2,4), (6,7) 但我想要浮点数 (2.56,4.56)
  • 非常感谢stackoverflow.com/questions/13408990/…这对我有用
猜你喜欢
  • 2016-05-05
  • 2014-01-11
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2013-05-09
  • 2018-07-03
  • 2012-12-17
相关资源
最近更新 更多