最近在写东西时需要用到随机函数产生一组一定范围的不重复的数字,于是上网查资料学习了一下随机函数的使用,下面我就不赘述原理及用法了,直接上代码。
《一》加入判断,直到存储完毕为止
#include <stdio.h>
#include<time.h>
int main()
{
srand(time(NULL));
int i,j=0;
int array[9];
while(j<9)
{
array[j]=rand()%9;
for(i=0;i<j;i++)
{
if(array[i]==array[j])
break;
}
if(i<j)
continue;
j++;
printf("array[%d]=%d\n",i,array[i]);
}
return 0;
}
《二》先存储,不符合条件,下标减一
#include <stdio.h>
#include<time.h>
int main()
{
srand(time(NULL));
int i,j=0;
int array[9];
for(j=0;j<9;j++)
{
array[j]=rand()%9;
for(i=0;i<j;i++)
{
if(array[i]==array[j])
{
i=-1;
array[j]=rand()%9;
}
}
printf("array[%d]=%d\n",i,array[i]);
}
return 0;
}
《三》初始化数组,rand()产生伪随机值交换打乱
#include <stdio.h>
#include<time.h>
int main()
{
int i,c,temp;
int array[9];
for(i=0;i<9;i++)
array[i]=i;
for(i=0;i<9;i++)
{
c=rand()%(9-i)+i;
temp=array[i];
array[i]=array[c];
array[c]=temp;
printf("array[%d]=%d\n",i,array[i]);
}
return 0;
}
《四》有时想要存入二维数组随机值,怎么办,额。。。“凉拌”
#include <stdio.h>
#include <time.h>
int main()
{
srand(time(NULL));
int i,j=0,k=0,m=0;
int a[9],Array[3][3];
while (j<9)
{
a[j] = rand()%9;
for(i=0;i<j;i++)
{
if(a[i]==a[j])
break;
}
if(i<j)
continue;
j++;
printf("a[%d]=%d\n",i,a[i]);
}
j=0;
for(i=0;i<9;i++)
{
if(i<=2)
{
m=0;
Array[m][i]=a[i];
printf("Array[%d][%d]=%d\n",m,i,Array[m][i]);
}
else if(i<=5)
{
m=1;
Array[m][j]=a[i];
printf("Array[%d][%d]=%d\n",m,j,Array[m][j]);
++j;
}
else
{
m=2;
Array[m][k]=a[i];
printf("Array[%d][%d]=%d\n",m,k,Array[m][k]);
++k;
}
}
return 0;
}
还有一些产生随机值的通用表达式,注:以下为网上搜集的资料,由于忘记出处,所以请作者见谅,旨在学习交流。
产生一定范围随机数的通用表示公式
要取得[a,b) 的随机整数,使用(rand()%(b-a))+a;
要取得[a,b] 的随机整数,使用(rand()%(b-a+1))+a;
要取得(a,b] 的随机整数,使用(rand()%(b-a))+a+1;
通用公式:a + rand() % n;取得[a,a+n) 的随机整数,其中的a是起始值,n是整数的范围。
要取得[a,b) 的随机整数,另一种表示:a+(int)b*rand()/(RAND_MAX+1)。
要取得[a,b] 的随机整数 另一种表示:a+(int)b*rand()/(RAND_MAX)。
要取得[0,1] 之间的浮点数 ,可以使用rand()/double(RAND_MAX)。