啊哈磊_编程从这里起步

标题: 80行代码实现四则运算 [打印本页]

作者: 小创    时间: 2019-6-29 18:24
标题: 80行代码实现四则运算
上课偷偷玩手机写的一个计算器(=・ω・=)
可以四则运算,支持括号


例子:
输入: 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());
}







欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2