写一个c语言程序,利用顺序栈实现十进制转换十二进制,十进制转换八进制,十进制转换十六进制
时间: 2023-04-04 13:02:29 浏览: 232
好的,我可以回答这个问题。以下是一个使用顺序栈实现十进制转换为十二进制、八进制和十六进制的C语言程序:
```
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == STACK_SIZE - 1;
}
void push(Stack *s, int x) {
if (is_full(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
void convert(int n, int base) {
Stack s;
init(&s);
while (n > 0) {
push(&s, n % base);
n /= base;
}
while (!is_empty(&s)) {
int digit = pop(&s);
if (digit < 10) {
printf("%d", digit);
} else {
printf("%c", digit - 10 + 'A');
}
}
}
int main() {
int n;
printf("Enter a decimal number: ");
scanf("%d", &n);
printf("Decimal to binary: ");
convert(n, 2);
printf("\n");
printf("Decimal to octal: ");
convert(n, 8);
printf("\n");
printf("Decimal to hexadecimal: ");
convert(n, 16);
printf("\n");
return 0;
}
```
这个程序使用了一个顺序栈来实现进制转换。首先,我们定义了一个`Stack`结构体来表示栈,其中`top`表示栈顶的位置,`data`数组用来存储栈中的元素。然后,我们定义了一些基本的栈操作,如`init`、`is_empty`、`is_full`、`push`和`pop`。这些操作都是比较常见的,不需要过多解释。
接下来,我们定义了一个`convert`函数来实现进制转换。这个函数接受两个参数:一个十进制数`n`和一个目标进制`base`。我们首先创建一个空栈`s`,然后使用一个循环将`n`转换为目标进制,并将每一位数字压入栈中。最后,我们使用另一个循环从栈中弹出每一位数字,并将其打印出来。如果数字小于10,则直接打印数字;否则,我们将其转换为对应的大写字母并打印出来。
在`main`函数中,我们首先读入一个十进制数`n`,然后分别调用`convert`函数将其转换为二进制、八进制和十六进制,并打印出来。
希望这个程序能够帮助你理解如何使用顺序栈实现进制转换。
阅读全文