写一个函数,使给定的一个二维数组(NXM)转置,即行列互换

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<Windows.h>

#define N 3
#define M 3
void rankexchange(int a1[N][M])
{
	int b1[N][M];
	for (int i = 0; i < N;i++)
		for (int j = 0; j < M; j++)
		{
			b1[j][i] = a1[i][j];
		}
	for (int i = 0; i < N; i++)
		for (int j = 0; j < M; j++)
		{
			a1[i][j] = b1[i][j];
		}

}
void main()
{
	int a[N][M] = {
		{ 1, 2, 3 },
		{ 1, 2, 3 },
		{ 1, 2, 3 }
	};
	rankexchange(a);
	for (int i = 0; i < N; i++)//打印结果
	{
		for (int j = 0; j < M; j++)
		{
			printf("%3d", a[i][j]);
		}
		printf("\n");
	}
	system("pause");
}


矩阵就地转置 分数 10 全屏浏览 切换布局 作者 Happyer 单位 湖北文理学院 本函数要求对指定的矩阵(结构参考代码部分)进行就地转置。就地的意思是不再申请额外的数组来转存数据,只在一维数组末多申请了一个单元来作缓存单元。 原则上,每个元素除了交换时要转存到那个临时单元外,移动的次数不应该超过1次。因要统计算法的移动次数,数据移动时,务必调用那个移动函数Mi2j()来完成。 函数接口定义: void fun(struct Mat *M);//矩阵的就地转置(数据限矩阵内部移动:必须调用指定的移动函数) 其中 M 是需要进行转置的矩阵。 裁判测试程序样例: #include "stdio.h" #include "stdlib.h" struct Mat{ int *data;//矩阵的值(一维数组) int row,col;//矩阵的行,列数 }; struct Mat _Mat(int m,int n);//构造函数:返回初始化后的矩阵 测试函数 void output(struct Mat M);//输出矩阵 测试函数 void Mi2j(struct Mat *M,int i,int j);//矩阵内部数据移动请调用本函数 测试函数 void fun(struct Mat *M);//矩阵的就地转置(数据限矩阵内部移动,一维数组的最后专门多加了一个单元用来作临时缓存单元) 这个是任务函数。 int main(){ int m,n;scanf("%d%d",&m,&n); struct Mat A=_Mat(m,n); output(A); fun(&A); output(A); printf(...); return 0; } /* 请在这里填答案 */ 输入样例: 输入正常矩阵的行,列数。例如: 3 5 输出样例: 输出原矩阵及转置后的矩阵,然后是矩阵内移动元素的次数。例如: | 82 26 92 87 89| | 71 88 15 19 43| | 97 95 46 33 97| | 82 71 97| | 26 88 95| | 92 15 46| | 87 19 33| | 89 43 97| moveNum:14 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
最新发布
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值