正文
c语言有矩阵运算函数吗 c语言有矩阵运算函数吗为什么
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
c语言矩阵运算
矩阵乘法程序,动态分配内存:
#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语言实现两个矩阵相乘怎么做?
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语言,矩阵
上面那个程序是我写的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语言有矩阵运算函数吗你要求两矩阵同时能够相加和相乘,从而可以判定两矩阵的行数和列数应该是相等的,因而在函数传递参数的时候只要传一个就行c语言有矩阵运算函数吗了。但是考虑到程序的可移植性,我在写相加和相乘的子函数时,考虑了普遍性,即对于给定的任意的row和col(甚至row != col),加法和乘法都能够适用。然而这样一来,形参看起来就比较多了。c语言有矩阵运算函数吗你自己就情况而定吧,不懂的地方发我消息。
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");
}
}
附带一组测试数据
A 3 4
2 1
B 3
4
Result
25
10
结果正确。
!!!跪求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语言有矩阵运算函数吗的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言有矩阵运算函数吗为什么、c语言有矩阵运算函数吗的信息别忘了在本站进行查找喔。