#include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef struct { int top; int data[STACK_SIZE]; } Stack; void initStack(Stack* s) { s->top = -1; } int isStackEmpty(Stack* s) { return s->top == -1; } int isStackFull(Stack* s) { return s->top == STACK_SIZE - 1; } void push(Stack* s, int x) { if (isStackFull(s)) { printf("Stack is full\n"); exit(1); } s->data[++s->top] = x; } int pop(Stack* s) { if (isStackEmpty(s)) { printf("Stack is empty\n"); exit(1); } return s->data[s->top--]; } int main() { int n; Stack s; initStack(&s); printf("输入一个十进制数: "); scanf_s("%d", &n); while (n > 0) { push(&s, n % 2); n /= 2; } printf("二进制为: "); while (!isStackEmpty(&s)) { printf("%d", pop(&s)); } printf("\n"); return 0; }将该程序进行分析
时间: 2024-03-04 19:53:34 浏览: 103
C标准库函数集
5星 · 资源好评率100%
这是一个使用栈将十进制数转换为二进制数的程序。
程序首先定义了一个栈的结构体,包含栈顶指针和数据数组。然后定义了一些栈的基本操作,如初始化、判断是否为空、判断是否已满、入栈和出栈。
在主函数中,先输入一个十进制数,然后通过栈将其转换为二进制数并输出。具体实现如下:
1. 定义一个整型变量n,作为输入的十进制数。
2. 定义一个栈s,调用initStack函数初始化栈。
3. 通过scanf_s函数输入一个十进制数n。
4. 使用while循环,当n大于0时,将n对2取余数,并将余数入栈,然后将n除以2,直到n等于0为止。
5. 使用while循环,当栈s不为空时,将栈顶元素出栈,并输出该元素,直到栈s为空为止。
6. 输出一个换行符,结束程序。
需要注意的是,scanf_s函数在Windows平台上相对于scanf函数更加安全,它可以指定输入的最大长度,避免了缓冲区溢出的问题。
阅读全文