C语言用栈写进制转换器(完整代码+注释)
时间: 2024-10-12 20:16:00 浏览: 29
在C语言中,我们可以利用栈的数据结构实现一个简单的进制转换器,例如将十进制数转换成二进制、八进制或十六进制。下面是一个简单的示例,我们将仅展示如何将十进制数转换成其他进制,并保留小数部分。由于C语言本身不支持直接处理浮点数的进制转换,这里我们假设输入的是整数。
```c
#include <stdio.h>
#include <stdlib.h> // 引入stdlib库,用于处理内存分配
#define MAX_STACK_SIZE 50
char stack[MAX_STACK_SIZE]; // 定义一个字符型栈
int top = -1; // 栈顶指针初始化为-1
// 助手函数:检查栈是否已满
bool is_stack_full() {
return (top == MAX_STACK_SIZE - 1);
}
// 助手函数:检查栈是否为空
bool is_stack_empty() {
return (top == -1);
}
// 将一个数字添加到栈中
void push(char digit) {
if (!is_stack_full()) {
stack[++top] = digit;
} else {
printf("Stack overflow!\n");
}
}
// 从栈中弹出并打印一个数字
void pop_and_print() {
if (!is_stack_empty()) {
printf("%c", stack[top--]);
} else {
printf("Stack underflow!\n");
}
}
// 十进制转其他进制(举例:十进制转二进制)
void decimal_to_other(int num, int base) {
while (num > 0) {
char digit = '0' + (num % base);
push(digit);
num /= base;
}
pop_and_print(); // 输出结果
}
int main() {
int decimal_num, choice;
printf("Enter the decimal number: ");
scanf("%d", &decimal_num);
printf("Choose a base for conversion: \n");
printf("1. Binary\n");
printf("2. Octal\n");
printf("3. Hexadecimal\n");
scanf(" %d", &choice);
switch(choice) {
case 1:
decimal_to_other(decimal_num, 2); // 十进制转二进制
break;
case 2:
decimal_to_other(decimal_num, 8); // 十进制转八进制
break;
case 3:
decimal_to_other(decimal_num, 16); // 十进制转十六进制
break;
default:
printf("Invalid choice.\n");
break;
}
return 0;
}
```
请注意,这个示例仅适用于整数转换,不包含小数部分。实际应用中,对于浮点数转换,可能需要借助额外的库或者自定义算法来完成。
阅读全文