【c语言小项目】简单计算器

本文介绍了使用C语言和栈来实现一个简单的计算器。通过创建数字栈和符号栈,根据运算符优先级处理输入的表达式,计算并输出结果。文章还提到了程序存在的局限性,如未处理非法输入,但表示会后续完善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用栈实现表达式求值,具体思路如下:

  • 创建两个栈,一个用来存数字,一个用来存符号。起始,数字栈为空,符号栈底先存一个’\n’用来标记开始,用输入的’\n’标记结尾。

  • 开始处理输入的字符,当字符是运算符号时,根据运算符的优先关系:如果当前符号优先关系大于栈顶符号,入栈;如果小于,则拿出栈顶符号,再从数字栈拿出两个数字进行运算,将结果放在数字栈里;如果等于,说明是两个括号相遇,此时括号内的运算已经完成,将括号脱栈。

  • 遇到用户输入的回车符结束运算,并从数字栈里拿出运算结果。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define STACKMAX 100
#define STACKADD 10


/**********************************符号栈****************************/
typedef struct StackChar
{
    char *base;
    char *top;
    int stacksize;
}SC;

void InitStackSC(SC *S)
{
    S->base = (char*)malloc(STACKMAX*sizeof(char));
    S->top = S->base;
    S->stacksize = STACKMAX;
}

void PushSC(SC *S,char e)
{
    if(S->top - S->base >= S->stacksize)
    {
        S->base = (char*)realloc(S->base,(S->stacksize+STACKADD)*sizeof(char));
        if(!S->base)
            return;
        S->top = S->base + S->stacksize;
        S->stacksize += STACKADD;
    }
    *S->top++ = e;
}
int StackEmptySC(SC* S)
{
    if(S->base == S->top)
        return 1;
    return 0;
}
void PopSC(SC *S,char *e)
{
    *e = *--S->top;
}

char GetTopSC(SC *S)
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值