#define N 13 #define M 9 #include<stdio.h>
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<M-1;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<M-1;i++) printf("%c",D[i]); printf("\n它的海明码为: "); for(i=0;i<N;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<M-1;i++) printf("%c",D[i]); /*输出纠正后的结果*/ printf("\n"); }
这个是我同学做的,能帮忙改一下也成啊,学校老师急着要作业,为难死小弟了,谢谢了