将一个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