当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : = 怎样用 srand和rand 函数生成[30,80]的数呢? =
帖子发表于 : 2007-05-16 13:05 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
如题.


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-05-16 14:24 
头像

注册: 2007-04-03 9:52
帖子: 353
送出感谢: 0 次
接收感谢: 0 次
$man srand
$
我们可以看到里面举了一个例子, 1~10的随机数
代码:
 j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));


其中
(rand() / (RAND_MAX + 1.0)) 产生 0~1 之间的数字,

30~80 我们可以改成
代码:
 j = 30 + (int) (50.0 * (rand() / (RAND_MAX + 1.0)));


注意:记得之前需要先调用一次srand(),另外,这么改不会产生80这个边界值(为什么?怎么改?自己想一下)


_________________
TODO LIST:
1.valgrind:
2.gcov:
3.cppuint:未在Linux中使用
4.PostgreSQL:unixODBC
5.Doxygen:UTF8 中文问题,生成LaTex文档问题
6.LaTex:明确安装问题,UTF8 中文字体问题


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-05-16 21:18 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
强!


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-05-16 21:35 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
大哥给看看这段代码那里错了.

代码:
#include<curses.h>
#include<stdio.h>
#include<stdlib.h>

int
main ()
{
  char b;
  int c;
  initscr ();
  if (!hsa_colors () || start_cplor () == ERR)
    {
      endwin ();
      printf ("ERROR_DISABLE_COLOR\n");
      exit (1);
    }
  init_pair (1, COLOR_GREEN, COLOR_BLACK);
  init_pair (2, COLOR_RED, COLOR_BLACK);
  for (;;)
    {
      attron (COLOR_PAIR (1));
      srand ((int) time (0));
      c = 97 + (int) (26.0 * (rand () / (RAND_MAX + 1.0)));
      printw ("%c\n", c);
      refresh ();
      b = getch ();
      refresh ();
      if (c != b)
        {
          if (b == 27)
            {
              endwin ();
              exit (0);
            }
          else
            {
              attron (COLOR_PAIR (2));
              printw ("ERROR\n");
              refresh ();
            }
        }
    }
  return 0;
}


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-05-16 22:20 
头像

注册: 2007-04-03 9:52
帖子: 353
送出感谢: 0 次
接收感谢: 0 次
帮你改了
2处拼写错误, 少1个头文件

下次记得把编译命令行和错误提示一起给出来

代码:
#include<curses.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main ()
{
    char b;
    int c;
    initscr ();
    if ( !has_colors () || start_color () == ERR )
    {
        endwin ();
        printf ( "ERROR_DISABLE_COLOR\n" );
        exit ( 1 );
    }
    init_pair ( 1, COLOR_GREEN, COLOR_BLACK );
    init_pair ( 2, COLOR_RED, COLOR_BLACK );
    for ( ;; )
    {
        attron ( COLOR_PAIR ( 1 ) );
        srand ( ( int ) time ( 0 ) );
        c = 97 + ( int ) ( 26.0 * ( rand () / ( RAND_MAX + 1.0 ) ) );
        printw ( "%c\n", c );
        refresh ();
        b = getch ();
        refresh ();
        if ( c != b )
        {
            if ( b == 27 )
            {
                endwin ();
                exit ( 0 );
            }
            else
            {
                attron ( COLOR_PAIR ( 2 ) );
                printw ( "ERROR\n" );
                refresh ();
            }
        }
    }
    return 0;
}


命令行参数

在Linux上编译Curses程序时,gcc要带 -lcurses参数,(这个是在IBM的网站上搜出来的)

我没用过curses,不知有什么书可以参考?


_________________
TODO LIST:
1.valgrind:
2.gcov:
3.cppuint:未在Linux中使用
4.PostgreSQL:unixODBC
5.Doxygen:UTF8 中文问题,生成LaTex文档问题
6.LaTex:明确安装问题,UTF8 中文字体问题


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-05-16 22:35 
头像

注册: 2006-09-14 21:59
帖子: 238
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
antonym55 写道:
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));


用得着这么麻烦吗……产生[A,B)之间的随机数,用
rand () % (B - A + 1) + A
就行了,没必要先转成[0,1)的


_________________
传说中的一凡……


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-05-16 22:46 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
efan 写道:
用得着这么麻烦吗……产生[A,B)之间的随机数,用
rand () % (B - A + 1) + A
就行了,没必要先转成[0,1)的

这样会导致随机数的概率不一致,特别是B-A大的时候,问题会比较明显。man srand有提到的。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-05-16 22:56 
头像

注册: 2007-04-03 9:52
帖子: 353
送出感谢: 0 次
接收感谢: 0 次
efan 写道:
antonym55 写道:
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));


用得着这么麻烦吗……产生[A,B)之间的随机数,用
rand () % (B - A + 1) + A
就行了,没必要先转成[0,1)的


确实可以不用这么麻烦,完全可以用你说的这种方法,更可以自己写一个,

只不过 即然 The Art of Scientific Computing 中建议了

而且写到man手册中,还是用这个比较好点吧!
引用:
"If you want to generate a random integer between 1 and 10, you
should always do it by using high-order bits, as in

j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));

and never by anything resembling

j = 1 + (rand() % 10);

(which uses lower-order bits)."


_________________
TODO LIST:
1.valgrind:
2.gcov:
3.cppuint:未在Linux中使用
4.PostgreSQL:unixODBC
5.Doxygen:UTF8 中文问题,生成LaTex文档问题
6.LaTex:明确安装问题,UTF8 中文字体问题


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-05-16 23:13 
头像

注册: 2007-04-15 18:46
帖子: 65
送出感谢: 0 次
接收感谢: 0 次
为什么我这样做了 但是产生的随机数全部为零?


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-05-16 23:44 
头像

注册: 2007-04-03 9:52
帖子: 353
送出感谢: 0 次
接收感谢: 0 次
shadowson 写道:
为什么我这样做了 但是产生的随机数全部为零?

srand()你用什么做参数传进去的?

还是贴下代码吧!


_________________
TODO LIST:
1.valgrind:
2.gcov:
3.cppuint:未在Linux中使用
4.PostgreSQL:unixODBC
5.Doxygen:UTF8 中文问题,生成LaTex文档问题
6.LaTex:明确安装问题,UTF8 中文字体问题


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-05-17 1:03 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
:shock:


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-05-17 12:49 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
antonym55 写道:
帮你改了
2处拼写错误, 少1个头文件

下次记得把编译命令行和错误提示一起给出来

代码:
#include<curses.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main ()
{
    char b;
    int c;
    initscr ();
    if ( !has_colors () || start_color () == ERR )
    {
        endwin ();
        printf ( "ERROR_DISABLE_COLOR\n" );
        exit ( 1 );
    }
    init_pair ( 1, COLOR_GREEN, COLOR_BLACK );
    init_pair ( 2, COLOR_RED, COLOR_BLACK );
    for ( ;; )
    {
        attron ( COLOR_PAIR ( 1 ) );
        srand ( ( int ) time ( 0 ) );
        c = 97 + ( int ) ( 26.0 * ( rand () / ( RAND_MAX + 1.0 ) ) );
        printw ( "%c\n", c );
        refresh ();
        b = getch ();
        refresh ();
        if ( c != b )
        {
            if ( b == 27 )
            {
                endwin ();
                exit ( 0 );
            }
            else
            {
                attron ( COLOR_PAIR ( 2 ) );
                printw ( "ERROR\n" );
                refresh ();
            }
        }
    }
    return 0;
}


命令行参数

在Linux上编译Curses程序时,gcc要带 -lcurses参数,(这个是在IBM的网站上搜出来的)

我没用过curses,不知有什么书可以参考?


后来我自己意识到少了time.h的头文件了. :oops:

谢谢你.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译