首页后端开发其他后端知识C语言中如何实现矩阵,方法是什么

C语言中如何实现矩阵,方法是什么

时间2024-03-28 10:12:03发布访客分类其他后端知识浏览1473
导读:关于“C语言中如何实现矩阵,方法是什么”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“C语言中如何实现矩阵,方法是什...
关于“C语言中如何实现矩阵,方法是什么”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“C语言中如何实现矩阵,方法是什么”吧。

目录
  • C语言实现矩阵
  • 特殊矩阵
  • 特殊矩阵验证

C语言实现矩阵

矩阵作为一个结构体而言,至少要包含行数、列数以及数据。

#include stdio.h>
    
#include stdlib.h>
    
#include string.h>

typedef struct{
    
    int row, col, size;
    
    double *data;

}
     Matrix;
    

特殊矩阵

接下来通过这个结构体实现一些特殊的矩阵,例如包括相同元素的矩阵、对角矩阵等。

#define SetBase(mat) \
    (Matrix*)malloc(sizeof(Matrix));
    \
    mat->
    row = row;
    \
    mat->
    col = col;
    \
    mat->
    size = row*col;
    \
    mat->
    data = (double*)malloc(mat->
size*sizeof(double))
//特殊矩阵
Matrix* Sames(double n, int row, int col){
    
    Matrix* mat = SetBase(mat);
    
    for (int i = 0;
     i  mat->
    size;
     i++)
        mat->
    data[i]=n;
    
    return mat;
    
}

#define Ones(row,col) Sames(1,row,col)
#define Zeros(row,col) Sames(0,row,col)
Matrix* Diag(double n, int row, int col){
    
    Matrix* mat = Sames(0,row,col);
    
    for (int i = 0;
     i  min(row,col) ;
     i++)
        mat->
    data[i*col+i] = n;
    
    return mat;

}

#define Eye(row,col) Diag(1,row,col)
Matrix* CountMatrix(int row, int col){
    
    Matrix* mat = SetBase(mat);
    
    for (int i = 0;
     i  mat->
    size;
     i++)
        mat->
    data[i]=i;
    
    return mat;

}

//生成[L,R]范围内的随机矩阵
Matrix* RandMat(int row,int col, double L, double R){
    
    Matrix* mat = SetBase(mat);
    
    int size=R-L;
    
    for (int i = 0;
     i  mat->
    size;
     i++)
        mat->
    data[i] = rand()%size+L;
    
    return mat;

}

特殊矩阵验证

由于要识别输入的函数,所以先新建一个函数的结构体

typedef struct{
    
    char* name;
    
    int len;
    
    int numPara;
                    //参数个数
    double params[MAXLEN];
      //参数列表
}
    Func;

然后通过字符串来生成Func

//用于识别函数
void initFunc(Func* func,char* str){
    
    int i = -1;
    
    int j = 0;

    while(str[++i]!='('){
}
    
    func->
    len = i;
    
    func->
    name = (char*)malloc(sizeof(char)*func->
    len);
    
    for (j = 0;
     j  i;
     j++)
        func->
    name[j] = str[j];
    
    func->
    name[i] = '\0';
    
    int start = ++i;
    
    char temp[MAXLEN];
    
    j = 0;
    
    while (str[i]!=')')
    {

        if(str[i]==','){
    
            temp[i-start]='\0';
    
            start = i+1;
    
            func->
    params[j]=atof(temp);
    
            j++;

        }
    else
            temp[i-start]=str[i];
    
        i++;

    }
    
    temp[i-start]='\0';
    
    func->
    params[j]=atof(temp);
    
    func->
    numPara = j+1;

}

接下来需要实现打印矩阵的函数

void printMat(Matrix* mat){
    
    printf("mat:");
    
    printf("%dx%d=%d\n",mat->
    col,mat->
    row,mat->
    size);
    
    for (int i = 0;
     i  mat->
    size;
 i++)
    {
    
        printf("%f,",mat->
    data[i]);
    
        if((i+1)%mat->
    col==0)
            printf("\n");

    }

}

最后是main函数

int isFunc(Func* func, char* str){
    
    for (int i = 0;
     i  func->
    len;
 i++)
    {
    
        if(func->
    name[i]!=str[i])
            return FALSE;
    
        if(str[i]=='\0')
            return FALSE;

    }
    
    return TRUE;

}
    
#define intPara (int)func->
    params
#define floatPara func->
    params
//#define isFunc(str) strcmp(func->
name,str)
int main(){
    
    //char* str = (char*)malloc(sizeof(char) * MAXLEN);
    
    char str[MAXLEN];
    
    Matrix* mat = NULL;
    
    Func* func = (Func*)malloc(sizeof(func));

    while(1)
    {
    
        printf("please input:");
    
        gets(str);
    
        initFunc(func,str);
    
        if(isFunc(func,"Sames"))
            mat = Sames(floatPara[0],intPara[1],intPara[2]);
    
        else if(isFunc(func,"Ones"))
            mat = Ones(intPara[0],intPara[1]);
    
        else if(isFunc(func,"Zeros"))
            mat = Zeros(intPara[0],intPara[1]);
    
        else if(isFunc(func,"Diag"))
            mat = Diag(floatPara[0],intPara[1],intPara[2]);
    
        else if(isFunc(func,"Eye"))
            mat = Eye(intPara[0],intPara[1]);
    
        else if(isFunc(func,"CountMatrix"))
            mat = CountMatrix(intPara[0],intPara[1]);
    
        else if(isFunc(func,"RandMat"))
            mat = RandMat(intPara[0],intPara[1],
                        floatPara[2],floatPara[3]);
    
        else
            continue;
    
        printMat(mat);

    }

}
    

验证一下

PS E:\Code\PL\calc>
     .\a.exe
please input:Ones(4,4)
mat:4x4=16
1.000000,1.000000,1.000000,1.000000,
1.000000,1.000000,1.000000,1.000000,
1.000000,1.000000,1.000000,1.000000,
1.000000,1.000000,1.000000,1.000000,
please input:Zeros(3,5)
mat:5x3=15
0.000000,0.000000,0.000000,0.000000,0.000000,
0.000000,0.000000,0.000000,0.000000,0.000000,
0.000000,0.000000,0.000000,0.000000,0.000000,
please input:RandMat(3,3,0,100)
mat:3x3=9
41.000000,67.000000,34.000000,
0.000000,69.000000,24.000000,
78.000000,58.000000,62.000000,
please input:Eye(3,3)
mat:3x3=9
1.000000,0.000000,0.000000,
0.000000,1.000000,0.000000,
0.000000,0.000000,1.000000,
please input:CountMatrix(2,4)
mat:4x2=8
0.000000,1.000000,2.000000,3.000000,
4.000000,5.000000,6.000000,7.000000,

感谢各位的阅读,以上就是“C语言中如何实现矩阵,方法是什么”的内容了,通过以上内容的阐述,相信大家对C语言中如何实现矩阵,方法是什么已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C语言中如何实现矩阵,方法是什么
本文地址: https://pptw.com/jishu/654871.html
c语言中类和对象的含义是什么,怎么理解 Bootstrap进度条组件怎么使用,如何实现进度条效果

游客 回复需填写必要信息