c语言如何实现随机生成多个数组至少要100个

#include<stdio.h>
#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语言编译器

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,输入C语言代码:

srand((unsigned)time(NULL)); 

for (int i = 0;i < 100; i++) {

printf("%d ", rand());

}

3、编译器运行test.cpp文件,此时成功随机生成了100个随机数

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-13

    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;
    }

第2个回答  2013-06-25

二维数组解决.

比如你要生成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;
}

追问

二维数组不成功,不能实现,,求指导,,(还一个小问题,你的那个截图方式是怎么做到的?)

追答

回答的时候输入框中, 有个代码语言, 你用c/c++就行了.

三层循环, 乱七八糟, 我都不知道从哪里纠正起了.

第3个回答  推荐于2017-10-11
#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;
}

追问

二维数组不成功,没有错误但是无法实现,,,(还一个小问题,你的那个截图方式是怎么做到的?)

追答

你用我上传的代码,不要改动,再试试,没有问题。
我回答栏的C/C++上传的程序。
另外,一组数据中,没有重复数字,你的代码会产生相同的数。

追问

你的代码对,,可是我怎么看不太懂啊,,我有点绕,能够给我讲讲么

追答

Generator()函数负责产生n个不重复的数字存放在a[]中,a是二维数组,故该函数每次产生一行数字。
为了产生不重复数字,首先要对新得到的数据与已经得到的数据逐个比较,如果有相同的,则废弃这个数,且执行--i,这是为了抵消for循环中++i的作用,如果没有相同的,则保存此数,并进行下一个,直到产生指定数量的数。
当然还差一个排序函数。

追问

flag我没懂啥意思,

if(flag) a[i] = num;这if语句表达式flag不懂啥意思0 0

追答

flag用来标记num是否与已有的数据是重复的,如果是,则flag被赋予0,不是则保持1不变。完成循环for(j)后,判断flag的值,非零时,则添加num到数组中。

本回答被提问者采纳
第4个回答  2013-06-25
嵌套循环就行了追问

能做个师范么

相似回答