生成单位矩阵的方法
有同学需要,就抽十来分钟写了几段,不过只用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");
}
}
这里注意一下下,行列数量的参数row
和cols
是int
类型的,不能超过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);
}
示例运行效果: