产生随机数的一个小问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 14:45:32
#include <stdlib.h>
#include <stdio.h>
#include<stdio.h>
#include "time.h"

int main(void)
{
int a[100]={0}; int i,m;
for(i=1; i<=99; ++i)
printf("%4d",a[i] );

srand( (unsigned)time( NULL ) );

for(i=1; i<=99; i++)
{
while(a[m=rand()%100+1]);
a[m] = i;
}
for(i=1; i<=99; ++i)
printf("%4d",a[i] );

}

有谁知道下面这句语句的意思。帮我解释一下,越详细越好。。。

for(i=1; i<=99; i++)
{
while(a[m=rand()%100+1]);
a[m] = i;
}

rand()产生一个随机数,rand()%100+1产生一个范围在1~100的随机数。

while(a[m=rand()%100+1]);

等号表达式的值取等号右边的项,所以这个判断语句可以认为是
while(a[rand()%100+1]);
由于数组a[]初始化了,所有元素为0;那么while循环时有两种情况
1. a[rand()%100+1]没有被赋值,还是0,那么相当于while(0),跳出循环,进入下面的赋值状态;
2. a[rand()%100+1])已经被赋值过了,不是0了,那么继续while循环,直到找到一个未被赋值的a[rand()%100+1])出来进行赋值。
这个过程中m的值一直等于rand()%100+1的值。

首先得明白一句

a[m=rand()%100+1]

c语言中有一种连续赋值的方式


int a,b;
a=b=1;

结果是a,b的值都是1

这样上面的那一句也就不难理解了

就好像是

for(i=1; i<=99; i++)
{
m=rand()%100+1;
while(a[m]);
a[m] = i;
m=rand()%100+1;
}

即一直a[m]不为真(m为0-100的随机数),则将i的值(也就是第几次外循环)赋给a[m]

要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。

·