今天数字逻辑的老师竟然要求我们下来用代码实现格雷码和二进制码的互相转换,还要发到他的邮箱里= =,真是有够闲的
代码如下:
#include<stdio.h>
#define maxsize 1000
char my_xor (char a, char b)
{
if ((a != '1' && a != '0') || (b != '1' && b != '0'))
{
printf("二进制码错误!\n");
exit(0);
}
if (a != b)
return '1';
return '0';
}
void b2g()
{
char b[maxsize] = { ' ' };
int n = 0;
printf("请输入二进制码的长度n:");
scanf("%d", &n);
getchar();
printf("请输入要转换的二进制码:");
for (int i = 0; i < n; i++) {
scanf("%c", &b[i]);
}
char G[maxsize] = { ' ' };
G[0] = b[0];
for (int i = 1; i < n; i++) {
G[i] = my_xor(b[i - 1], b[i]);
}
printf("转换出的典型格雷码是:%s\n", G);
}
char opposite_xor(char b, char g)
{
if ((g != '1' && g != '0') || (b != '1' && b != '0'))
{
printf("二进制码错误!\n");
exit(0);
}
if (g == '1')
{
if (b == '1')
return '0';
else
return '1';
}
else if (g == '0')
{
if (b == '1')
return '1';
else
return '0';
}
return '0';
}
void g2b()
{
char b[maxsize] = { ' ' };
char G[maxsize] = { ' ' };
int n = 0;
printf("请输入格雷码的长度n:");
scanf("%d", &n);
getchar();
printf("请输入要转换的格雷码:");
for (int i = 0; i < n; i++) {
scanf("%c", &G[i]);
}
b[0] = G[0];
for (int i = 1; i < n; i++) {
b[i] = opposite_xor(b[i-1], G[i]);
}
printf("转换出的二进制码是:%s", b);
}
int main()
{
b2g();
g2b();
return 0;
}