#include<stdio.h>
#include<stdlib.h>
void Transpose(int *a,int n,int c,int b);
int main(void)
{int n,i,j,c,b;
int a[20][20];
printf("请输入n值");
scanf("%d",&n);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{scanf("%d",&a[i][j]);}
}
c=8;
b=9;
Transpose(*a,n,c,b);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{printf("%d ",a[i][j]);
}
}
}
void Transpose(int *a,int n,int c,int b)
{int i,j;
int temp;
for(i=0;i<n;i++)
{for(j=i+1;j<n;j++)
{
temp=a[i*n+j];
a[i*n+j]=a[i+j*n];
a[i+j*n]=temp;
}
}
}
#include<stdio.h>
#include<stdlib.h>
void Transpose(int *a, int n, int c, int b);
int main(void) {
int n, i, j, c, b;
int a[20][20];
printf("请输入n值: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
c = 8;
b = 9;
Transpose((int *)a, n, c, b);
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
void Transpose(int *a, int n, int c, int b) {
int i, j, temp;
for(i = 0; i < n; i++) {
for(j = i + 1; j < n; j++) {
temp = *(a + i * n + j); // 访问二维数组的方式
*(a + i * n + j) = *(a + i + j * n);
*(a + i + j * n) = temp;
}
}
}
修改如下,改动处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
void Transpose(int *a,int n,int c,int b);
int main(void)
{
int n,i,j,c,b;
int a[20][20];
printf("请输入n值");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
c=8;
b=9;
Transpose(a[0],n,c,b); //Transpose(*a,n,c,b); 修改
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n"); //修改
}
return 0;
}
void Transpose(int *a,int n,int c,int b)
{
int i,j;
int temp;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
temp=a[i*20+j]; //a[i*n+j]; 修改
a[i*20+j]=a[i+j*20]; //a[i*n+j]=a[i+j*n]; 修改
a[i+j*20]=temp; //a[i+j*n] 修改
}
}
}
【以下回答由 GPT 生成】
问题分析: 这个C语言程序的问题在于对于传递矩阵a的方式有误。矩阵a在主函数中定义为int a[20][20],而在Transpose函数中传递的是一个int类型指针,在计算转置矩阵时会导致指针偏移的错误。
解决方案: 修改Transpose函数的传参方式,使用二维数组指针传递矩阵a,并进行相应的修改。
#include<stdio.h>
#include<stdlib.h>
void Transpose(int a[][20], int n);
int main(void)
{
int n, i, j;
int a[20][20];
printf("请输入n值:");
scanf("%d", &n);
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
{
scanf("%d", &a[i][j]);
}
}
Transpose(a, n);
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
}
void Transpose(int a[][20], int n)
{
int i, j;
int 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;
}
}
}
以上是已经修正后的代码,修复了矩阵传递的问题。在Transpose函数中,参数a变为int a[][20],即使用二维数组指针传递矩阵a。主函数中调用Transpose函数时,直接传递矩阵a和n的值即可。最后通过两次循环打印出转置后的矩阵。
请注意,在修复代码后记得重新编译运行程序,可以得到正确的输出结果。
【相关推荐】