C语言解决:给定抽取随机数的子函数表示从均匀分布U(0,1)里抽取n个随机数,存储在数组p里。本题要求从以上均匀里抽取1000随机数
时间: 2023-06-20 19:04:46 浏览: 157
以下是用C语言实现从均匀分布U(0,1)中抽取n个随机数并存储到数组中的函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void generateRandomNumbers(double p[], int n)
{
int i;
srand(time(NULL));
for (i = 0; i < n; i++) {
p[i] = (double)rand() / RAND_MAX;
}
}
```
在主函数中调用上述函数生成1000个随机数:
```c
#include <stdio.h>
int main()
{
double p[1000];
int i;
generateRandomNumbers(p, 1000);
for (i = 0; i < 1000; i++) {
printf("%f\n", p[i]);
}
return 0;
}
```
在本例中,我们使用C标准库中的rand函数来生成随机数,并使用srand函数初始化随机数生成器。生成的随机数在[0, 1)区间内均匀分布。最后,将生成的随机数存储在p数组中,并在主函数中打印输出。
相关问题
一副扑克,除去大小王有52张牌,有4种花色,每次在52张牌中连续摸4张牌,请编程统计10000次中,摸到4张牌花色相同的次数,要求在函数中实现一次摸牌算法,函数返回0为四张牌花色不全相同,函数返回非0表示4张牌花色都相同,统计完成后,打印摸到4张牌花色相同的次数。
好的,以下是一份C语言的代码实现,实现了您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int draw_card() {
return rand() % 52;
}
int check_same_suit(int card1, int card2, int card3, int card4) {
int suit1 = card1 / 13;
int suit2 = card2 / 13;
int suit3 = card3 / 13;
int suit4 = card4 / 13;
if (suit1 == suit2 && suit2 == suit3 && suit3 == suit4) {
return 1;
} else {
return 0;
}
}
int main() {
srand(time(NULL)); // 初始化随机种子
int count = 0; // 计数器
for (int i = 0; i < 10000; i++) {
int card1 = draw_card();
int card2 = draw_card();
int card3 = draw_card();
int card4 = draw_card();
if (check_same_suit(card1, card2, card3, card4)) {
count++;
}
}
printf("摸到4张牌花色相同的次数为:%d\n", count);
return 0;
}
```
该程序中的 `draw_card` 函数用于模拟摸牌过程,返回一个0到51之间的随机数,表示从整副扑克牌中随机抽取一张牌。
`check_same_suit` 函数用于判断给定的4张牌是否花色相同,如果相同则返回1,否则返回0。
主函数 `main` 中使用 `srand` 函数初始化随机数生成器,然后进行10000次模拟摸牌。每次摸牌结束后,使用 `check_same_suit` 函数判断是否摸到了4张花色相同的牌,如果是则将计数器 `count` 加1。最后输出摸到4张牌花色相同的次数即可。
希望这份代码能够解决您的问题。
阅读全文