#include<iostream.h> #include<iomanip.h> #include<stdlib.h> void main() { const int hrow=3; //定义数组h的行数hrow const int hcol=7; //定义数组h的列数hcol const int yrow=7; //定义数组y的行数yrow const int ycol=1; //定义数组y的列数ycol const int zrow=1; //定义数组z的行数zrow const int zcol=7; //定义数组z的列数zcol const int srow=3; //定义数组s的行数srow const int scol=1; //定义数组s的列数scol int h[hrow][hcol]={{0,1,1,1,1,0,0},{1,0,1,1,0,1,0},{1,1,0,1,0,0,1}}; //定义并初始化数组h int y[yrow][ycol]; //定义数组y int s[hrow][ycol]; //定义数组s int z[zrow][zcol]; //定义数组z int i,j,k; cout<<"输入接收矢量y中的各元素:\n"; for(i=0;i<7;i++) for(j=0;j<1;j++) cin>>y[i][j]; //输入数组y的元素 for (i=0;i<3;i++) for (j=0;j<1;j++) { s[i][j]=0; for (k=0;k<7;k++) s[i][j]+=h[i][k]*y[k][j]; if (s[i][j]%2==0) s[i][j]=0; else s[i][j]=1; //求矩阵s中的元素sij } for (i=0;i<3;i++) for (j=0;j<1;j++) if (s[i][j]==0) cout<<"所求的矢量为:"<<(y[0][0],y[1][0],y[2][0],y[3][0])<<'\t'; //如果s全部为0,直接输出数组y的前4个分量 else { for (i=0;i<7;i++) { for (j=0;j<3;j++) for (k=0;k<3;k++) if (h[i][j]==s[0][k]) break; //在h中找到与s相同的列,称为第i列 } for (k=0;k<7;i++) { z[0][k]=0; z[0][i]=1; //设置z的第i列为1,其他列为0 }
cout<<"所求的矢量为:"<<(y[0][0]+z[0][0],y[1][0]+z[0][1],y[2][0]+z[0][2],y[3][0]+z[0][3])<<"\t"; //如果s不全为0,把y的转置矩阵跟z相加,输出前4个分量
} }