首页 > 试题广场 >

(格雷码,Gray Code) 格雷码是对十进制数的一种二

[填空题]
(格雷码,Gray Code)
格雷码是对十进制数的一种二进制编码。编码顺序与相应的十进制数的大小不一致。其特点是:对于
两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数之间也仅有一个
二进制位不同,以4位二进制数为例,编码如下:
十进制数 格雷码 十进制数 格雷码
0 0000 8 1100
1 0001 9 1101
2 0011 10 1111
3 0010 11 1110
4 0110 12 1010
5 0111 13 1011
6 0101 14 1001
7 0100 15 1000
如果把每个二进制的位看作一个开关,则将一个数变为相邻的另一个数,只须改动一个开关。因此,
格雷码广泛用于信号处理、数-模转换等领域。
下面程序的任务是:由键盘输入二进制数的位数n (n<16),再输入一个十进制数m(0≤m<2n),然
后输出对应于m的格雷码(共n位,用数组gr[]存放)。
为了将程序补充完整,你必须认真分析上表的规律,特别是对格雷码固定的某一位,从哪个十进制数
起,由0变为1,或由1变为0。
#include <stdio.h>
void main( ) {
    int bound = 1, m, n, i, j, b, p, gr[15];
    printf("input n,m\n");
    scanf("%d%d", &n, &m);
    for (i = 1; i <= n; i++) bound =   1;
    if (m < 0 || m >= bound) {
        printf("Data error!\n");
        2;
    }
    b = 1;
    for (i = 1; i <= n; i++) {
        p = 0;
        b = b * 2;
        for (   3;  j <= m; j++)
        if (   4   )
        p = 1 - p;
        gr[i] = p;
    }
    for (i = n;    5   )
    printf("%1d", gr[i]);  /* 在 "%1d" 中出现的是数字1,不是字母l */
    printf("\n");
} 

这道题你会答吗?花几分钟告诉大家答案吧!