使写c语言写一程序,利用顺序栈将一个十进制整数转换成八进制整数,要求输入一个十进制数,输出一个八进制数;
时间: 2024-12-06 19:25:30 浏览: 157
在C语言中,我们可以创建一个顺序栈结构来实现十进制到八进制的转换。这里需要准备一个栈来存储转换过程中的中间结果,并在遍历过程中逐步计算八进制值。以下是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序栈结构体
typedef struct {
int* data; // 存储数据的数组
int top; // 栈顶指针
int capacity; // 初始容量
} Stack;
// 初始化栈
void init(Stack* stack, int size) {
stack->data = (int*)malloc(size * sizeof(int));
stack->top = -1;
stack->capacity = size;
}
// 入栈操作
void push(Stack* stack, int value) {
if(stack->top < stack->capacity - 1) {
stack->top++;
stack->data[stack->top] = value;
} else {
printf("Stack overflow!\n");
}
}
// 出栈操作
int pop(Stack* stack) {
if(stack->top >= 0) {
return stack->data[stack->top--];
} else {
return -1; // 如果栈空则返回错误码
}
}
// 转换函数
int decimal_to_octal(int decimal) {
Stack octal_stack;
init(&octal_stack, 10); // 预计最大8位八进制数
while(decimal > 0) {
push(&octal_stack, decimal % 8);
decimal /= 8;
}
// 反向出栈并拼接得到八进制数
char octal_str[10];
for(int i = 0, j = 0; i <= octal_stack.top; ++i) {
octal_str[j++] = '0' + pop(&octal_stack);
}
octal_str[j] = '\0'; // 添加字符串结束符
printf("十进制数 %d 的八进制表示为:%s\n", decimal, octal_str);
free(octal_stack.data); // 释放内存
return 0;
}
int main() {
int decimal_num;
printf("请输入一个十进制数:");
scanf("%d", &decimal_num);
if(decimal_num < 0) {
printf("负数无法直接转化为八进制。\n");
} else {
decimal_to_octal(decimal_num);
}
return 0;
}
```
这个程序首先定义了一个顺序栈结构,并实现了初始化、入栈和出栈操作。然后,`decimal_to_octal` 函数会处理十进制数到八进制的转换,通过循环不断将余数压入栈,最后再从栈中反向取出形成八进制数。
阅读全文
相关推荐


















