
正文
随机函数C语言模拟 随机数函数c语言实现
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言中怎样写一个生成随机数的函数
rand函数也是调用dos的时钟,进行的伪随机函数.
你也可以使用时钟来模拟随机函数.
可以试用gettime这个函数:
long int MyRand(int x)
{
struct time t1,t2,t3;
gettime(t1);
int y1=t1.ti_hund;//取1/100s作为基数
gettime(t2);
int y2=t2.ti_hund;//取1/100s作为基数
gettime(t3);
int y3=t3.ti_hund;//取1/100s作为基数
return y1*y2*y3;//产生的随机数0~99*99*99
}
相关问答
Q1: c语言随机数怎么生成
在实际编程中,我们经常需要生成随机数。在c语言中我们通常使用rand方法生成随机数,在调用rand前需要调用srand初始化随机数种子。
电脑:华为MateBook14
系统:Windows10
软件:notepad++等编辑器、gcc编译器1.0
1、使用rand函数生成随机数,rand随机生成一个位于0 ~ RAND_MAX之间的整数。如下图中,我们直接使用rand方法生成10个随机数。
2、程序运行后生成了随机数,但直接使用rand的问题在于,在下次程序调用时,生成的随机数与上次一致。所以,rand函数虽然生成随机数,但可以说是一个伪随机。因为每次调用时,生成数字顺序都是固定的。
3、为了在每次调用时生成不同的随机数,使用srand函数初始化随机数种子。只要随机数种子变化了,那么生成的随机数就会改变。通常,srand使用当前时间作为种子。
4、但使用时间作为随机数种子是否安全呢?我们目前程序执行的速度都太快了,一秒钟对于计算机来说太漫长了。我们将生成随机数的操作定义为函数,然后调用函数两次,看生成的随机数仍然时一样。
5、优化函数也比较简单,在使用时间的基础上,我们还加上一个定增序号。这样能保证就算同一秒钟内多次调用,随机数的种子都是不一样的。
6、通常,我们需要获取一定范围内的随机数。所以,在生成随机数之后我们使用模运算获取对应范围内的数据。如生成0到100内的随机数。
Q2: C语言 实现模拟彩票的程序设计:随机产生7个数字(用C语言随机函数产生,[1,33]区间,七个数互
使用结构体链表模拟彩票的摇奖机,来保证每次随机都是不同的数字。
数组也可以模拟,但是删除元素比较麻烦,用链表更快捷。
定义数组指针,动态分配内存。
#include stdio.h
#include stdlib.h
#include time.h
typedef struct List {
int number;
struct List*next;
} ArrayList;
ArrayList*createList(int);//创建链表,参数是链表的节点数
void freeList(ArrayList*);//循环释放所有节点的内存
int deleteNode(ArrayList*,int);//删除节点,返回节点的数据
main() {
//动态创建内存
int*numbers=(int*)calloc(7,sizeof(int));
int*inNumbers=(int*)calloc(7,sizeof(int));
//动态创建数组链表存放1-33个编号
ArrayList*balls= createList(33);
int i;
srand((unsigned)time(NULL));
printf("请输入7个不同的数字(1-33):\n");
for(i=0; i7; i++) {
*(numbers+i)=deleteNode(balls,rand()%(33-i));
scanf("%d",inNumbers+i);
}
printf("随机产生的7个数字是:\n");
for(i=0; i7; i++) {
printf("%d ",*(numbers+i));
}
printf("\n相同的数字:\n");
//查找
int j;
for(i=0; i7; i++) {
for(j=0; j7; j++) {
if(*(numbers+i)==*(inNumbers+j)) {
printf("%d ",*(numbers+i));
break;
}
}
}
//释放内存
free(numbers);
free(inNumbers);
freeList(balls);
}
ArrayList*createList(int n) {
ArrayList*head=NULL,*end=NULL,*node=NULL;
end=head=(ArrayList*)malloc(sizeof(ArrayList));//head在删除和插入节点时有用。 不能删除head,也不能插入到head前面
int i;
for(i=1; i=n; i++) {
node=(ArrayList*)malloc(sizeof(ArrayList));
node-number=i;
end-next=node;
end=node;
}
end-next=NULL;
return head;
}
void freeList(ArrayList*head) {
ArrayList*node=head;
while(head!=NULL) {
head=head-next;
free(node);
node=head;
}
}
int deleteNode(ArrayList*head,int index) { //index节点索引(0-32),返回被删除的球的编号
ArrayList*node=head-next,*temp=head;
int i=0,number;
while(iindexnode!=NULL) {
temp=node;
node=node-next;
i++;
}
if(node!=NULL) {
number=node-number;
temp-next=node-next;
free(node);
}
return number;
}
运行结果
Q3: C语言利用随机函数模拟 30 个某班学生成绩,一位小数,一行 10 个数据,平均分,高于平均分值
#includestdio.h
#includestdlib.h
#includetime.h
void main()
{
int stud[30],i,j;
int rand();
float av=0;//表示平均数
int m=0,n=0;//m表示高于平均分的人数,n表示不及格人数
srand((int)time(0));
for(i=0;i30;i++)
stud[i]=rand()%60+40;
for(i=0;i3;i++)
{
printf("\n");
for(j=0;j10;j++)
{
printf("%4d ",stud[i*10+j]);
av+=stud[i*10+j];
}
}
av/=30;
printf(" %f\n",av);
for(i=0;i30;i++)
{
if(stud[i]av)
m++;
if(stud[i]=60)
n++;
}
printf("高于平均分人数:%d,不及格人数:%d\n",m,n);
}
结果:
94 70 79 67 53 86 40 82 97 97
50 87 98 71 42 91 69 66 72 91
82 69 42 77 53 67 60 75 87 84 73.266667
高于平均分人数:15,不及格人数:24
随机函数C语言模拟的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于随机数函数c语言实现、随机函数C语言模拟的信息别忘了在本站进行查找喔。








