#include<stdio.h> int main() { printf("我是光电12203项琳清\n"); int n; int i,j; printf("请输入方阵的阶数:"); scanf("%d",&n); int a[n][n]; printf("请输入一个%d*%d的方阵:\n",n,n); for(i=0;i<n;i++) { for(j=0;j<n;j++) scanf("%d",&a[i][j]); } printf("转置后的方阵为:\n"); return 0; } void transpose(int (*a)[3],int n) { int i,j,temp; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { temp=*(*(a+i)+j); *(*(a+i)+j)=*(*(a+j)+i); *(*(a+j)+i)=temp; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d",*(a+i)+j); } }程序错在哪
时间: 2024-01-27 22:04:15 浏览: 20
程序有两个问题:
1. 函数 `transpose` 中的参数 `int (*a)[3]` 是固定大小的二维数组,但是在 `main()` 函数中定义的数组 `a` 的大小是用户输入的,所以参数应该改为 `int (*a)[n]`。
2. 在输出转置后的矩阵时,应该使用 `printf("%d ",a[i][j]);` 而不是 `printf("%d",*(a+i)+j);`,因为后者会将 `*(a+i)` 看成一个整数指针,加上 `j` 之后指向错误的位置。
下面是修改后的代码:
```c
#include<stdio.h>
void transpose(int (*a)[],int n) {
int i,j,temp;
for(i=0;i<n;i++) {
for(j=i+1;j<n;j++) {
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
printf("转置后的方阵为:\n");
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
int main() {
printf("我是光电12203项琳清\n");
int n;
int i,j;
printf("请输入方阵的阶数:");
scanf("%d",&n);
int a[n][n];
printf("请输入一个%d*%d的方阵:\n",n,n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
transpose(a,n);
return 0;
}
```