格雷码

        格雷码(Gray code),又叫循环二进制码或反射二进制码 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式 。

#include <stdio.h>
int isright(int);
void gradcode(int);

int a[1024][10];        //使得n<=10;
int main()
{
int n,i,j,num=1;
printf("请输入一个大于0小于10的整数:");
scanf("%d",&n);
if(isright(n)==0)
   return 0;
else
{
   for(i=0;i<n;i++)
    num=num*2;
   gradcode(n);
   for(i=0;i<num;i++)
   {
    for(j=0;j<n;j++)
     printf("%d",a[i][j]);
    printf("\n");
   }
}
return 0;
}

int isright(int n)
{
if(n>10 || n<=0)
{
   printf("你输入的数据不满足要求!!!");
   return 0;
}
return 1;
}

void gradcode(int n)
{
int i,j,num=1;
if(n==1)
{
   a[0][0]=0;
   a[1][0]=1;
}
else
{
   gradcode(n-1);
   for(i=0;i<n;i++)
    num=num*2;
   for(i=0;i<num/2;i++)
    for(j=0;j<n-1;j++)
     a[num-1-i][j]=a[i][j];
   for(i=0;i<num/2;i++)
    a[i][j]=0;
   for(i=num/2;i<num;i++)
    a[i][j]=1;
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值