c语言编写海明码代码
时间: 2023-10-26 20:06:00 浏览: 85
海明码是一种具有纠错功能的校验码,可以通过C语言来实现。下面是一个简单的C语言代码示例,用于生成和检查海明码:
生成海明码:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int data[100], h[100], c, i, j, k, n, p, q, r;
printf("Enter the number of data bits: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Enter bit %d: ", i + 1);
scanf("%d", &data[i]);
}
for (i = 0, j = 0; i < n; i++)
{
if (pow(2, j) == i + j + 1)
{
h[i] = 0;
j++;
}
else
{
h[i] = data[k];
k++;
}
}
for (i = 0; i < j; i++)
{
c = 0;
p = pow(2, i);
for (k = p - 1; k < n; k += p)
{
for (q = 0; q < p; q++)
{
if (h[k + q] == 1)
{
c++;
}
}
}
if (c % 2 == 0)
{
h[p - 1] = 0;
}
else
{
h[p - 1] = 1;
}
}
printf("The Hamming code is: ");
for (i = n + j - 1; i >= 0; i--)
{
if (pow(2, j) != i + j + 1)
{
printf("%d", h[i]);
}
else
{
j--;
}
}
return 0;
}
```
检查海明码:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int data[100], h[100], c, i, j, k, n, p, q, r;
printf("Enter the number of data bits: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Enter bit %d: ", i + 1);
scanf("%d", &data[i]);
}
j = log2(n) + 1;
for (i = 0; i < n + j; i++)
{
if (pow(2, j) == i + j + 1)
{
h[i] = 0;
}
else
{
h[i] = data[k];
k++;
}
}
for (i = 0; i < j; i++)
{
c = 0;
p = pow(2, i);
for (k = p - 1; k < n + j; k += p)
{
for (q = 0; q < p; q++)
{
if (h[k + q] == 1)
{
c++;
}
}
}
if (c % 2 == 0)
{
r = 0;
}
else
{
r = 1;
}
h[p - 1] = r;
}
printf("The received code is: ");
for (i = n + j - 1; i >= 0; i--)
{
if (pow(2, j) != i + j + 1)
{
printf("%d", h[i]);
}
}
c = 0;
for (i = 0; i < j; i++)
{
p = pow(2, i);
if (h[p - 1] == 1)
{
c += p;
}
}
if (c == 0)
{
printf("\nNo error.\n");
}
else
{
printf("\nError at bit %d.\n", c);
}
return 0;
}
```