会C语言的都来帮个忙吧,看一下这个源程序错在哪?

2024-11-29 21:55:48
推荐回答(3个)
回答1:

算法错误是在change()函数里无意中对p1数组进行了两次转置,导致效果如同未转置一样。

语法错误是在main()函数中的clrscr()函数没有声明,change(*a)这样的调用有误。

其它不妥之处是main()函数应该有返回值,作如下修改:

#include"stdio.h"
int i,j;
void change(int (*p1)[3])
{
int k,a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[j][i]=*(*(p1+i)+j);

for (i = 0; i<3; i++)
for (j=0; j<3; j++)
p1[i][j]=a[i][j];
}
int main(void)
{
void change(int (*p1)[3]);
int a[3][3];

for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("Please input a[%d][%d]:",i,j);
scanf("%d",&a[i][j]);
fflush(stdin);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("\n---->\n");
change(a);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}

回答2:

#include
int i,j;
void change(int (*p1)[3])
{
int k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
k=*(*(p1+i)+j);
*(*(p1+i)+j)=*(*(p1+j)+i);
*(*(p1+j)+i)=k;
}
}
int main()
{
void change(int (*p1)[3]);
int a[3][3];
system("cls");//你那个只在TC下有,建议用我这个
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("Please input a[%d][%d]:",i,j);
scanf("%d",&a[i][j]);
fflush(stdin);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("\n---->\n");
change(a);//这里用a,会自动转换为指针!
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",a[j][i]);//a[j][i]不是a[i][j]要不然不能转秩了!
printf("\n");
}
system("pause");
return 0;
}

回答3:

change(*a);
改成change(a)看看,a本身就是地址还加*
不知道对不对。你自己看着办吧