c语言实现实验四实现顺序栈; 对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的进制数:编写一个主程序对实现数制转换。
时间: 2024-10-14 09:07:16 浏览: 44
在 C 语言中,我们可以创建一个简单的顺序栈结构来存储非负的十进制整数,并通过递归的方式将其转换成其他进制数。这里我们首先实现一个基本的顺序栈结构,然后编写函数进行转换。
**1. 定义顺序栈(Stack)**
```c
#include <stdio.h>
#define MAX_SIZE 100
// 定义栈结构体
typedef struct {
int stack[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 入栈操作
void push(Stack *s, int value) {
if (is_full(s)) {
printf("Stack overflow.\n");
return;
}
s->stack[++s->top] = value;
}
// 出栈操作
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
return -1;
}
return s->stack[s->top--];
}
// 检查栈是否已满
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
```
**2. 数制转换函数实现**
```c
// 十进制转其他进制(这里仅示例转换到二进制)
int convert_to_binary(int decimal, Stack *s) {
if (decimal == 0) {
printf("%d in binary is ", decimal);
while (!is_empty(s)) {
printf("%d", pop(s));
}
printf("\n");
return 0;
} else {
push(s, decimal % 2);
return convert_to_binary(decimal / 2, s);
}
}
// 主程序入口
int main() {
Stack s;
init(&s);
int input;
printf("Enter a non-negative integer: ");
scanf("%d", &input);
// 转换并检查输入是否合法
if (input >= 0) {
push(&s, input);
convert_to_binary(input, &s);
} else {
printf("Invalid input. Please enter a non-negative integer.\n");
}
return 0;
}
```
**相关问题--:**
1. 这段代码如何处理输入过大导致的栈溢出情况?
2. 如果我想增加其他进制的转换,需要怎么修改 `convert_to_binary` 函数?
3. 主程序中的输入验证是如何实现的?
阅读全文