使用队列数据结构将十进制纯小数转换为二进制小数。 十进制小数转为二进制小数的规则是:乘2取整、顺序排列。C语言
时间: 2024-02-06 08:12:20 浏览: 78
好的,以下是使用队列数据结构将十进制纯小数转换为二进制小数的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 32 // 队列最大长度
typedef struct {
int *data; // 存放队列元素的数组
int head; // 队头指针
int tail; // 队尾指针
int size; // 队列元素个数
} Queue;
// 初始化队列
void init_queue(Queue *q) {
q->data = (int*) malloc(sizeof(int) * MAX_SIZE);
q->head = 0;
q->tail = 0;
q->size = 0;
}
// 入队
int enqueue(Queue *q, int x) {
if (q->size == MAX_SIZE) {
return 0; // 队列已满,入队失败
}
q->data[q->tail] = x;
q->tail = (q->tail + 1) % MAX_SIZE;
q->size++;
return 1; // 入队成功
}
// 出队
int dequeue(Queue *q, int *x) {
if (q->size == 0) {
return 0; // 队列为空,出队失败
}
*x = q->data[q->head];
q->head = (q->head + 1) % MAX_SIZE;
q->size--;
return 1; // 出队成功
}
// 十进制小数转二进制小数
void decimal_to_binary(double decimal) {
Queue q;
init_queue(&q); // 初始化队列
int count = 0;
while (decimal != 0 && count < MAX_SIZE) {
decimal *= 2; // 乘2
if (decimal >= 1) {
enqueue(&q, 1); // 取整为1,入队
decimal -= 1;
} else {
enqueue(&q, 0); // 取整为0,入队
}
count++;
}
printf("0."); // 输出二进制小数的整数部分
while (q.size > 0) {
int x;
dequeue(&q, &x); // 出队
printf("%d", x); // 输出队列元素
}
}
int main() {
double decimal = 0.625;
decimal_to_binary(decimal); // 输出 0.101
return 0;
}
```
在代码中,我们使用了循环队列来存放二进制数。首先,我们使用 `init_queue()` 函数初始化队列。然后,使用 `enqueue()` 函数将取整后的数入队,使用 `dequeue()` 函数将队列中的数依次出队并输出。最后,我们在 `main()` 函数中调用 `decimal_to_binary()` 函数,将十进制纯小数转换为二进制小数并输出。
希望这个代码能够帮助到你!
阅读全文