这个题目怎么写啊,二维数组转置

将一个5×5的整形二維数组进行转置,用函数进行实现。要求在主函数中用scanf函数输入数组元素;将数组0行0列元素的地址作为函数的实參,在执行函数的过程中实现行列互换,函数调用结束后在主函数中输出已转置的二维数组

#include <stdio.h>
void main(){
	int i,j;    
	int t;//临时变量 
	int a[5][5]={
		{1,2,3,4,5},
		{6,7,8,9,10},
		{11,12,13,14,15},
        {16,17,18,19,20},
        {21,22,23,24,25}
	};
	for(i=0;i<5;i++){
		printf("%d\t%d\t%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
	}
	//转换
	for(i=0;i<5;i++){
		for(j=0;j<i;j++){ //对角线下面部分与对角线上面部分数据进行交换 
			t = a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=t;
		}
	} 
	printf("置换后的结果如下:\n"); 
	for(i=0;i<5;i++){
		printf("%d\t%d\t%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
	}
}

#include <stdio.h>
const int N = 5;
 
void Transpose(int *a,int n) {
    int i,j,t;
    for(i = 0; i < n - 1; ++i) {
        for(j = i + 1; j < n; ++j) {
            t = *(a + n * i + j);
            *(a + n * i + j) = *(a + n * j + i);
            *(a + n * j + i) = t;
        }
    }
}
 
void Show(int a[][N]) {
    int i,j;
    for(i = 0; i < N; ++i) {
        for(j = 0; j < N; ++j)
            printf("%d ",a[i][j]);
        printf("\n");
    }
}
 
int main() {
    int a[N][N] = {1,2,3,4,5,6,7,8,9};
    printf("原始矩阵:\n");
    Show(a);
    Transpose(&a[0][0],N);
    printf("转置后:\n");
    Show(a);
    Transpose(a[0],N);
    printf("再转置后:\n");
    Show(a);
    return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632