格雷码
### 题目描述
**本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空部分的下划线删掉,填上你的答案。提交后若未能通过,除考虑填空部分出错外,还需注意是否因在复制后有改动非填空部分产生错误。**
格雷码是以 $n$ 位的二进制来表示数。与普通的二进制表示不同的是,它要求相邻两个数字只能有 1 个数位不同。首尾两个数字也要求只有 1 位之差。
有很多算法来生成格雷码。以下是较常见的一种:
从编码全 0 开始生成。
当产生第奇数个数时,只把当前数字最末位改变(0 变 1,1 变 0)。
当产生第偶数个数时,先找到最右边的一个 1,把它左边的数字改变。
用这个规则产生的 4 位格雷码序列如下:
```txt
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
```
以下是实现代码,仔细分析其中逻辑,并填写划线部分缺少的代码。
### 源代码
**C**
```c
#include
void show(int a,int n)
{
int i;
int msk = 1;
for(i=0; i> 1;
}
printf("\n");
}
void f(int n)
{
int i;
int num = 1;
for(i=0; i