| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14803 人关注过本帖
标题:c语言中如何产生任意范围的随机数?
只看楼主 加入收藏
指向指针的指针
Rank: 1
等 级:新手上路
帖 子:339
专家分:0
注 册:2004-8-8
收藏
得分:0 
以下是引用阿一2004在2004-08-27 17:49:51的发言:

上面老兄要钱的东东,我买了,可是能力有限,又没有文这说明,

我得回家好好看看,下面为广大人民服务,公布我用五十元买来的好东东。嘻嘻,:

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

int main(void) { int i,t; double s; printf("Ten random numbers from 0 to 100\n\n"); for(i=0; i<100; i++) { if(!(i%10))getch(); printf("%d\n", rand() % 101); } printf("Ten random numbers from 10 to 100\n\n"); for(i=0; i<100; i++) { if(!(i%10))getch(); printf("%d\n", rand() % 90+10); } printf("Ten random numbers from -100 to 100\n\n"); for(i=0; i<100; i++) { if(!(i%10))getch(); t= rand() % 10>5?1:-1; printf("%d\n", (rand() % 101)*t); } printf("Ten random numbers from 35.68 to 55.68\n\n"); for(i=0; i<100; i++) { if(!(i%10))getch(); t = rand()%2000 + 3568; s = t/100f; printf("%lf\n", s); } }

为人民服务,不错,口头表扬一次


/sign.png" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www./sign.png');}" onmousewheel="return imgzoom(this);" alt="" />
2004-08-30 14:42
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

给你写了个源代码:

#include <stdlib.h>

double RandomAtoB(double A , double B)

{

double tmp;

if(A>B) {tmp = A;A=B;B=tmp;}

tmp = B - A;

return A + tmp * rand() /(double) RAND_MAX ;

}

以及测试程序:

#include "iostream.h"

void main() { for (int i = 0;i<10 ;i++) { cout<<RandomAtoB((double)-10,(double)10)<<endl; } }


永不放弃!
2004-08-30 15:35
多维数组
Rank: 1
等 级:新手上路
帖 子:238
专家分:0
注 册:2006-8-16
收藏
得分:0 
以下是引用阿一2004在2004-8-27 17:49:00的发言:

上面老兄要钱的东东,我买了,可是能力有限,又没有文这说明,

我得回家好好看看,下面为广大人民服务,公布我用五十元买来的好东东。嘻嘻,:

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

int main(void)
{
int i,t;
double s;
printf("Ten random numbers from 0 to 100\n\n");
for(i=0; i<100; i++)
{ if(!(i%10))getch();
printf("%d\n", rand() % 101);
}
printf("Ten random numbers from 10 to 100\n\n");
for(i=0; i<100; i++)
{ if(!(i%10))getch();
printf("%d\n", rand() % 90+10);
}
printf("Ten random numbers from -100 to 100\n\n");
for(i=0; i<100; i++)
{ if(!(i%10))getch();
t= rand() % 10>5?1:-1;
printf("%d\n", (rand() % 101)*t);
}
printf("Ten random numbers from 35.68 to 55.68\n\n");
for(i=0; i<100; i++)
{ if(!(i%10))getch();
t = rand()%2000 + 3568;
s = t/100f;
printf("%lf\n", s);
}
}

谁写的代码呀!!!编译器一查有4个错误......还要买


有事发邮件:tzp_1210@
2006-09-05 09:12
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
我想顺便问个相关的问题
就是计算机用什么方法产生随机数

当然要是是个很麻烦的问题 可以只给我一个搜索方向

[此贴子已经被作者于2006-9-5 9:26:24编辑过]

2006-09-05 09:26
多维数组
Rank: 1
等 级:新手上路
帖 子:238
专家分:0
注 册:2006-8-16
收藏
得分:0 

搜索方向之一:找出写这个函数的人要算法
二:反编译成汇编代码去分析


有事发邮件:tzp_1210@
2006-09-05 09:39
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用多维数组在2006-9-5 9:39:00的发言:

搜索方向之一:找出写这个函数的人要算法
二:反编译成汇编代码去分析

2006-09-05 09:50
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用指向指针的指针在2004-8-23 18:53:00的发言:
c语言中如何产生任意范围的随机数?比如说0-100的整数;-100~100的整数;10~100的整数;34.23~56.98的两位小数等等?

rand()%100
rand()%200-100
rand()%110-10
rand()%(x+y)-y //对于整数就可以,当然要随机产生小数范围就先把这个范围划为整数,产生整数后再换算过去.,这里要注意数据溢出问题(用多次产生随机数相加解决).




倚天照海花无数,流水高山心自知。
2006-09-05 10:59
hanlinsong
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-1
收藏
得分:0 
给大家分享一下这个产生随机数的程序


#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#define  im  1771875L   //from MOLDY's auxil.c
#define  ia  2416L
#define  ic  374441L
#define  MAX 30000
int main(int argc, char *argv[])
{
  unsigned long i, j, digit, seed, num, new_seed;
  static unsigned long out_data[MAX], n = 0, total = 0;
  unsigned begin_seed;
  time_t t;
  if (argc == 1)
 num = 1;
  else
 sscanf(argv[1], "%ld", &num);
  begin_seed = (unsigned)time(&t);
  srand(begin_seed);
  while (n < num)
  {
    for (i = 0; i < 10; i++)
 {
      seed = 0;
      for (j = 0; j < 7; j++)
   {
        digit = rand();
        digit %= 10000;
     seed = (unsigned long)(seed * 9.6 + digit);  //*10 is not good.
        if (seed > 1000000) break;
   }
 }
    //----------------------------------------------------
    seed = (seed * ia + ic) % im;
    total++;
 if (seed <= 1000)   //withnot using [0,1000] to avoid probable misunderstanding when run MOLDY
   seed += im;
 for (i = 0; i < n; i++)
 {
   if (seed == out_data[i]) //to discard the probable seed as same as before
   {
  new_seed = 0;
  break;
   }
   else
  new_seed = 1;
 }
 if (new_seed)
 {
   n++;
   out_data[n] = seed;
      printf("%ld\n", seed);
   if (n % 10 == 0)
  printf("----%2d----\n", n);
 }
  }
//  printf("\ntotal=%d, it should be %d.", total, num);
//  if (total > num) printf("\nbegin_seed = %d.", begin_seed);
  return(0);
}
2010-08-12 20:28
jlchbhm007
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-11-13
收藏
得分:0 
我晕。。不错,
2011-11-13 11:15
IT李志鹏
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-3-16
收藏
得分:0 
回复 4楼 天使预备役
你这随机数每次运行都是一样的呀!
2016-03-16 18:19
快速回复:c语言中如何产生任意范围的随机数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018611 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved