gpt4 book ai didi

c - 帮我创建这个随机数

转载 作者:行者123 更新时间:2023-11-30 19:59:04 25 4
gpt4 key购买 nike

我正在尝试使用 rand 生成一个随机数,如下所示:

return a + ( rand( ) % n );

Where a is the shifting value (i.e., the first number in the desired range of consecutive integers) And n is the scaling factor (i.e,. the width of the desired range of consecutive integers).

-- C How to program 6th Edition - Deitel

我把它写成:

return 1 + ( rand( ) % 1000 );

它可以工作,但是当我编写如下代码时:

return 1000 + ( rand( ) % 1112 );

我最终得到了大得离谱的数字,例如 1756 和 1877。这是最后发生的两个输出。

我将值作为整数返回到 printf 语句中的函数调用,但我对工作语句执行相同的操作,因此我认为这不是我调用函数的方式。

我做错了什么......?

最佳答案

你没有做错任何事。问题出在你的期望上。

a 是它可以生成的最小可能数字,但它可以生成的最高数字不是 n...n 是范围大小,因此它可以生成的最高数字是 a+n。重要的是,不仅要复制算法和代码,还要了解其工作原理。我们来看看:

return 1000 + ( rand( ) % 1112 );

rand()的范围是多少? 0 到 RAND_MAX 之间的任何数字(这是一个非常大的数字。

( rand() % 1112) 的范围是多少?首先,查找模运算。正整数除以 1112 可能余数是多少?它可以是 0(例如,0/1112),或者高达 1111 1111/1112 余数为 1111),但之后它会循环回来(1112/1112 余数为 0,1113/1112 余数为 1,等等)。

现在,1000 +(0 到 1111 之间的任何数字)的范围是多少?

关于c - 帮我创建这个随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15845809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com