写一个C语言代码输入十进制整数e,打印e的八进制结果,并在栈中实现
时间: 2024-10-20 12:02:54 浏览: 24
在C语言中,你可以通过以下步骤编写一个程序来输入一个十进制整数e,将其转换为八进制并使用栈数据结构存储这个过程的结果:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h> // 需要包括stdlib.h用于动态分配内存
// 定义栈结构体
typedef struct {
int* stack; // 整型数组作为栈
int top; // 栈顶元素的索引
int capacity; // 栈的最大容量
} Stack;
// 初始化栈
Stack initialize_stack(int size) {
Stack s;
s.stack = (int*)malloc(size * sizeof(int));
s.top = -1;
s.capacity = size;
return s;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top < s->capacity - 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 print_octal(Stack* s) {
char octal[10]; // 存储八进制字符串
sprintf(octal, "%o", pop(s)); // 取出栈顶元素并转化为八进制
printf("%s\n", octal);
}
// 十进制转八进制
void decimal_to_octal(int num, Stack* s) {
while (num > 0) {
push(s, num % 8); // 将余数入栈
num /= 8;
}
// 确保栈顶是最高位
while (!isEmpty(s)) {
print_octal(s);
}
}
// 主函数
int main() {
Stack s = initialize_stack(10); // 创建一个有10个元素的栈
int e;
printf("Enter a decimal number: ");
scanf("%d", &e);
// 转换并入栈
decimal_to_octal(e, &s);
free(s.stack); // 释放栈内存
return 0;
}
```
这个程序首先创建了一个栈来存储转换过程中产生的八进制数字。然后,它读取用户输入的十进制数,将其逐步转换成八进制后存入栈。最后,从栈中依次取出并打印每个八进制数。
阅读全文