1. 程式人生 > >C語言之基本演算法33—矩陣的基本運算

C語言之基本演算法33—矩陣的基本運算

//矩陣基礎
/*
==================================================================
題目:輸入矩陣a,b,輸出a,b,a的轉置矩陣d,a*b,b+d=e;
==================================================================
*/
#include<stdio.h>
#define TJ1 for(i=0;i<2;i++)
#define TJ2 for(j=0;j<3;j++)
#define hh printf("\n")
void main()
{
int a[2][3],b[3][2],c[2][2],d[3][2],e[3][2];
int i,j,k;
//輸入矩陣a
printf("輸入2*3矩陣a:\n");
TJ1
TJ2
scanf("%d",&a[i][j]);
//輸入矩陣b
printf("\n輸入3*2矩陣b:\n");
TJ2
TJ1
scanf("%d",&b[j][i]);
//輸出矩陣a:
printf("\n=====================\n輸出矩陣a:\n");
TJ1
{
TJ2
printf("%4d",a[i][j]);
hh;
}
printf("\n=====================\na的轉置矩陣d:\n");
TJ1
TJ2
d[j][i]=a[i][j];
TJ2
{
TJ1
printf("%4d",d[j][i]);
printf("\n");
}
//輸出矩陣b:
printf("\n\n=====================\n輸出矩陣b:\n");
TJ2
{
TJ1
printf("%4d",b[j][i]);
hh;
}
//矩陣a*矩陣b,儲存至c
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
//輸出矩陣c:
printf("\n=====================\n矩陣a[2][3]*b[3][2]=c[2][2],如下:\n");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
printf("%4d ",c[i][j]);
printf("\n");
}
printf("\n=====================\n矩陣b+矩陣d:\n");
TJ2
TJ1
e[j][i]=b[j][i]+d[j][i];
TJ2
{
TJ1
printf("%4d ",e[j][i]);
hh;
}
}
/*
====================================================================
評:
1、掌握輸出時換行的方法;

2、轉置矩陣時將原矩陣行和列交換,a[i][j]-->d[j][i],原來是2行3列,現在以3行兩列輸出!即

i=0;i<3;i++;\j=0;j<2;j++;i和j只是符號,不影響結果,只是輸出時與d[行][列]對應起來就好。

3、加法很簡單,但必須是通行矩陣;

4、乘法比較複雜,先定義初始矩陣,賦初值=0;然後定義儲存乘積矩陣的列,注意該列最大

值為左矩陣的列,然後左行*右列,先列增加,然後換下一行,重複以上步驟,直至最後一行

乘以最後一列結束!

=====================================================================
*/