热心网友
回答时间:2024-05-17 20:49
在你自定义的“int jiaohuan(int a[3][3] )”函数中,你确实做到了转置,但是你将转置得的数组存放在了b[3][3]中,并且原数组没变。而你输出的就是原数组,自然不会成功。
2种改法:1.在“int jiaohuan(int a[3][3] )”中最后添加一个将b[3][3]数组复制到a[3][3]数组中。
2.将自定义函数改为“int jiaohuan(int a[3][3],int b[3][3])”,内部不用在定义b[3][3]数组;然后在主程序中多定义一个int d[3][3],调用函数为jiaohuan(c,d),最后改成输出d[3][3]这个数组即可
还有一个小点不太确定,个人觉得既然你不是需要返回一个值去进行赋值运算,是实现功能,最好自定义函数为void型,别用int
收起
热心网友
回答时间:2024-05-17 20:49
你在交换函数中,将交换之后的数据保存进了b[3][3]二维数组中,而二维数组b是一个jiaohuan函数的局部变量,当该函数执行完之后,并没有将交换后的结果返回给主函数,当然在主函数中输出结果没有任何改变。可将交换程序做如下更改:
int jiaohuan(int a[3][3] )
{
int i, j, n, b[3][3];
for( i = 0; i < 3; i++ )
for( j = 0; j < 3; j++)
b[j][i] = a[i][j];
/* 添加如下部分 */
for( i = 0; i < 3; i++ )
for( j = 0; j < 3; j++)
a[i][j] = a[i][j];
}
但是这个还是不能达到您的要求,因为经过这个算法之后,a[0][0]和a[2][2]这两个数值的位置还是没有变化。具体应该怎么完善,你自己想想吧,多动动脑,多调试,编程能力才能有所提高。
收起
热心网友
回答时间:2024-05-17 20:50
原因很简单,在jiaohuan 函数中,你最后并没有把值重新赋给a啊!
int jiaohuan(int a[3][3] )
{
int i, j, n, b[3][3];
for( i = 0; i < 3; i++ )
for( j = 0; j < 3; j++)
b[j][i] = a[i][j];
//按照你的思路,在这里应当把值赋给a,现在b里面是你想要的内容
for(i = 0; i < 3; i++)
for(j = 0; j < 3;j++)
a[i][j] = b[i][j];
}
收起
热心网友
回答时间:2024-05-17 20:51
只要更改一下jiaohuan函数就可以,修改如下:
void jiaohuan(int a[3][3] )
{
int i, j, n;
for( i = 0; i < 3; i++ )
for( j = 0; j < i; j++)//这里j不需要到3,只需要不大于i就可以,否则数据会再一次换回来的
{
n=a[i][j];
a[i][j]=a[j][i];
a[j][i]=n;
}
}
收起
热心网友
回答时间:2024-05-17 20:51
你的交换函数只是把交换后的数组存在了b数组中,但是交换函数调用完以后,b数组就被释放了,根本没有传出来,而交换函数对c数组没有做任何更改,输出结果当然是原样。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。
收起