格雷码(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;
}
}