代码有问题!
问题:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。这是我写的代码:
[code#include<stdio.h>
void chuli(int (*)[]);
int main(void)
{
int a[5][5];
int i,j;
printf("输入一个5*5的矩阵\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
chuli(a);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
return 0;
}
void chuli( int (*point)[5] )
{
int *p=*point;
int i,max,min,n,temp;//max用于记录最大值下标,min用于记录最小值下标
//先将四个最小值放在前四个位置,最大值不作处理,只记录其位置
for(n=0;n<4;n++)
{
min=n;
if(n==0)
max=0;
//找最大值以及最小值
for(i=n;i<25;i++)
{
if( n==0 && *(p+i)>*(p+max) )//最大值只需要找一次
max=i;
if( *(p+i)<*(p+min) )
min=i;
}
//将最小值放在最前面
if(min!=n)
{
temp=*(p+i);
*(p+i)=*(p+min);
*(p+min)=temp;
}
}
//将最大值放在中间
temp=*(*(point+2)+2);
*(*(point+2)+2)=*(p+max);
*(p+max)=temp;
//将4个最小值放在4个角,第一个就不用动了
for(n=3;n>0;n--)
{
temp=*( *(point+(n>1)?4:0) + (n%2)?4:0 );
*( *(point+(n>1)?4:0) + (n%2)?4:0 )=*(p+n);
*(p+n)=temp;
}
}][/code]
下面是错误:
D:\安装包\Microsoft Visual Studio\MyProjects\b\1.cpp(11) : error C2664: 'chuli' : cannot convert parameter 1 from 'int [5][5]' to 'int (*)[]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
D:\安装包\Microsoft Visual Studio\MyProjects\b\1.cpp(59) : error C2100: illegal indirection
D:\安装包\Microsoft Visual Studio\MyProjects\b\1.cpp(59) : error C2100: illegal indirection
D:\安装包\Microsoft Visual Studio\MyProjects\b\1.cpp(59) : error C2106: '=' : left operand must be l-value
执行 cl.exe 时出错.
1.obj - 1 error(s), 0 warning(s)
看了很久,无法解决,特来求助,望大神帮助。