
C语言:一个二维矩阵转置的问题
Q:下面这个程序的目的是实现一个3X3的二维矩阵转置,例如输入:123456789转置后:147258369下面的代码编译完全通过无错,但是实际输入数字试验发现不能实现转...
Q:下面这个程序的目的是实现一个3X3的二维矩阵转置,例如输入:
123
456
789
转置后:
147
258
369
下面的代码编译完全通过无错,但是实际输入数字试验发现不能实现转置功能,又找不出逻辑上的错误,所以请高手赐教,回答满意者可以加分滴:)
_______________________________________________________________
代码如下:
int Array[3][3];
takePlace(int Array[3][3])
{int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{t=Array[i][j];Array[i][j]=Array[j][i];Array[j][i]=t;}}
main()
{int i,j;
int n=0;
printf("please enter 9 numbers:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%d",&Array[i][j]);
printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");}
printf("Now,change the position of Array.......\n");
takePlace(Array);
n=0;
printf("The result of change:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
} 展开
123
456
789
转置后:
147
258
369
下面的代码编译完全通过无错,但是实际输入数字试验发现不能实现转置功能,又找不出逻辑上的错误,所以请高手赐教,回答满意者可以加分滴:)
_______________________________________________________________
代码如下:
int Array[3][3];
takePlace(int Array[3][3])
{int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{t=Array[i][j];Array[i][j]=Array[j][i];Array[j][i]=t;}}
main()
{int i,j;
int n=0;
printf("please enter 9 numbers:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%d",&Array[i][j]);
printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");}
printf("Now,change the position of Array.......\n");
takePlace(Array);
n=0;
printf("The result of change:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
} 展开
2个回答
展开全部
takePlace里的循环写错了,j循环应该是
for (j=i;j<3;j++)
你那个写的交换了2遍,又变回原来的了。
#include <stdio.h>
int Array[3][3];
void takePlace( )
{
int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
t=Array[i][j];
Array[i][j]=Array[j][i];
Array[j][i]=t;
}
}
int main()
{
int i,j;
int n=0;
printf("please enter 9 numbers:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",&Array[i][j]);
printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
printf("Now,change the position of Array.......\n");
takePlace( );
n=0;
printf("The result of change:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
}
for (j=i;j<3;j++)
你那个写的交换了2遍,又变回原来的了。
#include <stdio.h>
int Array[3][3];
void takePlace( )
{
int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
t=Array[i][j];
Array[i][j]=Array[j][i];
Array[j][i]=t;
}
}
int main()
{
int i,j;
int n=0;
printf("please enter 9 numbers:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",&Array[i][j]);
printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
printf("Now,change the position of Array.......\n");
takePlace( );
n=0;
printf("The result of change:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
}
展开全部
正确的程序如下:(我已运行过)
#include<iostream.h>
#include<stdio.h>
int Array[3][3];
void main()
{int i,j;
int n=0;
printf("please enter 9 numbers:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&Array[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf("%d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");}
printf("Now,change the position of Array.......\n");
n=0;
printf("The result of change:\n");
for(j=0;j<3;j++)
for(i=0;i<3;i++)
{printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
}
需要说明一下的是:你的takePlace函数,不能达到你想要的效果,可以这样理解吧:你只是造了个临时函数,那里边有的也仅是临时变量,当takePlace 函数运行完之后,临时变量就都释放掉了,你原来的数组并没有任何变化,有变化仅仅在那个临时函数里!!!希望我的回答能对你有所帮助
#include<iostream.h>
#include<stdio.h>
int Array[3][3];
void main()
{int i,j;
int n=0;
printf("please enter 9 numbers:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&Array[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf("%d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");}
printf("Now,change the position of Array.......\n");
n=0;
printf("The result of change:\n");
for(j=0;j<3;j++)
for(i=0;i<3;i++)
{printf("%3d",Array[i][j]);
n+=1;
if(n%3==0)
printf("\n");
}
}
需要说明一下的是:你的takePlace函数,不能达到你想要的效果,可以这样理解吧:你只是造了个临时函数,那里边有的也仅是临时变量,当takePlace 函数运行完之后,临时变量就都释放掉了,你原来的数组并没有任何变化,有变化仅仅在那个临时函数里!!!希望我的回答能对你有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询