C 随机数65-90[a-z]或97-122[a-z]

C 随机数65-90[a-z]或97-122[a-z],c,random,ascii,C,Random,Ascii,我需要一个C语言的方法,使十进制65-90[a-z]和十进制97-122[a-z]之间的随机数返回。如果我调用该方法,则该方法必须是另一个数字,返回他以前给出的值。在C中如何执行此操作?给定一个函数,该函数返回[0,n]范围内的随机整数: (一个简单的random\u in_range(n)实现将返回rand()%n。但它不会返回均匀分布的整数。)给定一个函数random\u in_range,该函数返回[0,n]范围内的随机整数: (一个简单的random\u范围(n)的实现将返回rand()

我需要一个C语言的方法,使十进制65-90[
a
-
z
]和十进制97-122[
a
-
z
]之间的随机数返回。如果我调用该方法,则该方法必须是另一个数字,返回他以前给出的值。在C中如何执行此操作?

给定一个函数,该函数返回[0,n]范围内的随机整数:


(一个简单的
random\u in_range(n)
实现将返回
rand()%n
。但它不会返回均匀分布的整数。)

给定一个函数
random\u in_range
,该函数返回[0,n]范围内的随机整数:


(一个简单的
random\u范围(n)
的实现将返回
rand()%n
。但它不会返回均匀分布的整数。)

你能做一个0到52之间的随机数吗(不包括52)

做吧!在结果上加65。如果值大于等于91,在第二个结果上加6。瞧


哦……如果数字与上次的数字相同(您将上次的数字保存在一个静态变量中,不是吗?),请再次执行:)

您可以执行一个介于0和52之间的随机数(不包括52)

做吧!在结果上加65。如果值大于等于91,在第二个结果上加6。瞧

哦……如果数字与上次的数字相同(您将上次的数字保存在一个静态变量中,不是吗?),请再次执行:)

\include
char rand_az_az(){
char val=rand()%52;
如果(val<26){
val+='a';
}否则{
val-=26;
val+='A';
}
返回val;
}
#包括
char rand_az_az(){
char val=rand()%52;
如果(val<26){
val+='a';
}否则{
val-=26;
val+='A';
}
返回val;
}

更新2

根据Interjay的评论再次更新

更新

根据Interjay的评论进行了更改。还更改了pickChar,以便我们不依赖特定的编码

警告:不建议使用
%
运算符将
rand
的结果映射到不同的范围。低阶位模式不能保证均匀分布,并且可能会得到非正态分布的值。这对于类分配来说足够有效,但下面的过程应该会给出更好的结果:

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

int randInRange(int min, int max) 
{
  return (int)(((double) rand() / (double)(RAND_MAX + 1)) * (max - min + 1)) + min;
}

char pickChar(void)
{
  char val; 
  int cas = randInRange(0, 1);

  if (cas == 1)
    val = (char) randInRange('A', 'Z');
  else
    val = (char) randInRange('a', 'z');

  return val;
}

int main(void)
{
  char results[11] = {0};
  int i;

  srand(time(NULL));  // seed the random number generator

  for (i = 0; i < sizeof results - 1; i++)
    results[i] = pickChar();

  printf("Random string: %s\n", results);
  return 0;
}
#包括
#包括
#包括
整数和整数范围(整数最小值,整数最大值)
{
返回值(int)(((双精度)rand()/(双精度)(rand_MAX+1))*(MAX-min+1))+min;
}
char pickChar(void)
{
char-val;
int cas=randInRange(0,1);
如果(cas==1)
val=(char)randInRange('A','Z');
其他的
val=(char)randInRange('a','z');
返回val;
}
内部主(空)
{
字符结果[11]={0};
int i;
srand(time(NULL));//为随机数生成器设定种子
对于(i=0;i
更新2

根据Interjay的评论再次更新

更新

根据Interjay的评论进行了更改。还更改了pickChar,以便我们不依赖特定的编码

警告:不建议使用
%
运算符将
rand
的结果映射到不同的范围。低阶位模式不能保证均匀分布,并且可能会得到非正态分布的值。这对于类分配来说足够有效,但下面的过程应该会给出更好的结果:

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

int randInRange(int min, int max) 
{
  return (int)(((double) rand() / (double)(RAND_MAX + 1)) * (max - min + 1)) + min;
}

char pickChar(void)
{
  char val; 
  int cas = randInRange(0, 1);

  if (cas == 1)
    val = (char) randInRange('A', 'Z');
  else
    val = (char) randInRange('a', 'z');

  return val;
}

int main(void)
{
  char results[11] = {0};
  int i;

  srand(time(NULL));  // seed the random number generator

  for (i = 0; i < sizeof results - 1; i++)
    results[i] = pickChar();

  printf("Random string: %s\n", results);
  return 0;
}
#包括
#包括
#包括
整数和整数范围(整数最小值,整数最大值)
{
返回值(int)(((双精度)rand()/(双精度)(rand_MAX+1))*(MAX-min+1))+min;
}
char pickChar(void)
{
char-val;
int cas=randInRange(0,1);
如果(cas==1)
val=(char)randInRange('A','Z');
其他的
val=(char)randInRange('a','z');
返回val;
}
内部主(空)
{
字符结果[11]={0};
int i;
srand(time(NULL));//为随机数生成器设定种子
对于(i=0;i
家庭作业?如果是,没问题:只要让我们知道。家庭作业?如果是,没问题:只要让我们知道。我必须用rand()和srand()来做。我必须用rand()和srand()来做哇哦,这太不可思议了,这就是我需要的,谢谢你!哇哦,我需要更多关于这个例子的问题,当我连续调用程序树时间,他给我不同的号码时,我如何修复它?调用srand(time(NULL));在你的课程开始时。祝贺你…很快你就可以拿到CS学位了:我找不到任何话可以对你说谢谢你太感谢你的帮助了这太不可思议了这就是我需要的谢谢你太多关于这个例子的更多问题当我连续调用程序树时,他给我区别其他号码?在你的课程开始时呼叫srand(time(NULL))。祝贺你…很快你就可以获得CS学位了:Pi找不到任何词对你说谢谢你的帮助你的
randInRange
函数可以给出一个超过
max
if
rand()的值
returned
RAND_MAX
。实际上,它仍然有缺陷:现在
MAX
几乎永远不会被返回。这应该可以工作:
(int)(((double)RAND()/((double)RAND_MAX+1))*(MAX min+1))+min
。如果
randInRange
函数
range
的值超过
MAX
,如果
RAND()
returned
RAND_MAX
。实际上,它仍然有缺陷:现在
MAX
几乎永远不会被返回。这应该可以工作:
(int)((double)RAND()/((double)RAND_MAX+1))*(MAX-min+1))+min
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int randInRange(int min, int max) 
{
  return (int)(((double) rand() / (double)(RAND_MAX + 1)) * (max - min + 1)) + min;
}

char pickChar(void)
{
  char val; 
  int cas = randInRange(0, 1);

  if (cas == 1)
    val = (char) randInRange('A', 'Z');
  else
    val = (char) randInRange('a', 'z');

  return val;
}

int main(void)
{
  char results[11] = {0};
  int i;

  srand(time(NULL));  // seed the random number generator

  for (i = 0; i < sizeof results - 1; i++)
    results[i] = pickChar();

  printf("Random string: %s\n", results);
  return 0;
}