用c语言 实现 利用栈实现数制转换:将十进制数 转换为二进制数输出,其转换方法利用辗转除以2取余数法。 顺序栈初始化栈顶为-1源代码
时间: 2024-10-12 16:06:45 浏览: 154
在C语言中,你可以使用数组作为栈来实现数制转换,这里我会给出一个简单的示例,演示如何将十进制数转换成二进制数。首先,我们需要创建一个栈结构体,然后定义一个函数来执行辗转相除的过程。下面是基本的源代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int top; // 栈顶指针
int stack[50]; // 顺序栈,假设最多存储25位二进制数(因为1位对应1个二进制数)
} Stack;
// 初始化栈
void init(Stack* s) {
s->top = -1;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top < sizeof(s->stack) - 1) {
s->stack[++s->top] = value;
} else {
printf("Stack overflow.\n");
}
}
// 出栈操作
int pop(Stack* s) {
if (s->top >= 0) {
return s->stack[s->top--];
} else {
printf("Stack underflow.\n");
return -1;
}
}
// 将十进制转为二进制并入栈
void decimalToBinary(int num, Stack* s) {
while (num > 0) {
push(s, num % 2);
num /= 2;
}
}
// 打印栈内容(即二进制数)
void printStack(Stack* s) {
int i;
for (i = 0; i <= s->top; ++i) {
printf("%d", pop(s)); // 由于栈是从下往上出栈,所以打印时需要反向
}
printf("\n");
}
int main() {
Stack binaryStack;
init(&binaryStack);
int decimalNum;
printf("Enter a decimal number: ");
scanf("%d", &decimalNum);
decimalToBinary(decimalNum, &binaryStack);
printStack(&binaryStack);
return 0;
}
```
这个程序首先通过`decimalToBinary`函数将输入的十进制数转换成二进制,并依次入栈。最后,`printStack`函数用于打印栈里的二进制数。
阅读全文