C语言 生成单位矩阵(低耦合 可重用)

生成单位矩阵的方法

有同学需要,就抽十来分钟写了几段,不过只用int类型做了示例demo


一、生成矩阵的组件


就两个,获取和显示:

1 显示:ArrayInit(int rows, int cols, int* mat[])
2.1 获取矩阵:GetMagicMat(int magicNum, int size)
2.2 包含初始化:ArrayInit(int rows, int cols, int* mat[])

二、实现


首先解决矩阵的显示问题,这个比较简单,注意格式和范围就好:

#include <iostream>
/* show the elems of any matix
  Notice: the matrix must obey size< (2^(sizeof(int)*8))*(2^(sizeof(int)*8)) */
void ShowMatrix(int rows,int cols,int* mat[])
{
	for (int i = 0;i < rows;i++) {
		for (int j = 0;j < cols;j++) {
			printf("%d\t",mat[i][j]);
		}
		printf("\n");
	}
}

这里注意一下下,行列数量的参数rowcolsint类型的,不能超过2^(sizeof(int)*8),也即2的32次方。


然后是获取单位矩阵,这个代码实现支持magic matrix的生成,斜对角上可以填任意合适的数字:

/* Just as the function identifier shows */
int** GetMagicMat(int magicNum, int size)
{
	/* Get space then init  */
	int** eye = (int**)malloc(size * sizeof(int));
	for (int i = 0;i < size;i++) {
		eye[i] = (int*)malloc(size * sizeof(int));
	}
	ArrayInit(size,size,eye);
	/* fill the space */
	int j = 0;
	for (int i = 0;i < size;i++) {
		eye[i][j++] = magicNum;
	}	
	return eye; 
}

其中,magicNum是你指定的角线上的数字,size是方针的行数(=列数)。


当然,GetMagicMat(int magicNum, int size)里面调用了矩阵的初始化函数,实现如下:

/* Init a array<int> with zero */
void ArrayInit(int rows, int cols, int* mat[])
{
	for (int i = 0;i < rows;i++) {
		for (int j = 0;j < cols;j++) {
			mat[i][j] = 0;
		}
	}
}

也就是全部填充为0


当然 ,两三个函数还是不够精简,封装成一个函数,方便使用:

/* What you do really want */
void GetMagicAndShow(int size, int magicNum)
{
	int** eyex;
	eyex = GetMagicMat(magicNum, size);
	ShowMatrix(size, size, eyex);
}

示例:生成一个4×4大小,斜对角上为1的方阵

int main()
{
	int** eyex;
	int size = 4;
	const int magicNumber = 1;
	printf("Please set the size(<2^32) of the matix:");
	scanf_s("%d",&size);
	GetMagicAndShow(size, magicNumber);
}

示例运行效果:在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值