c语言中如何产生随即数

可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。那么怎么实现C语言中的随机函数呢?



除了random函数,还有一个rand函数,也是一个随机函数,可以产生从0到rand_max的随机数。



#i nclude <stdio.h>

#i nclude <stdlib.h>



int main()

{

int k;

k=rand();

printf("%d/n", k);

return 0;

}



大家可以把以上的代码编译运行一下,发现他的确产生随机数了,但是你会发现,每次运行程序产生的随机数都是一样的,为什么呢?因为随机数取在C语言中采用的是固定序列,所以每次执行所取的是同一个数。



那么如何写一个程序,让它每次运行时产生的随机数都不一样呢? 请看下面的例子:



#i nclude <stdlib.h>

#i nclude <stdio.h>

#i nclude <time.h>



int main(void)

{

int i;

time_t t;

srand((unsigned) time(&t));

printf("Ten random numbers from 0 to 99/n/n");

for (i=0; i<10; i++)

printf("%d/n", rand()%100);

return 0;

}



这时运行程序,会发现每次产生的随机数都不一样。



那么为什么第一个程序一样而第二个程序不一样呢?



第二个程序用到了一个新的函数srand,这个函数是给随机数产生一个随机种子(seed),函数原型是srand( (unsigned) time(NULL));



time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。



所以说,要想产生不同的随机数,在使用rand之前需要先调用srand



由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?



从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:



k=rand()%(Y-X+1)+X;



这样,就可以产生你想要的任何范围内的随机数了。 
 
在C语言中,`system`函声明在`<stdlib.h>`头文件中,其原型为`int system(const char *command);`。该函的主要作用是执行一个系统命令。 `system`函会调用`fork()`产生子进程,由子进程来调用`/bin/sh -c string`来执行参`string`字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用`system()`期间`SIGCHLD`信号会被暂时搁置,`SIGINT`和`SIGQUIT`信号则会被忽略[^1]。 以下是一些`system`函的常见用法示例: #### 1. 执行系统命令 在Windows系统下,可以使用`system`函调用`dir`命令列出当前目录下的文件和文件夹;在Linux或macOS系统下可以使用`ls`命令实现相同功能。 **Windows系统示例**: ```c #include <stdlib.h> #include <stdio.h> int main() { int result = system("dir"); if (result != 0) { printf("命令执行失败\n"); } return 0; } ``` **Linux或macOS系统示例**: ```c #include <stdlib.h> #include <stdio.h> int main() { int result = system("ls"); if (result != 0) { printf("命令执行失败\n"); } return 0; } ``` #### 2. 执行系统关机命令 在Windows系统下,可以使用`system`函执行关机命令。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[10]; printf("请输入\"我是猪\",否则电脑将在两分钟后关闭\n"); system("shutdown -s -t 120"); scanf("%s", a); if (strcmp(a, "我是猪") == 0) { printf("恭喜你成功选择自己的属相,主动承认现实!\n"); system("shutdown -a"); } return 0; } ``` #### 3. 改变控制台颜色和查看网络信息 在Windows系统下,可以使用`system`函改变控制台的前景色和查看当前网络情况。 ```c #include <stdio.h> #include <stdlib.h> int main() { system("color 02"); system("ipconfig"); system("pause"); return 0; } ``` ### 函返回值 - 若`command`为`NULL`,则当系统支持命令处理程序时返回非零值,不支持时返回零。 - 若`command`不为`NULL`,则命令执行成功时返回命令的退出状态,命令执行失败时返回 -1。 ### 注意事项 - `system`函是通过产生新进程实现的,父进程和子进程间没有进程通信,子进程自然改变不了父进程的环境变量[^2]。 - 在使用`system`函时,要注意输入的命令是否合法,避免因输入非法命令导致程序出现异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值