#define N 13
#define M 9
#include
void Deal(char S[],char D[],int n);
main()
{ char H[N],D[M],S[4];
int i;
printf("请输入一个8位的二进制代码: ");
gets(D);
/*----------------------------------------------------------------*/
H[12]=D[7]+D[6]+D[4]+D[3]+D[1];
H[12]=H[12]%2==0 ? '0':'1'; /*实现异或功能求各位海明校验码*/
H[11]=D[7]+D[5]+D[4]+D[2]+D[1];
H[11]=H[11]%2==0 ? '0':'1';
H[9]=D[6]+D[5]+D[4]+D[0];
H[9]=H[9]%2==0 ? '0':'1';
H[5]=D[3]+D[2]+D[1]+D[0];
H[5]=H[5]%2==0 ? '0':'1';
for(i=0;i
H[0]+=D[i];
H[0]+=H[12]+H[11]+H[9]+H[5];
H[0]=H[0]%2==0 ? '0':'1';
H[1]=D[0];H[2]=D[1];H[3]=D[2];H[4]=D[3];H[6]=D[4];H[7]=D[5];H[8]=D[6];H[10]=D[7];
printf("--------------------------------------------\n");
printf("8位二制代码的原码为: ");
for(i=0;i
printf("%c",D[i]);
printf("\n它的海明码为: ");
for(i=0;i
printf("%c",H[i]);
/*---------------------------------------------------------------*/
printf("\n--------------------------------------------------------------------------\n");
printf("\n为了能让此程序实现海明校验及纠错的能力请把原8位二进制代码中任意一位弄错!\n");
gets(D);
S[3]=H[12]+D[7]+D[6]+D[4]+D[3]+D[1];
S[3]=S[3]%2==0 ? '0':'1';
S[2]=H[11]+D[7]+D[5]+D[4]+D[2]+D[1]; /*奇偶形成电路*/
S[2]=S[2]%2==0 ? '0':'1';
S[1]=H[9]+D[6]+D[5]+D[4]+D[0];
S[1]=S[1]%2==0 ? '0':'1';
S[0]=H[5]+D[3]+D[2]+D[1]+D[0];
S[0]=S[0]%2==0 ? '0':'1';
printf("--------------------------------------------\n");
Deal(S,D,4); /*调用4~16译码器*/
}
void Deal(char S[],char D[],int n) /*模拟4~16译码器并对其纠正处理*/
{ int i,sum,var,e;
sum=0;e=1;
for(i=n-1;i>=0;i--)
{ if(S[i]=='1') var=S[i]-'0';
else var=S[i]-'0';
sum+=var*e;
e*=2;
}
switch(sum) /*选择并处理*/
{ case 0: { printf("经校验后没有错误!\n"); break; }
case 3: { printf("经校验后发现1号位置有错并对其纠正输出!\n");
D[7]=D[7]=='1'? '0':'1';
break; }
case 5: { printf("经校验后发现2号位置有错并对其纠正输出!\n");
D[6]=D[6]=='1'? '0':'1';
break; }
case 6: { printf("经校验后发现3号位置有错并对其纠正输出!\n");
D[5]=D[5]=='1'? '0':'1';
break; }
case 7: { printf("经校验后发现4号位置有错并对其纠正输出!\n");
D[4]=D[4]=='1'? '0':'1';
break; }
case 9: { printf("经校验后发现5号位置有错并对其纠正输出!\n");
D[3]=D[3]=='1'? '0':'1';
break; }
case 10: { printf("经校验后发现6号位置有错并对其纠正输出!\n");
D[2]=D[2]=='1'? '0':'1';
break; }
case 11: { printf("经校验后发现7号位置有错并对其纠正输出!\n");
D[1]=D[1]=='1'? '0':'1';
break; }
case 12: { printf("经校验后发现8号位置有错并对其纠正输出!\n");
D[0]=D[0]=='1'? '0':'1';
break; }
default: printf("校验位发生错误!\n");
}
for(i=0;i
printf("%c",D[i]); /*输出纠正后的结果*/
printf("\n");
}
这个是我同学做的,能帮忙改一下也成啊,学校老师急着要作业,为难死小弟了,谢谢了