成都网站建设设计

将想法与焦点和您一起共享

c语言矩阵运算库函数 c语言矩阵运算库有哪些

c语言矩阵运算

矩阵乘法程序,动态分配内存:

专业从事企业网站建设和网站设计服务,包括网站建设、域名注册、网络空间、企业邮箱、微信公众号开发、微信支付宝微信平台小程序开发、app软件开发公司、软件开发、等服务。公司始终通过不懈的努力和以更高的目标来要求自己,在不断完善自身管理模式和提高技术研发能力的同时,大力倡导推行新经济品牌战略,促进互联网事业的发展。

#includestdio.h

// b[j][k] * c[k][i] = a[j][i]

void matrix(int **b,int **c, int **a, int nx, int ny, int nk)

{

int i,j,k;

for (j=0;jny;j++)for(i=0;inx;i++)a[j][i]= 0;

for(j=0;jny;j++){

for(i=0;inx;i++){

for(k=0;knk;k++)a[j][i]+= b[j][k]*c[k][i];

};

};

}

void main()

{

int i,j,k,tmp;

int b_row,b_col;

int c_row,c_col;

int a_row,a_col;

int **b,**c,**a;

// 输入B 阵 行数 列数

printf("please enter b_row b_col of matrix B\n");

scanf("%d %d",b_row,b_col);

c_row = b_col;

// 输入C阵 列数

printf("please enter c_col of matrix C\n");

scanf("%d",c_col);

a_row = b_row;

a_col = c_col;

a = (int **) malloc(sizeof(int *) * a_row);

for (j=0;ja_row;j++){

a[j] = (int *) malloc(sizeof(int) * a_col);

}

b = (int **) malloc(sizeof(int *) * b_row);

for (j=0;jb_row;j++){

b[j] = (int *) malloc(sizeof(int) * b_col);

}

c = (int **) malloc(sizeof(int *) * c_row);

for (j=0;jc_row;j++){

c[j] = (int *) malloc(sizeof(int) * c_col);

}

if (!c[c_row-1]) {

printf("no enought memory\n");exit(0);

}

// 输入B阵元素

printf("Please input int matrix b[%d][%d]\n",b_row,b_col);

for (j=0;jb_row;j++)

for (i=0;ib_col;i++){

scanf("%d",tmp);

b[j][i] = tmp;

}

// 输入C阵元素

printf("Please input int matrix c[%d][%d]\n",c_row,c_col);

for (j=0;jc_row;j++)

for (i=0;ic_col;i++){

scanf("%d",tmp);

c[j][i] = tmp;

}

matrix( b ,c,a, a_col, a_row, b_col);

for(j=0;ja_row;j++)

{

for (i=0;ia_col;i++) printf("%d ",a[j][i]);

printf("\n");

};

}

用C语言编写一个矩阵运算的程序,高分!

//矩阵三元组之矩阵相加 相乘

#include iostream

using namespace std;

typedef int Elemtype;

#define MAXSIZE 12500 //最大非零元素

typedef struct Triple

{

Elemtype value;

int row,col;

}Triple;

typedef struct TSMatrix

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

TSMatrix T;

void InputMatrix(TSMatrix T) //输入t个非零元素

{

cout"请输入稀疏矩阵的信息,(行,列,非零元素个数)"endl;

cinT.muT.nuT.tu;

int i;

cout"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"endl;

for(i=1;i=T.tu;++i)

{

cinT.data[i].rowT.data[i].colT.data[i].value;

}

}

void Output(TSMatrix T)

{

cout"矩阵的三元组表示(ROW=)"T.mu" COL="T.nu"非零个数="T.tuendl;

int i;

for(i=1;i=T.tu;++i)

{

cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;

}

}

void TransposeSMatrix(TSMatrix M,TSMatrix T) //矩阵的转置

{

T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;

int i,j,k=1;

for(i=1;i=M.nu;++i)

{

for(j=1;j=M.tu;++j)

if(M.data[j].col==i)

{

T.data[k].row=i;

T.data[k].col=M.data[j].row;

T.data[k].value=M.data[j].value;

++k;

}

}

}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix Q) //矩阵相加

{

int index_a,index_b,i=1,j=1,k=1;

Q.mu=M.mu; Q.nu=M.nu;

while (i=M.tuj=T.tu)

{

index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;

index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;

if(index_aindex_b)

{

Q.data[k]=M.data[i];

i++;

k++;

}

else if(index_aindex_b)

{

Q.data[k]=T.data[j];

j++;

k++;

}

else if(index_a==index_b)

{

if((M.data[i].value+T.data[j].value)!=0)

{

Q.data[k]=M.data[i];

Q.data[k].value=M.data[i].value+T.data[j].value;

k++;

}

++i;

++j;

}

}

//复制剩余元素

for(;i=M.tu;++i)

{

Q.data[k]=M.data[i];

k++;

}

for(;j=T.tu;++j)

Q.data[k++]=T.data[j];

Q.tu=k-1;

}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix Q) //相乘

{

if(M.nu!=T.mu)

{

cerr"两矩阵相乘不合法"endl;

return ;

}

int *rowSize=new int[T.mu+1]; //存放每行非零元素的个数

int *rowStart=new int[T.mu+2]; //矩阵每行在三元组开始位置

int *temp=new int[T.nu+1]; //存放结果矩阵中每行的计算结果

int i,Current,k,ROWM,COLM,COLB;

for(i=1;i=T.mu;i++) rowSize[i]=0;

for(i=1;i=T.tu;++i) rowSize[T.data[i].row]++;

rowStart[1]=1;

for(i=2;i=T.mu+1;i++)

rowStart[i]=rowStart[i-1]+rowSize[i-1];

Current=1; k=1;

while (Current=M.tu)

{

ROWM=M.data[Current].row; //当前三元组数据中元素的行号

for(i=1;i=T.nu;++i) temp[i]=0;

while (Current=M.tuROWM==M.data[Current].row)

{

COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘

for(i=rowStart[COLM];irowStart[COLM+1];i++) //对应T矩阵中每行的个数

{

COLB=T.data[i].col;

temp[COLB]+=(M.data[Current].value)*(T.data[i].value);

}

Current++;

}

for(i=1;i=T.nu;i++)

{

if(temp[i]!=0)

{

Q.data[k].row=ROWM;

Q.data[k].col=i;

Q.data[k].value=temp[i];

}

k++;

}

}

Q.mu=M.mu;Q.nu=T.nu;

Q.tu=k-1;

}

int main()

{

TSMatrix T,M,Q,S;

InputMatrix(M);

InputMatrix(T);

cout"两矩阵相乘"endl;

Multiply(M,T,Q);

Output(Q);

cout"两矩阵相加"endl;

AddMastrix(M,M,S);

Output(S);

system("pause");

return 0;

}

!!!跪求C语言实现矩阵运算(加,减,乘、求逆、转置)

1、首先打开vs2015(其他版本也可以),新建一个Windows Form窗体程序或者控制台都可以。

2、 定义一个名为array1的数组并赋值:double[,] array1 = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };下面求该矩阵转置矩阵。

3、接下来实现矩阵的转置运算,可以写函数也可以写类,右键解决方案下的项目名,添加-类。

4、创建一个名为“turnzhi”的类(名字随便取,最好用英文,有时候中文名程序会报错),然后点击“添加”。

5、转置类的代码如下图所示。

6、在主程序调用转置类,用两个for循坏将转置后的数组(array)输出来;并将结果显示在textbox中。

7、最后运行程序查看编写的结果:147、258、369。转置后的结果正确,这样就实现了c#矩阵的转置运算。

一道初学者的C语言题目 矩阵运算,求解答,万分感谢!

矩阵,那么就要用二维数组,你一位数组也是可以的,但是要确定怎么分割成二维数组的样子

N*N=10*10=100,可以定义一个100元素的数组

但是这个题目,我估计要定义二维数组的,呵呵

int a[100],sum[100]={0}; //最终结果一定要初始化

int i,n;

char op;

scanf("%",n);

do //至少输入一次,用do--while最好

{

for(i=0;in*n;i++)

scanf("%d",a[i]); //输入n*n个数据,也就是n阶矩阵

fflush(stdio); //清理一下缓冲,要不然char型op输入不进去

op=getchar();

switch(op) 计算加减,用switch也可,用if判断op也行(因为只有加减)

case '+':

for(i=0;in*n;i++)

sum[i]+=a[i];

break;

case '-':

for(i=0;in*n;i++)

sum[i]-=a[i];

break;

}while(op!='#');

for(i=0;in*n;i++) //输出

{

printf("%5d",a[i]);

if(i%n==0) //n个一行

printf("\n");

}


分享名称:c语言矩阵运算库函数 c语言矩阵运算库有哪些
URL链接:http://chengdu.cdxwcx.cn/article/ddgjjeg.html