矩阵的基本运算(C实现)
2015-10-21 16:30
344 查看
使用函数来实现对矩阵的基本输入输出以及求和、相乘等运算。
#include<stdio.h>
#define N 10
void print_matrix(float *a, int m, int n)
//打印矩阵
{
int i, j;
printf(" %d行%d列的矩阵:\n", m, n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
printf("%6.1f ", *(a + n*i + j));
printf("\n");
}
}
void input_matrix(float *a, int m, int n) //输入矩阵
{
int i, j;
printf("请输入%d行%d列的矩阵:\n", m, n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%f", (a + n*i + j));
//将二维数组看成一维进行存储
}
void multiply_matrix(float *a, int m1, int n1, float *b, int m2, int n2, float *c)
//矩阵相乘
{
int i, j, k;
for (i = 0; i < m1; i++)
for (j = 0; j < n2; j++)
for (k = 0; k < n1; k++)
*(c + n2*i + j) += *(a + n1*i + k) * *(b + n2*k + j);
}
void add_matrix(float *a, float *b, int m, int n)
//矩阵求和
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
*(a + n*i + j) += *(b + n*i + j);
}
int main(void)
{
int i, j, m1, n1,m2,n2;
float ma
, mb
,mc
= {0};
printf("请输入矩阵a的行、列数:\n");
scanf("%d%d", &m1, &n1); //m表示行,n表示列
input_matrix(ma, m1, n1);
print_matrix(ma, m1, n1);
printf("请输入矩阵b的行、列数:\n");
scanf("%d%d", &m2, &n2); //m表示行,n表示列
input_matrix(mb, m2, n2);
print_matrix(mb, m2, n2);
if(m1== m2 && n1== n2)
{
printf("矩阵a+矩阵b=\n");
add_matrix(ma,
mb,m1, n1);
print_matrix(ma, m1, n1);
}
else
{
printf("两个矩阵无法相加\n");
}
if(n1== m2)
{
printf("矩阵a*矩阵b=\n");
multiply_matrix(ma, m1, n1, mb, m2,n2, mc);
print_matrix(mc, m1, n2);
}
else
{
printf("两个矩阵无法相乘\n");
}
}
#include<stdio.h>
#define N 10
void print_matrix(float *a, int m, int n)
//打印矩阵
{
int i, j;
printf(" %d行%d列的矩阵:\n", m, n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
printf("%6.1f ", *(a + n*i + j));
printf("\n");
}
}
void input_matrix(float *a, int m, int n) //输入矩阵
{
int i, j;
printf("请输入%d行%d列的矩阵:\n", m, n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%f", (a + n*i + j));
//将二维数组看成一维进行存储
}
void multiply_matrix(float *a, int m1, int n1, float *b, int m2, int n2, float *c)
//矩阵相乘
{
int i, j, k;
for (i = 0; i < m1; i++)
for (j = 0; j < n2; j++)
for (k = 0; k < n1; k++)
*(c + n2*i + j) += *(a + n1*i + k) * *(b + n2*k + j);
}
void add_matrix(float *a, float *b, int m, int n)
//矩阵求和
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
*(a + n*i + j) += *(b + n*i + j);
}
int main(void)
{
int i, j, m1, n1,m2,n2;
float ma
, mb
,mc
= {0};
printf("请输入矩阵a的行、列数:\n");
scanf("%d%d", &m1, &n1); //m表示行,n表示列
input_matrix(ma, m1, n1);
print_matrix(ma, m1, n1);
printf("请输入矩阵b的行、列数:\n");
scanf("%d%d", &m2, &n2); //m表示行,n表示列
input_matrix(mb, m2, n2);
print_matrix(mb, m2, n2);
if(m1== m2 && n1== n2)
{
printf("矩阵a+矩阵b=\n");
add_matrix(ma,
mb,m1, n1);
print_matrix(ma, m1, n1);
}
else
{
printf("两个矩阵无法相加\n");
}
if(n1== m2)
{
printf("矩阵a*矩阵b=\n");
multiply_matrix(ma, m1, n1, mb, m2,n2, mc);
print_matrix(mc, m1, n2);
}
else
{
printf("两个矩阵无法相乘\n");
}
}
相关文章推荐
- 36.Search for a Range
- FORM表单无法提交JavaScript动态添加的表单元素
- PHP不能创建csv中文名文件
- 微信红包签名算法 C#代码实现
- iOS常用字符串使用
- ExpandableListView的用法
- Android_07_电话录音机
- 关于在平台中设置系统全局变量的使用和场景
- hexo generate 执行时报 offset 错误
- jquery方法animate操作图片移动
- iOS中的中间人-NSURLProtocol 的原理和使用实例
- 记录一下正则表达式查找相关
- 原来是传说中的2038问题
- Oracle replace 的函数用法
- MVC
- 水水更健康~~~~~~~~~~~~~~~AutoRun免疫的原理
- NavMesh
- nginx配置文件模板
- [转]大数据性能调优之HBase的RowKe…
- Ubuntu14.04下安装Hadoop2.6.0&nb…