计算方法实验一 矩阵相乘法+输出格式处理

时间:2021-09-20 11:23:32

计算矩阵相乘

%g用于打印浮点型数据时,会去掉多余的零,至多保留六位有效数字(不同于%e的默认保留小数点后6位)

%e是一种转换说明符号,表示浮点数,并且采用e计数法。

比如2.12e2


rintf()输出格式类型说明:

  输出类型       格式字符意义

  a        浮点数、十六进制数字和p-计数法(C99)

  A        浮点数、十六进制数字和p-计数法(C99)

  c   输出单个字符

  d   以十进制形式输出带符号整数(正数不输出符号)

  e   以指数形式输出单、双精度实数  指数标识为e

  E   以指数形式输出单、双精度实数  指数标识为E

  f   以小数形式输出单、双精度实数

  G       以%f%E中较短的输出宽度输出单、双精度实数,在指数小于-4或者大于等于精度时使用%E格式

  i         有符号十进制整数(与%d相同)

  o   以八进制形式输出无符号整数(不输出前缀O)

  p       输出内存地址形式数据(16进制)

  s   输出字符串

  x   以十六进制形式输出无符号整数(不输出前缀OX)

  X  以十六进制形式输出无符号整数(不输出前缀OX)

  u       以十进制形式输出无符号整数




#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

#define MAXN 110
double arr1[MAXN][MAXN];
double arr2[MAXN][MAXN];
double ans[MAXN][MAXN];

int main()
{
int a,b,c,d;
freopen("in.txt","r",stdin);
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
scanf("%lf",&arr1[i][j]);
for(int i=1;i<=c;i++)
for(int j=1;j<=d;j++)
scanf("%lf",&arr2[i][j]);

for(int i=1;i<=a;i++){
for(int j=1;j<=d;j++){
ans[i][j]=0;
for(int k=1;k<=b;k++)
ans[i][j]+=arr1[i][k]*arr2[k][j];
printf("%g ",ans[i][j]);
}
puts("");
}
puts("");
}
return 0;
}