c语言计算矩阵函数 c语言矩阵计算器

c语言 , 矩阵上面那个程序是c语言计算矩阵函数我写c语言计算矩阵函数的,下面写的是两个2*2矩阵相加和相乘的程序(行数和列数可以在主函数中更改),不得不说一句,有关矩阵的东西就是麻烦:
#include stdio.h
#include stdlib.h
int** NewMatrix(int row,int col) //动态开辟一个数组
{
int i,j;
int** matrix;
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//输入矩阵的元素
printf("please input the array elements:\n") ;
for(i=0;irow;i)
{
for(j=0;jcol;j)
{
scanf("%d",matrix[i][j]);
}
}
return matrix;
}
//两矩阵相加a[row][col] b[row][col]
int **addMatrix(int** a,int** b,int row,int col)
{
int i,j;
int** matrix;
//动态建立一个矩阵空间以存放运算结果
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//计算a b
for(i=0;irow;i)
{
for(j=0;jcol;j)
{
matrix[i][j] = a[i][j]b[i][j];
}
}
return matrix;
}
//两矩阵相乘a[row][com]*b[com][col]
int **multiplyMatrix(int **a,int **b,int row,int com,int col)
{
int i,j,k;
int** matrix;
//动态建立一个矩阵空间以存放运算结果
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//计算a b
for(i=0;irow;i)
{
for(j=0;jcol;j)
{
matrix[i][j] = 0;
for(k=0;kcom;k)
{
matrix[i][j]= a[i][k] * b[k][j];
}
}
}
return matrix;
}
void main()
{
int i,j;
int row = 2,col = 2; //行数和列数在此更改
int **a,**b,**c;
a = NewMatrix(row,col); //动态建立矩阵a
b = NewMatrix(row,col); //动态建立矩阵b
//调用函数,求两矩阵的和
c = addMatrix(a,b,row,col);
//输出两矩阵的和
printf("\na add b is:\n");
for(i=0;irow;i)
{
printf("\n");
for(j=0;jcol;j)
{
printf("%d ",c[i][j]);
}
}
//调用函数 , 求两矩阵的积
c = multiplyMatrix(a,b,row,row,col);
//输出两矩阵的积
printf("\na multiply b is:\n");
for(i=0;irow;i)
{
printf("\n");
for(j=0;jcol;j)
{
printf("%d ",c[i][j]);
}
}
}
本来程序还可以写得简单一些 , 由于c语言计算矩阵函数你要求两矩阵同时能够相加和相乘,从而可以判定两矩阵的行数和列数应该是相等的,因而在函数传递参数的时候只要传一个就行了 。但是考虑到程序的可移植性,我在写相加和相乘的子函数时,考虑了普遍性 , 即对于给定的任意的row和col(甚至row != col),加法和乘法都能够适用 。然而这样一来,形参看起来就比较多了 。你自己就情况而定吧,不懂的地方发我消息 。
用c语言实现两个矩阵相乘怎么做?1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值 。
2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量 , k则用于实现矩阵的乘法 。
3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素 。
4、输入三个矩阵的行数和列数,保存在变量a、b、c中 。
5、输入矩阵A的各元素,保存在数组X中 。
6、输入矩阵B的各元素,保存在数组Y中 。
7、将二维数组Z的各元素,初始化为0 。
8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果 。
9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中 。
10、最后,输出乘法所得的结果,即输出Z数组中的所有元素 。
11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵 。
如何用C语言编写程序求矩阵的值//矩阵乘积.cpp
#includestdio.h
void main()
{
//定义矩阵1、2为输入数据矩阵c语言计算矩阵函数,3为乘积后c语言计算矩阵函数的矩阵
int cJuZhen1[4][3],cJuZhen2[3][2],cJuZhen3[4][2];
//定义两个指针*p1,*p2分别指向矩阵1、2
int *p1,*p2,i,j;
p1=cJuZhen1[0][0];
p2=cJuZhen2[0][0];
//输入矩阵1c语言计算矩阵函数的数据
printf("请输入4*3c语言计算矩阵函数的矩阵A: \n");
for(i=0;i4;i)
{
for(j=0;j3;j)
{
scanf("%d",cJuZhen1[i][j]);
}
}
printf("\n");
//输入矩阵2c语言计算矩阵函数的数据
printf("请输入3*2的矩阵B: \n");
for(i=0;i3;i)
{
for(j=0;j2;j)
{
scanf("%d",cJuZhen2[i][j]);
}
}
printf("\n");
//输出矩阵1
printf("矩阵A:"\n);
for(i=0;i4;i)
{
for(j=0;j3;j)
{
printf("%d",cJuZhen1[i][j]);
}
if(j==3)
{
printf("\n");
}
}
printf("\n");
//输出矩阵2
printf("矩阵B: \n");
for(i=0;i3;i)
{
for(j=0;j2;j)
{
printf("%d",cJuZhen2[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
//计算矩阵1、2的乘积
printf("两矩阵乘积为: \n");
for(i=0;i4;i)
{
cJuZhen3[i][0]=(*p1)*(*p2) (*(p1 1))*(*(p2 2)) (*(p1 2))*(*(p2 4));
cJuZhen3[i][1]=(*p1)*(*(p2 1)) (*(p1 1))*(*(p2 3)) (*(p1 2))*(*(p2 5));
p1=p1 3;
}
//输出矩阵3(即矩阵乘积)数据
printf("矩阵A与B乘积为: \n");
for(i=0;i4;i)
{
for(j=0;j2;j)
{
printf("%d",cJuZhen3[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
}
用C语言编写一个矩阵运算的程序,高分!//矩阵三元组之矩阵相加 相乘
#include iostream
using namespace std;
typedef int Elemtype;
#defineMAXSIZE12500//最大非零元素
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=https://www.04ip.com/post/M.data[j].value;
【c语言计算矩阵函数 c语言矩阵计算器】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=https://www.04ip.com/post/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=https://www.04ip.com/post/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语言关于矩阵乘法的函数,,童鞋 , 不知道你是用的什么测试数据 , 在我的机器上测试了几组数据,结果都是正确的 。
重复下我的测试代码 。
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
void multiplication(int a,int b,int c,int *p,int *q);
void main()
{
int m,n,l,h;
int i,j,g,k;
int *p,*q;
char x;
printf("请输入a矩阵行数和列数,以空格分开 , , ,");
scanf("%d %d",m,n);
p=(int *)malloc(sizeof(int)*m*n);
for(i=0;im;i)
for(j=0;jn;j)
{
printf("请输入a矩阵%d行%d列的数,,",(i 1),(j 1));
scanf("%d",(p m*i j));
}
printf("请输入b矩阵行数和列数,以空格分开,, , ");
scanf("%d %d",l,h);
q=(int *)malloc(sizeof(int)*l*h);
for(g=0;gl;g)
for(k=0;kh;k)
{
printf("请输入b矩阵%d行%d列的数 , ,",(g 1),(k 1));
scanf("%d",(q l*g k));
}
multiplication( m, n, h, p, q);
}
void multiplication(int a,int b,int c,int *p,int *q)
{
int i,j;
int k;
int sum;
for(i=0;ia;i)
{
for(j=0;jc;j)
{
sum=0;
for(k=0;kb;k)
{
sum=sum (*(p a*i k))*(*(q b*k j));
}
printf("%d ",sum);
}
printf("\n");
}
}
附带一组测试数据
A34
21
B 3
4
Result
25
10
结果正确 。
c语言矩阵乘法函数函数类型是根据有无返回值判断的,无返回值就把函数定义为void类型
如果是单纯输出矩阵那就不用返回了,如果还要传回主函数有其它应用那就返回吧
关于c语言计算矩阵函数和c语言矩阵计算器的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读