这个是哪里出了问题看半天没看出来


#include<stdio.h>
#include<stdlib.h>
void Transpose(int *a,int *at,int m,int n);
int main(void)
{int n,i,j,m;
int a[10][20],at[20][10];
printf("请输入n和m值");
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{scanf("%d",&a[i][j]);}
}
Transpose(*a,*at,m,n);
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
{printf("%d ",at[i][j]);
}
}
}
void Transpose(int *a,int *at,int m,int n)
{int i,j;
int temp;
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{

 *(at+j*20+i)=*(a+i+j*20);
}
}
}

img

int a[10][20],at[20][10];
->

int a[20][20],at[20][20];

修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
void Transpose(int *a,int *at,int m,int n);
int main(void)
{
    int n,i,j,m;
    int a[10][20],at[20][10];
    printf("请输入n和m值");
    scanf("%d",&n);
    scanf("%d",&m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    Transpose(*a,*at,m,n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ",at[i][j]);
        }
        printf("\n"); // 修改
    }
    return 0;
}
void Transpose(int *a,int *at,int m,int n)
{
    int i,j;
    int temp;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            *(at+j*10+i)=*(a+i*20+j); //*(at+j*20+i)=*(a+i+j*20); 修改
        }
    }
}

【以下回答由 GPT 生成】

这段代码中有一些问题导致了功能不能正常运行,需要进行以下优化:

  1. 首先,将矩阵的行数和列数定义为常量,以便于在程序中修改这些值。
#define MAX_ROW 10
#define MAX_COL 20
  1. 修改 Transpose() 函数的参数类型为指向二维数组的指针。
void Transpose(int a[][MAX_COL], int at[][MAX_ROW], int m, int n);
  1. 修改 Transpose() 函数的代码,将矩阵转置的结果存储在 at 数组中。
void Transpose(int a[][MAX_COL], int at[][MAX_ROW], int m, int n) {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            at[j][i] = a[i][j];
        }
    }
}
  1. main() 函数中,修改对 Transpose() 函数的调用,传入正确的参数。
Transpose(a, at, m, n);
  1. main() 函数的最后,添加缺失的换行符。
printf("\n");

最终的代码如下所示:

#include <stdio.h>
#include <stdlib.h>

#define MAX_ROW 10
#define MAX_COL 20

void Transpose(int a[][MAX_COL], int at[][MAX_ROW], int m, int n);

int main(void) {
    int n, i, j, m;
    int a[MAX_ROW][MAX_COL], at[MAX_COL][MAX_ROW];

    printf("请输入n和m值:");
    scanf("%d", &n);
    scanf("%d", &m);

    printf("请输入矩阵a:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    Transpose(a, at, m, n);

    printf("转置后的矩阵at:\n");
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", at[i][j]);
        }
        printf("\n");
    }

    return 0;
}

void Transpose(int a[][MAX_COL], int at[][MAX_ROW], int m, int n) {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            at[j][i] = a[i][j];
        }
    }
}

经过上述优化后的代码可以正常运行并获得正确的输出。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

仅供参考,谢谢!

img

img


#include<stdio.h>
//#include<stdlib.h>

void Transpose(int (*a)[], int (*at)[], int m, int n);
int m, n;

int main(void)
{
    int i, j;

    printf("请输入n和m值");
    scanf("%d", &n);
    scanf("%d", &m);

    if (n < 1 || m < 1)
        return -1;

    int a[n][m], at[m][n];

    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            scanf("%d", &a[i][j]);

    Transpose(a, at, m, n);

    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            printf("%d ", at[i][j]);
        puts("");
    }

    puts("");
}

void Transpose(int (*a)[m], int (*at)[n], int m, int n)
{

    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            at[i][j] = a[j][i];
}