编辑代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

//#define CRC_CCITT 69665
//#define CRC_16 98309
//#define CRC_12 6159
#define DEC 2 //用于控制输出数据的进制表示,默认输出二进制

unsigned btoi(char pt[])  //此函数用来把二进制字符串转化为十进制整数
{
    int le=0,i;
    unsigned sum=0;
    le=strlen(pt);
    for(i=0;i<le;i++)
    {
        if(pt[i]=='1')
           sum=sum+(unsigned)(pow(2,le-1-i)); //注释(一)
    }
    return sum;
}
///分界线///

unsigned CRC_Calc(unsigned *Kx,unsigned Gx)  //此函数用于计算十进制的冗余码
{
    int bi=0;
    char bu[32];
    itoa(Gx,bu,2);
    bi=strlen(bu);
    *Kx=(*Kx)*(unsigned)pow(2,bi-1);//注释(二)
    return Gx-(*Kx%Gx);
}

int main()
{
    int f=1;  //f表示flag,用于决定是否继续测试
    unsigned g,k,s,r; //分别意为:Gx,Kx,Tx,Rx
    char se[32],rx[32],gi[32],ki[32];
    while(f) 
    {
        system("cls"); //清屏函数
        fflush(stdin); //清空缓冲区

/* ************ 十进制输入*********************/

//        printf("请输入十进制信息码:\n");
//        scanf("%d",&k);
//        itoa(k,ki,DEC);
//        printf("请输入十进制生成码:\n");
//        scanf("%d",&g);
//        itoa(g,gi,DEC);
/* ****************二进制输入*********************** */

        printf("请输入二进制信息码:\n");
        gets(ki);
        k=btoi(ki);
        printf("请输入二进制生成码:\n");
        gets(gi);
        g=btoi(gi);
 // ------------------------------分界线-----------------------------------     //
        r=CRC_Calc(&k,g);
        s=r+k;
        itoa(r,rx,DEC);
        itoa(s,se,DEC);
        printf("生成码(Gx):%s\n",gi);
        printf("信息码(Kx):%s\n",ki);
        printf("发送码(Tx):%s\n",se);
        printf("冗余码(Rx):%s\n",rx);
        if(s%g==0)    
        {
            printf("\n\tAcceptable!\n");
        }
        else
        {
            printf("\n\tUnacceptable!\n");
        }
        printf("\n是否继续(1=是,0=否)\n");
        scanf("%d",&f);
    }
    return 0;
}