使用c语言顺序栈实现十进制转换为二进制,八进制和十六进制,写出完整源代码
时间: 2024-05-11 15:16:49 浏览: 103
以下是使用C语言顺序栈实现十进制转换为二进制、八进制和十六进制的完整源代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_MAX_SIZE 100 // 栈的最大空间
typedef struct {
int data[STACK_MAX_SIZE];
int top; // 栈顶位置
} SeqStack;
// 初始化栈
void initStack(SeqStack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(SeqStack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(SeqStack *s) {
return s->top == STACK_MAX_SIZE - 1;
}
// 入栈操作
void push(SeqStack *s, int x) {
if (isFull(s)) {
printf("栈已满,无法入栈!\n");
exit(1);
}
s->data[++s->top] = x;
}
// 出栈操作
int pop(SeqStack *s) {
if (isEmpty(s)) {
printf("栈已空,无法出栈!\n");
exit(1);
}
return s->data[s->top--];
}
// 十进制转二进制
void dec2bin(int n) {
SeqStack s;
initStack(&s);
while (n != 0) {
push(&s, n % 2); // 将余数入栈
n /= 2;
}
printf("二进制为:");
while (!isEmpty(&s)) {
printf("%d", pop(&s)); // 依次出栈
}
printf("\n");
}
// 十进制转八进制
void dec2oct(int n) {
SeqStack s;
initStack(&s);
while (n != 0) {
push(&s, n % 8); // 将余数入栈
n /= 8;
}
printf("八进制为:");
while (!isEmpty(&s)) {
printf("%d", pop(&s)); // 依次出栈
}
printf("\n");
}
// 十进制转十六进制
void dec2hex(int n) {
SeqStack s;
initStack(&s);
char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
while (n != 0) {
push(&s, n % 16); // 将余数入栈
n /= 16;
}
printf("十六进制为:");
while (!isEmpty(&s)) {
printf("%c", hex[pop(&s)]); // 依次出栈转为对应的十六进制字符
}
printf("\n");
}
int main() {
int n;
printf("请输入一个十进制数:");
scanf("%d", &n);
dec2bin(n);
dec2oct(n);
dec2hex(n);
return 0;
}
```
当您运行这份代码时,您将得到以下输出(当输入40时):
```
请输入一个十进制数:40
二进制为:101000
八进制为:50
十六进制为:28
```
请注意,此代码仅在输入为正整数时有效。
阅读全文