C语言关于随机读取之疑惑

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:04:03
我现在的要求是要C语言读取1-16位的随机数字(不能重复)网上看到了方法:
以下代码产生[5,10]之内不重复的随机数,用户可以自行修改范围,也就是L和H的数值
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
const int L = 5;
const int H = 10;
int main( void )
{
const size_t LEN = H-L+1;
char n[LEN]; v //为什么要定义为字符型
for( int i=0; i<LEN; ++i ) n[i] = L+i; //这句干什么用的
srand( time(0) );
for( int j=LEN; j>0; --j ) //这个循环干什么用的
{
int m = rand()%j;
int temp = n[m];
n[m] = n[j-1];
n[j-1] = temp;
}
for( int k=0; k<LEN; ++k ) printf( "%d ", n[k] );
return 0;
}
我的疑问都写在代码那里了,希望有谁能解开我的疑惑,或者有谁有更好的方法,希望大家帮忙一下,我很蠢!希望讲解尽量详细点!谢谢了,

char n[LEN]; //为什么要定义为字符型
定义字符型,也可以定义int,这个应该是不固定的,
char类型最大值0xff

for( int i=0; i<LEN; ++i ) n[i] = L+i; //这句干什么用的
这个循环是给数组n赋值的,从最小值到最大值,
例子里面n[0]=5,n[1]=6,n[2]=7...n[LEN]=10

for( int j=LEN; j>0; --j ) //这个循环干什么用的
{
int m = rand()%j;
int temp = n[m];
n[m] = n[j-1];
n[j-1] = temp;
}
这个是进行随机排列的
最后排列出随机数放在数组n里面