结合课堂顺序栈的函数,写一个函数 TenToTwo(Stack* ps) 将任意一个十进制整数(从键盘接收)转换为二进制数,并打印输出该二进制数。
时间: 2025-01-27 11:13:50 浏览: 44
好的,我来为您编写一个使用栈来实现十进制转二进制的函数。这个函数将使用栈来存储二进制位,然后从栈中弹出元素来打印最终的二进制数。以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构
typedef struct Stack {
int data[32];
int top;
} Stack;
// 初始化栈
void InitStack(Stack* ps) {
ps->top = -1;
}
// 判断栈是否为空
int IsEmpty(Stack* ps) {
return ps->top == -1;
}
// 入栈操作
void Push(Stack* ps, int value) {
if (ps->top < 31) { // 防止栈溢出
ps->data[++(ps->top)] = value;
}
}
// 出栈操作
int Pop(Stack* ps) {
if (!IsEmpty(ps)) {
return ps->data[(ps->top)--];
}
return -1; // 栈空时返回-1作为错误标志
}
// 十进制转二进制函数
void TenToTwo(Stack* ps, int decimal) {
if (decimal == 0) {
Push(ps, 0);
return;
}
while (decimal > 0) {
Push(ps, decimal % 2);
decimal /= 2;
}
// 打印二进制数
printf("二进制表示: ");
while (!IsEmpty(ps)) {
printf("%d", Pop(ps));
}
printf("\n");
}
int main() {
Stack stack;
InitStack(&stack);
int decimal;
printf("请输入一个十进制整数: ");
scanf("%d", &decimal);
TenToTwo(&stack, decimal);
return 0;
}
```
这段代码的工作原理如下:
1. 我们首先定义了一个栈结构`Stack`,包含一个整数数组`data`和一个`top`指针。
2. `InitStack`函数用于初始化栈,将`top`设置为-1表示栈为空。
3. `IsEmpty`函数用于检查栈是否为空。
4. `Push`函数用于将元素压入栈中。
5. `Pop`函数用于从栈中弹出元素。
6. `TenToTwo`函数是核心转换函数。它首先处理特殊情况(输入为0的情况)。然后使用循环不断将十进制数除以2,并将余数压入栈中。最后,使用另一个循环从栈中弹出元素并打印,这就是最终的二进制表示。
7. 在`main`函数中,我们初始化栈,接收用户输入,然后调用`TenToTwo`函数进行转换。
这个程序可以处理任意非负整数输入,并将其转换为二进制数打印出来。
阅读全文
相关推荐







