问题遇到的现象和发生背景
编译错误
用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#define N 5
int main()
{
//int N = 0;
//scanf("%d", &N);
int arr[N][N] = { 0 };
//输入
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++)
{
scanf("%d", &arr[i][j]);
}
}
//交换
//中心元素
int i, j, tmpe, *max, *min;
int *b[N*N], *p = &arr[0][0];
for (i = 0; i < N*N; i++)
b[i] = p++; //指向原二维数组各元素的指针数组
/*--中心元素--*/
for (i = 1, max = b[0]; i < N*N; i++) {
if (*max < *b[i])
max = b[i];
}
//将元素值交换
tmpe = *b[(N*N-1)/2];
*b[(N*N-1)/2] = *max;
*max = tmpe;
//左上
for (i = 1, min = b[0]; i < N*N; i++) {
if (*min > *b[i])
min = b[i];
}
//元素值交换
tmpe = *b[0];
*b[0] = *min;
*min = tmpe;
//右上
for ( i = 1,min=b[N-2]; i < N*N; i++)
{
if (*min>*b[i])
{
min = b[i];
}
}
tmpe = *b[N-1];
*b[N-1] = *min;
*min = tmpe;
//左下
for ( i = 1,min=b[1]; i < N-1; i++)//第一行2--4
{
if (*min > *b[i])
{
min = b[i];
}
}
for ( i = N; i < N*N; i++)//第二行往下
{
if (*min > *b[i])
{
min = b[i];
}
}
tmpe = *b[N*N-N];
*b[N*N-N] = *min;
*min = tmpe;
//右下
for (i = 1, min = b[1]; i < N-1; i++)//第一行2--4
{
if (*min > *b[i])
{
min = b[i];
}
}
for (i = N; i < N*N-N; i++)//第二行--第四行
{
if (*min > *b[i])
{
min = b[i];
}
}
for ( i = N*N-N+1; i < N*N; i++)
{
if (*min > *b[i])
{
min = b[i];
}
}
tmpe = *b[N*N-1];
*b[N*N-1] = *min;
*min = tmpe;
//输出
for ( i = 0; i < N; i++)
{
for ( j = 0; j < N; j++)
{
printf("%-d", arr[i][j]);
if (j<N-1)
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
运行结果及报错内容
编译错误
我想要达到的结果
想手动输入N,不用宏定义