#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);
}
}
}
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 生成】
这段代码中有一些问题导致了功能不能正常运行,需要进行以下优化:
#define MAX_ROW 10
#define MAX_COL 20
Transpose()
函数的参数类型为指向二维数组的指针。void Transpose(int a[][MAX_COL], int at[][MAX_ROW], int m, int n);
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];
}
}
}
main()
函数中,修改对 Transpose()
函数的调用,传入正确的参数。Transpose(a, at, m, n);
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];
}
}
}
经过上述优化后的代码可以正常运行并获得正确的输出。
【相关推荐】
仅供参考,谢谢!
#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];
}