❶ c语言求矩阵运算,急
可以用二维数组模拟矩阵,乘法就是A的第一行乘对应B的第一列放在(1,1)位置,然后继续往后乘。其实进行矩阵计算用MATLAB简单的多或者C++的Armadillo。
❷ c语言矩阵运算
#include<vector>
#include<iostream>
intmain()
{
usingnamespacestd;
intm,n,p;
vector<vector<int>>A,B,C;
cout<<"pleaseinputm,n,p"<<endl;
cin>>m>>n>>p;
vector<int>tmp;
intttp;
for(inti=0;i<m;i++)
{
for(intj=0;j<n;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
A.push_back(tmp);
tmp.clear();
}
for(inti=0;i<n;i++)
{
for(intj=0;j<p;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
B.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
ttp=0;
for(intk=0;k<n;k++)
ttp=ttp+A[i][k]*B[k][j];
tmp.push_back(ttp);
}
C.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
cout<<C[i][j]<<'';
}
cout<<endl;
}
system("pause");
}
现在是2017年10月15日,无意中回答了一道2011年12月09日的题,留念。
❸ 用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;
cin>>T.mu>>T.nu>>T.tu;
int i;
cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl;
for(i=1;i<=T.tu;++i)
{
cin>>T.data[i].row>>T.data[i].col>>T.data[i].value;
}
}
void Output(TSMatrix T)
{
cout<<"矩阵的三元组表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零个数="<<T.tu<<endl;
int i;
for(i=1;i<=T.tu;++i)
{
cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl;
}
}
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.tu&&j<=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_a<index_b)
{
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_a>index_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.tu&&ROWM==M.data[Current].row)
{
COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM];i<rowStart[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语言中的矩阵是怎样计算的
矩阵的表示使用二维数组,当然二维数组通常情况下是不可以动态分配的,因此最好已开始定义一个足够大的数组来存放矩阵元素。至于加减乘逆等运算,主要是利用嵌套循环操作其单个元素,由于每个人的方法不一样就不详细说了。希望对你有所帮助。
❺ !!!跪求C语言实现矩阵运算(加,减,乘、求逆、转置)
1、首先打开vs2015(其他版本也可以),新建一个Windows Form窗体程序或者控制台都可以。
❻ 用C语言实现二维数组的相关运算
#include<stdio.h>
#define n 5
int a[n][n];//定义一个大小为n的二维数组,这里以n=5为例
void main()
{
int i,j;
printf("请逐行输入矩阵:\n");
for(i=0;i<n;i++)
{
printf("第%d行:",i+1);
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}//这是手动对a[n][n]初始化
int sum1();
int sum2();
int sum3();//这些都是函数声明
printf("%d,\t%d,\t%d",sum1(),sum2(),sum3());
}
int sum1()//用来计算边缘元素之和
{
int s=0;
int i,j;
for(i=0,j=0;j<n;j++)
{s+=a[i][j];}
j--;i++;
for(;i<n;i++)
{s+=a[i][j];}
i--;j--;
for(;j>=0;j--)
{s+=a[i][j];}
j++;i--;
for(;i>0;i--)
{s+=a[i][j];}
return(s);
}
int sum2()//用来计算不相邻元素之和
{
int s=0;
int i,j;
for(i=0;i<n;i++)
{
for(j=i%2;j<n;j+=2)
{s+=a[i][j];}
}
return(s);
}
int sum3()//用来计算对角线元素之和
{
int s=0;
int i;
for(i=0;i<n;i++)
{
s+=a[i][i];
s+=a[i][n-1-i];
}
if(n%2)
return(s-a[n/2][n/2]);//如果n为奇数,矩阵正中央的元素就被多算了一遍,所以要把它减掉
else
return(s);
}
❼ c语言 两矩阵相除 (急!!)
矩阵A除以矩阵B
A/B=A*(B的逆矩阵)
写一个矩阵求逆函数,然后做矩阵乘法就行了。
说明:一般说的矩阵求逆都是指方阵,在Matlab中,广义的矩阵求逆可以不是方阵。
❽ C语言二维数组矩阵法。
C语言最萌了!萌教至高无上!
如果你学到C++了,看这个http://..com/question/329120220.html?an=0&si=6
如果没有,恩哼
1. 先看二维数组的本质http://ke..com/view/1188148.htm
2. 然后看二维数组做参数——其实二维数组做参数的时候一点都不萌http://..com/question/198430999.html?an=0&si=7
3. 用指针伪装的二维数组的传递。如果只让用C,我还是觉得指针最萌了
#include <stdio.h>
#include <stdlib.h>
void transpose(int *matrix, int row, int column)
{
int i,j;
int* temp;
temp=(int*)malloc(row*column*sizeof(int));
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
{
*(temp+row*j+i)=*(matrix+column*i+j);
}
}
for(i=0;i<row*column;i++)
{
*(matrix+i)=*(temp+i);
}
free(temp);
}
void main(void)
{
int i,j;
int matrix[3][2]={{1,2},{3,4},{5,6}};
transpose(&matrix[0][0],3,2);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",*(&matrix[0][0]+3*i+j));
}
printf("\n");
}
system("pause");
}
最后一行的system("pause"),是系统调用的暂停,如果你的编译器不够萌,不能够支持,就去掉吧。
每一块砖头都刻着萌字——by砖头88
❾ C语言程序设计方案!!二维数组应用 矩阵算法 求高人
#include
<stdio.h>
void
input_data(int
*l,int
*r,int
data[100][100])
{
int
i,j,k;
printf("输入矩阵行数:");
scanf("%d",l);
printf("输入矩阵列数:");
scanf("%d",r);
printf("按行输入数据,数据间用空格间隔:\n");
for(i=0;i<*l;i++)
for(j=0;j<*r;j++)
scanf("%d",&data[i][j]);
}
int
add_subtra(int
m1[100][100],int
l1,int
r1,
int
m2[100][100],int
l2,int
r2,char
m,int
rm[100][100])
{
int
i,j;
if(l1!=l2
||
r1!=r2)
{
printf("矩阵数据错误1.\n");
return;
}
if(m=='+')
for(i=0;i<l1;i++)
for(j=0;j<r1;j++)
rm[i][j]=m1[i][j]+m2[i][j];
else
for(i=0;i<l1;i++)
for(j=0;j<r1;j++)
rm[i][j]=m1[i][j]-m2[i][j];
}
int
mul(int
m1[100][100],int
l1,int
r1,
int
m2[100][100],int
l2,int
r2,int
m[100][100])
{
int
i,j,k;
if(l1!=r2
)
{
printf("矩阵数据错误2.\n");
return;
}
for(i=0;i<l1;i++)
for(j=0;j<r2;j++)
{
m[i][j]=0;
for(k=0;k<r1;k++)
m[i][j]+=m1[i][k]*m2[k][j];
}
}
int
output(int
m[100][100],int
l,int
r)
{
int
i,j;
for(i=0;i<l;i++)
{
for(j=0;j<r;j++)
printf("%3d
",m[i][j]);
printf("\n");
}
}
int
main()
{
int
d1[100][100],d2[100][100],d[100][100];
int
l1,r1,l2,r2;
int
i,j,k;
char
mark[2];
printf("输入第一个矩阵数据:\n");
input_data(&l1,&r1,d1);
printf("输入的第一个矩阵:\n");
output(d1,l1,r1);
printf("输入第二个矩阵数据:\n");
input_data(&l2,&r2,d2);
printf("输入的第二个矩阵:\n");
output(d2,l2,r2);
printf("指定运算符(+/-/*):");
scanf("%s",mark);
while(mark[0]!='+'
&&
mark[0]!='-'
&&
mark[0]!='*')
{
printf("符号错误请重新输入(+/-/*):");
scanf("%s",mark);
}
switch(mark[0])
{
case
'+':
case
'-':
add_subtra(d1,l1,r1,d2,l2,r2,mark[0],d);
break;
case
'*':
mul(d1,l1,r1,d2,l2,r2,d);
break;
}
//output(d1,l1,r1);
//output(d2,l2,r2);
printf("运算:%c,计算结果为:\n",mark[0]);
output(d,l1,r2);
system("pause");
}
两个运算矩阵可以是大小不同的,
输出结果由被乘数矩阵的行和乘数矩阵的列决定,
你要求的输出格式比较烦,没时间不够啦!有时间再玩吧。