3

我正在尝试操作srand,以便 srand 按除法返回十进制数。但它不起作用。即使优先规则应在除法之前优先考虑括号,我的代码也不会返回十进制数。

#include <stdio.h>
#include <math.h>

int main(void) {

    double save;

    srand(time(NULL));

    save = (rand() % 100)/ 10;

    printf("%f", save);

    return 0;
}

但是这段代码工作正常,但我对解决方案不满意。

#include <stdio.h>
#include <math.h>

int main(void) {

    double save;

    srand(time(NULL));

    save = rand() % 100;

    save = save / 10;

    printf("%f", save);

    return 0;
}

谁能解释一下并给出更好的解决方案?

4

2 回答 2

4

这段代码的问题:

double save;
save = (rand() % 100) / 10;

不是在运算符的优先级,而是因为除以整常数10。尝试:

save = (rand() % 100) / 10.0;

但是,如果您想从间隔生成数字,<0; 10)最好这样做:

save = ((double)rand() / ((double)RAND_MAX + 1.0)) * 10.0;

这将产生更精确的结果,也将更均匀分布:)

于 2013-10-12T14:41:22.813 回答
0

它与运算符优先级无关!
rand()返回int类型并将其除以整数也将返回int值。(rand() % 100)/ 10你必须投到double

save = (double) (rand() % 100)/ 10;  

在第二种情况下

save = rand() % 100;

提升rand() % 100to获得的价值double。然后除以save10你正确的答案,即double

于 2013-10-12T14:40:26.650 回答