c语言中随机生成的数存放在数组中,为什么不能被其他数替换掉?

 

你的二维数组的第一维大小为4,那么你的下标上限应该为3,在你交换位置的那段循环代码里面,a[N][k]下标越界,把N改成N-1就行了。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 4
int main()
{
    int i, j, ch[6] = {0}, ab[6] = {0}, k, a[N][6];
    srand(time(0));                         /*设置时间种子*/
    printf("原数组:\n");
    for(i = 0; i < N; i++){
		for(j = 0; j < 6; j++){
			a[i][j] = 1 + rand()%99;              /*产生1到99的数给数组a*/
         	printf("%3d",a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for(k = 0; k < 6; k++)                       /*交换位置第一和最后*/
    {

        ch[k] = a[0][k];
        ab[k] = a[N-1][k];
        printf("%3d", ch[k]);
        a[N-1][k] = ch[k];
        a[0][k] = ab[k];
        printf("%-5d", a[0][k]);
    }
    printf("\n");
    printf("第一行和最后一行交换位置后的数组:\n");
    for(i = 0; i < N; i++){
        for(j = 0; j < 6; j++)
            printf("%3d", a[i][j]);
        printf("\n");
    }
    return 0;
}

 

#include<stdio.h>
#include<time.h>
#define N 4
void main()
{
    int i,j,ch[6]={0},ab[6]={0},k,a[N][6];
    srand(time(0));                         /*设置时间种子*/
    printf("原数组:\n");
    for(i=0;i<N;i++)
        {for(j=0;j<6;j++)
        {a[i][j]=1+rand()%99;              /*产生1到99的数给数组a*/
         printf("%3d",a[i][j]);
        }
        printf("\n");
        }
        printf("\n");
    for(k=0;k<6;k++)                       /*交换位置第一和最后*/
    {

        ch[k]=a[0][k];
        ab[k]=a[N][k];
        printf("%3d",ch[k]);
        a[N][k]=ch[k];
        a[0][k]=ab[k];
        printf("%-5d",a[0][k]);
    }
        printf("\n");
    printf("第一行和最后一行交换位置后的数组:\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<6;j++)
            printf("%3d",a[i][j]);
        printf("\n");
    }
}