输入一个二维数组,使其中的最大值和第一个数交换,最小值和最后一个数交换。请利用指针和函数来实现。

#include<stdio.h>
#include<stdlib.h>
main()
{
int i,j,x,y,**a;
printf("输入数组行,列 \n");
scanf("%d,%d",&x,&y);
if (x<=0||y<=0)
{
printf("Input invalid...\n");
}

for(i=0;i<x;i++)
{
a=(int**)malloc(x*sizeof(int));
a[i]=(int*)malloc(y*sizeof(int));
}
printf("依次赋值\n");
for(i=0;i<x;i++)
{
for (j=0;j<y;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<x;i++)
{
for (j=0;j<y;j++)
printf("%d",a[i][j]);
printf("\n");
}
return 0;
}

第1个回答  2014-06-10
#include<stdio.h>
#include<stdlib.h>
void change(int**p ,int x, int y)
{
  int *max,*min,i,j;
    max = min = *p;
      for(i=0;i<x;i++)
        for (j=0;j<y;j++)
            if(*max<*(*(p+i)+j)) max = *(p+i)+j;
       i = **p;
       **p = *max;
       *max = i;
        for(i=0;i<x;i++)
        for (j=0;j<y;j++)
            if(*min>*(*(p+i)+j)) min = *(p+i)+j;
       i = *(*(p+x-1)+j-1);
      *(*(p+x-1)+j-1) = *min;
      *min = i;
}
main()
{
    int i,j,x,y,**a;
    printf("输入数组行,列  \n");
    scanf("%d,%d",&x,&y);
    if (x<=0||y<=0)
    {
        printf("Input invalid...\n");
    }
    a=(int**)malloc(x*sizeof(int));
    for(i=0;i<x;i++)
    {
        a[i]=(int*)malloc(y*sizeof(int));
    }
    printf("依次赋值\n");
    for(i=0;i<x;i++)
    {
        for (j=0;j<y;j++)
            scanf("%d",&a[i][j]);
    }
    change(a,x,y);
        for(i=0;i<x;i++)
    {
        for (j=0;j<y;j++)
            printf("%d",a[i][j]);
        printf("\n");
    }
        return 0;
}

现在测试通过

第2个回答  2014-06-10
我用C++写可以吗?追问

可以的,就是c或c++,帮帮忙,谢谢

追答

再问个问题,你是要排序还是 只要第一个元素 和 最后一个元素兑换?

追问

题目就是问题,最后是达到题目要求就行,

追答

const int N = 9;
void fn(int n[N][N])
{
int* min, *max;
min = &n[0][0], max = & n[0][0];
for(int i = 0; i *max) max = &n[i][j];
}
int temp;
temp = n[0][0]; n[0][0] = *min; *min = temp;
temp = n[N - 1][N - 1]; n[N - 1][N - 1] = *max; *max = temp;
cout << n[0][0] << " " << n[N - 1][N - 1] << endl;
}
int main()
{
srand(time(0));
int i, j, n[N][N];
for(i = 0; i < N; i++) for(j = 0; j < N; j++) n[i][j] = rand() % 10000;//输入数据
fn(n);
return 0;
}
//有指针,有函数,

追问

谢谢你啦

第3个回答  2014-06-10
#include<stdio.h>
#define N 20
#define M 10
void exmax(int a[N][M])
{ int i,j,max,*p;
max=a[0][0]; p=&a[0][0];
for ( i=0;i<N;i++ ) for ( j=0;j<M;j++ ) if ( max<a[i][j] ) { max=a[i][j]; p=&a[i][j]; }
*p=a[0][0]; a[0][0]=max;
}
void exmin(int a[N][M])
{ int i,j,min,*p;
min=a[0][0]; p=&a[0][0];
for ( i=0;i<N;i++ ) for ( j=0;j<M;j++ ) if ( min>a[i][j] ) { min=a[i][j]; p=&a[i][j]; }
*p=a[N-1][M-1]; a[N-1][M-1]=min;
}
void main()
{ int i,j,,a[N][M];
for ( i=0;i<N;i++ ) for ( j=0;j<M;j++ ) scanf("%d",&a[i][j]);
exmax(a);
exmin(a);
for ( i=0;i<N;i++,printf("\n") ) for ( j=0;j<M;j++ ) printf("%d ",&a[i][j]);
}追问

谢谢

本回答被网友采纳
相似回答