‘壹’ 输入m*n阶矩阵A和B,用函数编程实现两个函数相加和相乘
输入m*n阶矩阵A和B,用C语言编程实现两个函数相加和相乘:
一、矩阵相乘。程序中先初始化矩阵,然后判断第一个矩阵的列数和第二个矩阵的行数是否相等,如果不相等则直接提示错误后退出程序。相等的话则利用公式计算乘积,结果赋给matrix二维数组。最后用for循环打印出结果验证。
#include<stdio.h>
#include<stdlib.h>
#define M 100
int main(void)
{
int i,j,k,matrix1[M][M],matrix2[M][M],row1,col1,row2,col2,matrix[M][M];
printf("输入第一个矩阵的行数和列数:");
scanf("%d%d",&row1,&col1);
printf("输入第一个矩阵: ");
for(i=0;i<row1;i++){
for(j=0;j<col1;j++){
scanf("%d",&matrix1[i][j]);
}
}
printf("输入第二个矩阵的行数和列数:");
scanf("%d%d",&row2,&col2);
printf("输入第二个矩阵: ");
for(i=0;i<row2;i++){
for(j=0;j<col2;j++){
scanf("%d",&matrix2[i][j]);
}}
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
matrix[i][j]=0;
} }
if(col1!=row2){
fprintf(stderr,"enput error!");
exit(EXIT_FAILURE);
}
printf("The result: ");
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
for(k=0;k<col1;k++){
matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j];
} } }
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
printf("%d ",matrix[i][j]); }
printf(" "); }
return 0;}
二、矩阵相加:
#include<stdio.h>
#define M 20
#define N 20
float A[M][N];
float B[M][N];
float C[M][N];
int i,j,m,n,p,q;
float y=1.0;
void main()
{
scanf("%d,%d",&i,&j);
printf("请输入矩阵B的行数和列数(用逗号隔开):");
scanf("%d,%d",&m,&n);
if(i!=m||j!=n)
printf("***对不起,您输入的两个矩阵不能相加,请重试.*** ");
else printf("请输入矩阵A: ");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
scanf("%f",&A[p][q]);
printf("输出矩阵A: ");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
{
printf("%10.2f",A[p][q]);
if((q+1)%j==0)
printf(" ");
}
printf("请输入矩阵B: ");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
scanf("%f",&B[p][q]);
printf("输出矩阵B: ");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
{
printf("%10.2f",B[p][q]);
if((q+1)%j==0)
printf(" ");
}
printf("矩阵A+矩阵B为: "); //计算两个矩阵相加
for(p=0;p<i;p++)
for(q=0;q<j;q++)
C[p][q]=A[p][q]+B[p][q];
for(p=0;p<i;p++)
for(q=0;q<j;q++)
{
printf("%10.2f",C[p][q]);
if((q+1)%j==0)
printf(" ");
}
};
‘贰’ C语言:编写完整程序:计算两个矩阵的乘积。
#include
"stdio.h"
#include
"stdlib.h"
void
main
()
{
int
m,l,p,q;
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
while
(l!=p)
{
printf("两个矩阵不匹配,不能进行相乘运算,请重新输入...\n\n");
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
}
double
a[200][200]={0},
b[200][200]={0},sum=0;
int
i,j,k=0;
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
a[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵a是:\n");
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
printf("%f
",a[i][j]);
}
printf("\n");
}
//cout<<"输入一个3*2的矩阵:"<<endl;
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
b[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵b是:\n");
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
printf("%f
",b[i][j]);
}
printf("\n");
}
printf("ab相乘结果为:\n");
for
(i=0;i<m;i++)
{
while
(k<q)
{
for
(j=0;j<q;j++)
{
sum
=
a[i][j]*b[j][k]+sum;
}
printf("%f
",sum);
k++;
sum=0;
}
k=0;
printf("\n");
}
}