设计一个函数,将任意n×n的矩阵转置。在主函数中调用此函数将一个4×4的矩阵转置,并输出转置前、后的矩阵。主函数或子函数中都只允许在一个二维数组中操作。
#include<stdio.h>
void temp(void)
{
int a[4][4];
int i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%d",a[i][j]);
printf("\n");}
}
void main(void)
{
int s[4][4],i,j;
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
scanf("%d",&s[i][j]);
printf("\n");}
temp();
}
为什么我写的这个没结果,请大佬看看错在哪,怎么改?
错误1:
void temp(void),括号里是void,没有形参,因此无法把主函数的实参传给函数的实参。
错误2:
temp();
括号里为空,没有实参,因此无法把主函数的实参传给函数的实参。
错误3:
for(j=0;j<4;j++),i从0到3,j从0到4,等于没有转置,还是原来的数组。
给出正确的代码(在你的程序代码的基础项修改):
#include <stdio.h>
void temp(int a[4][4])
{
int i,j,t;
for(i=0;i<4;i++)
for(j=i;j<4;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");}
}
void main(void)
{
int s[4][4],i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&s[i][j]);
printf("\n");
temp(s);
}
void temp(void),括号里是void,没有形参,因此无法把主函数的实参传给函数的实参。
错误2:
temp();
括号里为空,没有实参,因此无法把主函数的实参传给函数的实参。
错误3:
for(j=0;j<4;j++),i从0到3,j从0到4,等于没有转置,还是原来的数组。
给出正确的代码(在你的程序代码的基础项修改):
#include <stdio.h>
void temp(int a[4][4])
{
int i,j,t;
for(i=0;i<4;i++)
for(j=i;j<4;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");}
}
void main(void)
{
int s[4][4],i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&s[i][j]);
printf("\n");
temp(s);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2017-05-15
s和a数组没有关系
扔到全局数组
#include<stdio.h>
int a[4][4];
void temp(void)
{
int i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%d",a[i][j]);
printf("\n");}
}
void main(void)
{
int i,j;
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("\n");}
temp();
}
扔到全局数组
#include<stdio.h>
int a[4][4];
void temp(void)
{
int i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%d",a[i][j]);
printf("\n");}
}
void main(void)
{
int i,j;
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("\n");}
temp();
}