我的答案:
#include <stdio.h>
#define N 10
void Transpose(int (*a)[N], int n);
void Swap(int *x, int *y);
void InputMatrix(int (*a)[N], int n);
void PrintMatrix(int (*a)[N], int n);
void InputMatrix(int (*a)[N], int n)
{
int i,j;
for(i = 0;i < n ;i++)
{
for(j = 0;j < n; j++)
{
scanf("%d",&a[i*n + j]);
}
}
}
void Transpose(int (*a)[N], int n)
{
int i,j;
for(i = 0;i < n ;i++)
{
for(j = 0;j < n; j++)
{
Swap(&a[i*n + j], &a[j*n + i]);
}
}
}
void Swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
PrintMatrix(int (*a)[N], int n)
{
int i,j;
for(i = 0;i < n ;i++)
{
for(j = 0;j < n ; j++)
{
printf("%d\t", *a[i*n + j]);
}
printf("\n");
}
}
int main()
{
int n,s[N][N];
printf("Input n:");
scanf("%d",&n);
printf("Input %d*%d matrix:\n",n,n);
InputMatrix( s, n);
Transpose( s, n);
printf("The transposed matrix is:\n");
PrintMatrix( s, n);
return 0;
}
请问哪里错了?该怎么改?
把 Transpose这个函数改为
void Transpose(int(*a)[N], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = i+1; j < n; j++) //第二部分这里的循环开始应该变为i,应该是上三角和下三角换,你之前写的就是换了一遍又换回来了,所以无效
{
Swap(a[i*n+j], a[j*n+i]); //本来就是指针,没有必要加&
}
}
}
还有PrintMaxtrix函数前 没加void
scanf("%d",&a[i*n + j]);
这里乘以小n肯定错了,应该是大N
PrintMatrix(int (*a)[N], int n)
这里没有返回值void的写法,turbo c可以,vc++不可以
for(j = 0;j < n; j++)
->
for(j = 0;j < i; j++)
这里颠倒一半就可以了,否则又交换回来了
别的地方没有仔细看
最后一个,P开头那句话开头没有加void