(格雷码, GrayCode ) 格雷码是对十进制数的

(格雷码, GrayCode ) 格雷码是对十进制数的一种二进制编码。编码顺序与相应的十进制数的大小不一致。其特点是:对于 两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数之间也仅有一个 二进制位不同,以 4 位二进制数为例,编码如下:


如果把每个二进制的位看作一个开关,则将一个数变为相邻的另一个数,只须改动一个开关。因此, 格雷码广泛用于信号处理、数 - 模转换等领域。 

下面程序的任务是:由键盘输入二进制数的位数 n(n<16) ,再输入一个十进制数 m(0 ≤m<2n) ,然 后输出对应于 m 的格雷码(共 n 位,用数组 gr[] 存放)。 

为了将程序补充完整,你必须认真分析上表的规律,特别是对格雷码固定的某一位,从哪个十进制数 起,由 0 变为 1,或由 1 变为 0。

#include<stdio.h>
int main()
{
	int bound=1,m,n,i,j,b,p,gr[15];
	printf("inputn,m\n");
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)bound= ①;
	if(m<0||m>=bound)
	{
		printf("Dataerror!\n");
		② ;
	}
	b=1;
	for(i=1;i<=n;i++)
	{
		p=0;b=b*2;
		for( ③;j<=m;j++)
		if( ④ )
		p=1-p;
		gr[i]=p;
	}
	for(i=n; ⑤ )
	printf("%1d",gr[i]);/* 在"%1d" 中出现的是数字 1,不是字母 l*/
	printf("\n");
}

Snipaste_2021-01-18_15-40-51.png

答案
第1空:bound*2
第2空:return
第3空:j=0
第4空:(j % b-(b / 2))=0
第5空:<= 1

题目信息

题号:6509
题型:填空题
难度:普通