c语言如何实现随机生成多个数组至少要100个
#include<stdlib.h>
#include<time.h>
void main()
{
int a[8],i;
srand((unsigned)time(NULL));
int j=0;
while (j<8)
{
a[j] =rand()%36+1;
for(i=0;i<j;i++)
{
if(a[i]==a[j])
a[j]=rand()%36+1;
}
printf("%-3d",a[j]);
j++;
}
}
这是随机生成一个,要实现多个不能一个一个打把 展开
C语言中随机函数需要使用到srand和rand。
srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。[1]
库函数中系统提供了两个函数用于产生随机数:srand()和rand()。 原型为:
函数一:int rand(void);
返回一个[0,RAND_MAX]间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。例程:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int a[8],i,j;
srand((unsigned)time(NULL));
for(j=1;j<101;j++){
printf("\n第%d组随机数组:\n",j);
for(i=0;i<8;i++){
a[i] =rand()%36+1;
printf("%-3d",a[i]);
}
}
return 0;
}
二维数组解决.
比如你要生成100套,每套8数据, 就定义a[100][8];
外循环用行下标, 内循环用列下标就行了, 如:
for (i = 0; i < 100; i++) {
for (j = 0; j < 8; j++) {
a[i][j] = rand() % 36 + 1;
}
}
如果你要判断, 必须不同, 那你再加相关进去, 不过不能再用j了, 因为j用来循环了.
我这二维数组有错能在我的例子上修改么0 0
你根本就不是二维数组啊. 这样吧, 我写个给你吧, 这里面用到了洗牌算法, 保证不会有重复的数据, 效率相当高:
#include <stdio.h>
#include <stdlib.h>
#define ROW 100
#define COL 8
int main(void)
{
int num[ROW][COL];
int tmp[ROW * COL]; // 临时数组
int i, j, ret, last;
for (i = 0; i < ROW * COL; i++) { // 形成0-799这800个数
tmp[i] = i;
}
srand(time(NULL)); // 随机种子
last = ROW * COL;
for (i = 0; i < ROW; i++) { // 外循环
for (j = 0; j < COL; j++) {
// 随机到下标,模last, last从800减到1, 使模到的下标越来越小.
ret = rand() % last;
num[i][j] = tmp[ret]; // 取出此下标的数字
/* 下标数字被取走, 从tmp后面补过来, 这样就算随到重复的下标
也是不同的数字, 由于后面下标被移走, 将last减1, 不用每次随800*/
tmp[ret] = tmp[--last];
}
}
// 打印值, 检查结果
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%3d ", num[i][j]);
}
puts("");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main() {
int a[N] = {0},i,j,num,flag;
srand((unsigned)time(NULL));
for(i = 0; i < N; ++i) {
flag = 1;
num = rand()%36 + 1;
for(j = 0;j <= i;j++) {
if(a[j] == num) {
flag = 0;
break;
}
}
if(flag) {
a[i] = num;
printf("%d ",a[i]);
}
else --i;
}
printf("\n");
return 0;
}
这是随机生成一个吧,,不是多个
方法是一样的。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
#define M 15
void Generator(int a[], int n) {
int i,j,num,flag;
for(i = 0; i < n; ++i) {
flag = 1;
num = rand()%36 + 1;
for(j = 0;j <= i;j++) {
if(a[j] == num) {
flag = 0;
break;
}
}
if(flag) a[i] = num;
else --i;
}
}
int main() {
int a[M][N] = {0},i,j;
srand((unsigned)time(NULL));
for(i = 0; i < M; ++i) {
Generator(a[i],N);
for(j = 0; j < N; ++j)
printf("%3d ",a[i][j]);
printf("\n");
}
return 0;
}
能做个师范么