C语言——矩阵转置

这篇具有很好参考价值的文章主要介绍了C语言——矩阵转置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

矩阵转置的原理:行元素变成列元素,列元素变成行元素

例如:

矩阵转置代码 

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

//矩阵转置
double** Matrix_T(double** arr)
{
    if(arr==NULL)exit(-1);
	int row = (int)_msize(arr) / (int)sizeof(double*);
	int col = (int)_msize(*arr) / (int)sizeof(double);
	double** T = (double**)malloc(sizeof(double*) * col);
	int i = 0;
	int j = 0;
	if (T != NULL)
	{
		for (i = 0; i < col; i++)
		{
			T[i] = (double*)malloc(sizeof(double) * row);
		}
	}
	for (i = 0; i < col; i++)
	{
		for (j = 0; j < row; j++)
		{
			T[i][j] = arr[j][i];
		}
	}
	return T;
}

上述代码中:

  • 首先判断传入指针是否为空
  • 然后判断矩阵的维数,这部分在C语言判断矩阵维数中有详细讲解
  • 为转置后的矩阵开辟空间
  • 进行矩阵装置,行列互换传参 

上述方法使用的是malloc开辟的矩阵,该方法相对于用二维数组存储矩阵有以下几种优势:

1)函数传参时不用输入行列,只需传入指针

2)矩阵的大小可以未知,矩阵维数可以更改

3)不需要宏定义,程序可移植性高

malloc开辟矩阵的代码如下:

double** Make_Matrix(int row, int col)
{
	int i, j;
	double** arr = (double**)malloc(sizeof(double*) * row);
	if (arr != NULL)
	{
		for (i = 0; i < row; i++)
		{
			arr[i] = (double*)malloc(sizeof(double) * col);
		}
	}
	return arr;
}

该方法在C语言malloc开辟矩阵中有详细介绍。 

测试:

为了方便测试,再加入初始化矩阵和打印矩阵两个函数

初始化函数 

void Init_Matrix(double** arr)
{
	int i, j;
	int row = (int)_msize(arr) / (int)sizeof(double*);
	int col = (int)_msize(*arr) / (int)sizeof(double);
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			arr[i][j] = pow(i,j);
		}
	}
}

 为了更加直观,让每个元素等于 i 的 j 次方

打印函数 

//打印矩阵
void print(double** arr)
{
	putchar('\n');
	int i, j, row, col;
	row = (int)_msize(arr) / (int)sizeof(double*);
	col = (int)_msize(*arr) / (int)sizeof(double);
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf("%8.3lf ", arr[i][j]);
		}
		putchar('\n');
	}
}

主函数测试 

int main()
{
	int i = 3;
	int j = 5;
	double** arr = Make_Matrix(i, j);
	Init_Matrix(arr);
	double** res = Matrix_T(arr);
	printf("原矩阵:>");
	print(arr);
	printf("逆矩阵:>");
	print(res);
	return 0;
}

C语言——矩阵转置文章来源地址https://www.toymoban.com/news/detail-421842.html

到了这里,关于C语言——矩阵转置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】矩阵转置

    题目描述 输入一个n行m列的矩阵A,输出它的转置AT。 输入 第一行包含两个整数n和m,表示矩阵A的行数和列数(1≤n≤100,1≤m≤100)。 接下来n行,每行m个整数,表示矩阵A的元素。相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。 输出 m行,每行n个整数,为矩阵A的

    2024年02月05日
    浏览(36)
  • C语言对矩阵进行转置

    对矩阵进行转置最重要的是值的交换,这里用到了二重数组  这是代码结果 与君共勉

    2024年02月04日
    浏览(46)
  • C语言 : 矩阵转置 (二维数组)

    输入N*N的矩阵,输出它的转置矩阵。矩阵的转置操作,即把矩阵的行元素变为列元素、列元素变为行元素的过程。    第一行为整数N,接着是一个N*N的矩阵。 转置矩阵。 输入样例 1 输出样例 1 解题思路: 输入二维数组。(用到for循环) 将二维数组的行与列互换。(需要两

    2024年01月21日
    浏览(47)
  • 矩阵转置(函数)(C语言实现)

    【题目描述】 写一个函数,将一个n*n(n10)的二维数组进行转置,即行列交换。要求在主函数中完成输入和输出。 【输入说明】 输入第一行只包括1个数字,表示n,接下来有n行,每行有n个整数。 【输入样例】 3 1 2 7 3 4 8 5 6 9 【输出样例】 1 3 5 2 4 6 7 8 9 代码实现 #inclu

    2024年02月01日
    浏览(102)
  • 数据结构第七周 :(稀疏矩阵快速转置 + 简单文本编辑器 + 三元组的矩阵加法 + 九宫格数独游戏 + 数组主元素 + 螺旋数字矩阵 + 蛇形矩阵)

    【问题描述】 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。而矩阵转置就

    2023年04月21日
    浏览(40)
  • 稀疏矩阵转置算法(C语言)

    (参考数据结构教材,严蔚敏,吴伟民版 p99,多谢阅读,望对您有帮助) 无论是几维的数组,在计算机中都是 以一维数组 的方式进行存储的。 矩阵:相当于 二维数组 ,它的存储,依然是用一维数组的方式进行存储。 nxn的矩阵,在计算机空间上, 需要nxn个空间 。 稀疏矩

    2024年02月01日
    浏览(41)
  • PTA 用C语言实现矩阵转置

    编写函数,求一个3×3矩阵的转置矩阵。 转置矩阵,将原矩阵的行变为列,列变为行。注意,通过指针访问二维数组时的方法。本题采用的是指向数组元素的指针变量。 void Trans(int(*p)[3])函数调用分析: 只有三种情况: i=1,j=0 (1,0)-(0,1) i=2,j=0 (2,0)-(0,2) i=2,j=1 (2,1)

    2024年02月05日
    浏览(47)
  • R语言矩阵、向量操作(矩阵乘法,向量内积、外积(叉乘),矩阵转置,矩阵的逆)

    创建两个四维矩阵 A 与 B,A 按列填充,B 按行填充 : 创建两个 n 维向量 x 和 y : 使用 t(矩阵、向量名) 即可: 输出如下: 使用 %*% 符号即可: 输出如下: 在R语言中,两个矩阵、向量的内积并不只是简单的 * 号就完事了,而是有以下两种求法: 或者 其结果如下: (注意区分

    2024年02月12日
    浏览(32)
  • C语言输出矩阵及其转置矩阵以及他们和的矩阵案例讲解

    思路分析 1.本题需要打印输出3个矩阵,分别是初始化矩阵,矩阵转置,以及他们的和的矩阵。 2.本题需要大一数学《线性代数》关于矩阵,矩阵的转置以及矩阵和的知识点作为基础。本文不做数学知识点讲解。 3,我们以3行3列矩阵举例进行讲解。 案例代码如下 代码运行结果

    2024年02月16日
    浏览(41)
  • 37-C语言-输入n*n的矩阵,并进行矩阵转置

    问题: 输入一个n*n的矩阵,之后输出转置后的内容 思路: 输入n*n矩阵——需要定义一个a[100][100]的矩阵,在这之内去填写所要求的的矩阵。( 这里也可用动态数组的形式,进行初始化,但没要求动态数组,不熟练的话,尽量不写,嗯,为了考试写的文章 【0—0】 )。 最好

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包