@TOC
介绍
使用领域:生成随机数,生成排序查找算法所需的数据,实验数据。
实现语言:C
作者:nrxsh
算法思路
在一个当型循环内使用C语言提供的 rand() 函数生成随机数生成随机数,每生成一个随机数时把数字加入到一个数组,每次加入数组之前要检测该数字是否已存在于数组里面。
实现步骤
- 实现生成随机数列的循环
- 保存数据
实现代码
代码片
.
/**
* @author nrxsh https://blog.csdn.net/qq_16635277
* 2019-01-17
* original
*/
#include<stdio.h> //printf()
#include<stdlib.h> //srand()
#include<time.h> //time()
//#include<math.h>
#define _COUNT 30000 //因为rand()的返回值的范围只有0 ~ (2^15)-1 内,因此可以生成30000个随机数。
unsigned int index = 0;
unsigned int array[_COUNT];
int contains(unsigned int num)//检查某个数是否已经在数组array里面
{
for (unsigned int i = 0; i <= index; i++)
{
if (num == array[i])
return 1;
}
return 0;
}
void initArray()//生成30000个随机数
{
srand(time(NULL));
while (index != _COUNT)
{
unsigned int t = rand() % 32768;//生成 2^15 以下的数组。后面的 % 32768 其实可以不写
//但是需要限制最大值范围的时候有必要写这段代码。
if (!contains(t))//当生成的随机数 t 不存在与数组 array 的时候将数字加入到 array
{
array[index++] = t;//index 是记录当前位置的小标
}
}
}
void printArray()//将生成的随机数列打印到屏幕
{
for (unsigned int i = 0; i<_COUNT; i++)
{
printf("%d\n", array[i]);
}
}
void saveArray()//将数据存储到文件系统
{
FILE *fp = fopen("F:\\generates\\C\\randnum30000.txt", "wt");//不出错的前提是 目录必须存在
if (fp)
{
for (unsigned int i = 0; i<_COUNT; i++)
{
fprintf(fp, "%d\n", array[i]);
}
}
fclose(fp);
}
int main()
{
initArray();
printArray();
saveArray();
return 0;
}