利用数组产生随机数列

已知二维数组 a[5][5],完成下列要求(1) 输入数据a[i][j]=rand(); /* 产 生 0-RAND_MAX 之间的随机数,RAND_MAX=32767;rand()函数包括在<stdlib.h>中*/注:此时产生的随机数都是伪随机数,其背后的原理是一个递推式:Xt = (aXt-1+c) mod m,其中 a,c 都是常数,mod 表示取模,不同编译系统可能不一样。m =RAND_MAX+1 是一个整数。这个递推式表示:当给定一个初始值 X0 后,就可以不断产生[0, m-1]上的整数。这个初始值 X0 叫做初始的 seed,很容易知道:1.当 seed 给定后,产生的随机数列是也是固定的;2. 初始 seed 不同,则产生的随机数列也不同。C 中提供了一个用来设置初始 seed 值的函数:void srand(unsigned int seed);当直接调用 rand()而不使用 srand 函数时,系统默认为 srand(1),这样 seed 固定为 1,每次运行程序得到的随机序列也都是固定的。 如果要产生不同的随机序列,就需要变动 seed 的值——最好的办法是以时间的变动作为 seed,即在产生随机数之前加上代码 srand((unsigned)time(0));(别忘了包含头文件#include <time.h>)表示以时间起点 0 作为 seed,随着时间的流逝,seed 会发生变化,注意:这里刷新时间间隔为 1 秒,即 1 秒钟 seed 值自动变化一次。(2) 显示数组各元素,要求按矩阵形式排列整齐;(3) 将第 1 与第 5 行对调后,再显示之;(4) 求出每行元素的最大值,并指出其行号和列号。

第1用第5行对调。。。不知道你的第1行和第5行是啥啊。参考如下代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int a[5][5],i,j,max;
    srand((unsigned int)time(NULL));
    for (i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            a[i][j] = rand();
            printf("%10d",a[i][j]);
        }
        printf("\n");
    }
    //找出每行的最大值
    for (i=0;i<5;i++)
    {
        max = a[i][0];
        for(j=1;j<5;j++)
        {
            if(a[i][j] > max)
                max = a[i][j];
        }
        printf("第%d行的最大值:%d\n",i+1,max);
    }
    return 0;
}