你的二维数组的第一维大小为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");
}
}