C语言编程实现2*3的矩阵转置

#include "stdio.h"
void main()
{ void zhuan(int array[2][3],int b[3][2]);
int array[2][3],b[3][2];
int i,j;
printf("input:\n");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{scanf("%d",&array[i][j]);}
printf("\n");
zhuan(array,b);
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d",b[j][j]);
printf("\n");
}
}

void zhuan(int array[2][3],int b[3][2])
{ int i,j,t;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
t=array[i][j];
array[i][j]=b[j][i];
b[j][i]=t;
}
}
这个程序运行结果根本不对,谁能告诉我我哪里写错了?QAQ

#include<iostream>

usingnamespacestd;

voidzhuangzhi(inta[3][3])

{intm,n,i;

for(m=0;m<2;m++)

for(i=0;i<3;i++)

{if(m!=1||i!=0)

{n=a[i][m];

a[i][m]=a[m][i];

a[m][i]=n;

intmain()

inta[3][3];

inti,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

cin>>a[i][j];

zhuangzhi(a);

for(i=0;i<3;i++)

for(j=0;j<3;j++)

cout<<a[i][j]<<"";

cout<<endl;

return0;

cout&lt;&lt;"处理后的矩阵:"&lt;&lt;endl;

for(i=0;i&lt;3;i++)//输出处理后的矩阵

for(j=0;j&lt;3;j++)

cout&lt;&lt;setw(5)&lt;&lt;a&lt;i&gt;[j];

cout&lt;&lt;endl;

return0;

//交换函数

voidmove(int*pointer)

inti,j,t;

for(i=0;i&lt;3;i++)

for(j=i;j&lt;3;j++)

t=*(pointer+3*i+j);//这是关键将矩阵转置的条件

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

运行效果:

扩展资料:

在C语言或C++中,会把用来#include的文件的扩展名叫.h,称其为头文件

#include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。在现行的c++版本中,应用这个头文件应是#include<stdio.h>

stdio 就是指 “standard input & output"(标准输入输出)所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!

例如c语言中的 printf("%d",i); scanf("%d",&i);等函数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-06
#include "stdio.h"
void main()
{  
void zhuan(int array[2][3],int b[3][2]);
 int array[2][3],b[3][2];
 int i,j;
 printf("input:\n");
 for(i=0;i<2;i++)
 for(j=0;j<3;j++)
 {scanf("%d",&array[i][j]);}
 printf("\n");
 zhuan(array,b);
 printf("\n");
 for(i=0;i<3;i++)
 {
  for(j=0;j<2;j++)
  printf("%d",b[i][j]);
  printf("\n");
 }
}

void zhuan(int array[2][3],int b[3][2])
{    
int i,j,t;
 for(i=0;i<2;i++)
 for(j=0;j<3;j++)
 {
  b[j][i]=array[i][j];
 }
}

或者更简单:

#include "stdio.h"
void main()
{  
 int a[2][3];
 int i,j;
 printf("input:\n");
 for(i=0;i<2;i++)
   for(j=0;j<3;j++)
     scanf("%d",&a[i][j]);
 printf("\n\n");
 for(i=0;i<3;i++)
 {
   for(j=0;j<2;j++)
     printf("%d",a[j][i]);
   printf("\n");
 }
}

追问

这个是第一个程序的运行结果,还是不对。

我想要有子函数的,简单的我知道的。所以我想知道你的第一个答案哪里错了

第2个回答  推荐于2017-11-26
#include "stdio.h"
void main()
{
void zhuan(int array[2][3],int b[3][2]);
int array[2][3],b[3][2]; int i,j;
printf("input:\n");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
scanf("%d",&array[i][j]);
}
printf("\n");
zhuan(array,b);
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d",b[i][j]);
printf("\n");
}
}
void zhuan(int array[2][3],int b[3][2]) //转置函数逻辑错误,没那么麻烦,直接转就是了!
{
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
b[j][i]=array[i][j];
}
}追问

我复制你的代码,然后运行了一下,就成图上这样子了,还是不对啊

追答

没错呀?虽然你输入的样子好像是跟三行两列的矩阵,但实际上你定义的是个两行散列的矩阵呀!转置后不就成了一个三行两列的矩阵了?

本回答被提问者采纳
第3个回答  2013-12-06
#include<stdio.h>

void main()
{
int array[2][3],b[3][2];
int i,j;
printf("input:\n");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{scanf("%d",&array[i][j]);}
printf("\n");

int t;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
t=array[i][j];
array[i][j]=b[j][i];
b[j][i]=t;
}

printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d ",b[i][j]);
printf("\n");
}

}追问

我想要有子函数的^ ^