c语言程序问题 帮忙看看 谢谢了
编写MaxRow函数 求3*3数组每行最大值和对角线上最大值,利用指针。我的哪里错了呢?谢谢
#include<stdio.h>
void main()
{
int *MaxRow(int(*)[3],int*);
int a[3][3],i,j,*b,c[4];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",*(a+i)+j);
b=MaxRow(a,c);
for(i=0;i<4;i++)
printf("%5d",*(b+i));
}
int *MaxRow(int(*p)[3],int*pc)
{
int i,j;
for(i=0;i<3;i++)
{
*pc=**(p+i);
for(j=0;j<3;j++)
if(*pc<*(*(p+i)+j))
*pc=*(*(p+i)+j);
pc++;
}
*pc=**p;
for(i=0;i<3;i++)
if(*pc<*(*(p+i)+i))
*pc=*(*(p+i)+i);
return(pc);
}
答案:#include<stdio.h>
void main()
{
int *MaxRow(int(*)[3],int*);
int a[3][3],i,j,*b,c[4];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",*(a+i)+j);
b=MaxRow(a,c);
for(i=0;i<4;i++)
printf("%5d",*(b+i));
}
int *MaxRow(int(*p)[3],int*pc)
{
int *pbak = pc;//备份指针
int i,j;
for(i=0;i<3;i++)
{
*pc=**(p+i);
for(j=0;j<3;j++)
if(*pc<*(*(p+i)+j))
*pc=*(*(p+i)+j);
pc++;
}
*pc=**p;
for(i=0;i<3;i++)
if(*pc<*(*(p+i)+i))
*pc=*(*(p+i)+i);
return(pbak);//问题出在这,你在前面移动了pc指针,应该返回原始的pc指针
}
其他:#include<stdio.h>
void main()
{
int *MaxRow(int(*)[3],int*);
int a[3][3],i,j,*b,c[4];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",*(a+i)+j);
b=MaxRow(a,c);
for(i=0;i<4;i++)
printf("%5d",*(b+i));
}
int *MaxRow(int(*p)[3],int*pc)
{
int *pbak = pc;//备份指针
int i,j;
for(i=0;i<3;i++)
{
*pc=**(p+i);
for(j=0;j<3;j++)
if(*pc<*(*(p+i)+j))
*pc=*(*(p+i)+j);
pc++;
}
*pc=**p;
for(i=0;i<3;i++)
if(*pc<*(*(p+i)+i))
*pc=*(*(p+i)+i);
return(pbak);
上一个:c语言题目,帮忙写下程序,输出如下图形
下一个:C语言中F[1<<10]什么意思