搜索
查看: 221|回复: 0
打印 上一主题 下一主题

[原创] 80行代码实现四则运算

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2019-6-29 18:24:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上课偷偷玩手机写的一个计算器(=・ω・=)
可以四则运算,支持括号


例子:
输入: 100 + 200
输出: 300
-----------------------------------------

#include<stdio.h>
#include<stdlib.h>

char str[1024];
char peek;
int i = -1;

void next() {
  peek = str[++i];
  if(peek==' ')
  next();
}

double add_sub();
double mul_div();

double jop() {
  next();
  if (peek >= '0' && peek <= '9') {
    char num[24];
    int a=0;
    while (peek >= '0' && peek <= '9') {
      num[a]=peek;
      a++;
      next();
    }
    num[a]='\0';
    i--;
    return atof(num);
  }
  else if(peek=='+'||peek=='-'||peek=='*'||peek=='/')
  {
    return peek== '-' ? -jop() : jop();
  }
  else if(peek=='(')
  {
    double v = add_sub();
    if(peek==')')
    {
      next();
      return v;
    }
    printf("语法错误,缺少右括号\n");
    return 0;
  }
  else
  {
    printf("语法错误!");
    return 0;
   
   }
}

double mul_div()
{
  double val = jop();
  while(peek=='*'||peek=='/')
  {
    if(peek=='*')
      val *=jop();
    else
      val /=jop();
  }
  return val;
}

double add_sub()
{
  double val = mul_div();
  while(peek=='+'||peek=='-')
  {
    if(peek=='+')
      val +=mul_div();
    else
      val -=mul_div();
  }
  return val;
}

int main() {
  printf("输入一个算术表达式:\n");
  scanf("%s", str);
  printf("计算结果=%f\n", add_sub());
}


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表