用matlab做了一下才十行不到的代码,matlab的确很强大。昨天晚上用matlab写了一下,后来又想用c去实现同样的效果,不像matlab有封装好的求最大值最小值函数,在c中需要自己定义,代码写的还算详细的,配合注释应该能够看懂的。
#include<stdio.h> #define M 2 #define N 3 double a,b; double x,y; double min(double a,double b){ if(a>=b) return b; else return a; } double max(double x,double y){ if(x>=y) return x; else return y; } int main() { int i,j,p,q; int k,m; double temp[M][N]; double a[M][N]; double b[N][M]; double final[M][M];//合成后的矩阵为final[M][M] printf("请输入需要合成的A矩阵:\n"); for(i=0;i<M;i++) for(j=0;j<N;j++) scanf("%lf",&a[i][j]); printf("请输入需要合成的B矩阵:\n"); for(p=0;p<N;p++) for(q=0;q<M;q++) scanf("%lf",&b[p][q]); //double a[M][N]={{0.4,0.7,0},{1,0.8,0.5}};//需要合成的矩阵 //double b[N][M]={{1,0.7},{0.4,0.6},{0,0.3}};//需要合成的矩阵 for(i=0;i<M;i++){ for(j=0;j<M;j++){ for(m=0;m<=M;m++) //取小 printf("第一个矩阵的%d行与第二个矩阵的第%d列相比较小的值为:%f\n",i,j,temp[i][m]); temp[i][m]=min(a[i][m],b[m][j]); for(k=0;k<M;k++) //取大 printf("f[%d][%d]=%.2f\n",i,j,f[i][j]); final[i][j]=max(max(temp[i][k],temp[i][k+1]),final[i][j]); //printf("i=%d j=%d\n",i,j); } } printf("合成后的矩阵为:\n"); for(i=0;i<M;i++){ for(j=0;j<M;j++){ printf("%.3f ",final[i][j]);//输出合成后的矩阵 } printf("\n"); } return 0; }