#include <stdio.h>

//仔细分析有代表性的实例,发现规律.

typedef struct node        // 结点类型定义    
{    
  float data;    
  bool sign;
        struct node *lchild;    
        struct node *rchild;    
}BTNode;

BTNode *create(char *str,int n)        // 创建代数表达式对应的二叉树    
{    
  BTNode *root = NULL;     //始终指向当前已经生成的二叉树的根
        BTNode *p = NULL;             //始终指向当前待处理结点
        float ch;    
        int j = 0;    
        ch = str[j];    
  while(ch != '\0' && j < n)    
  {    
    if(ch == '0' || ch == '1' ||ch == '2' ||ch == '3'||ch == '4' ||
      ch == '5' || ch == '6' || ch == '7' || ch == '8'|| ch == '9')    
    {    
        
      p = new BTNode;    
                        p->data = ch;    
                        p->sign = false;
      if(root == NULL)        
        root = p;    
      else if(root->rchild == NULL)        
        root->rchild = p;    
      else        
        root->rchild->rchild=p;        
    }

else if(ch == '+' || ch == '-')
        {
      p = new BTNode;    
      p->data = ch;    
      p->sign = true;
      p->rchild = NULL;    
      p->lchild = root;    
      root = p;    
      root->rchild = NULL;    
        }
        else if(ch == '*' || ch == '/')
        {
      if(root->data >= '0' && root->data <= '9' || root->data == '*' || root->data == '/')    
      {        
        p=new BTNode;    
        p->data = ch;    
        p->sign = true;
        p->rchild = NULL;    
        p->lchild = root;    
        root = p;    
      }    
      else    
      {    
        p = new BTNode;    
        p->data = ch;    
        p->sign = true;
        p->lchild = root->rchild;    
        root->rchild = p;    
        p->rchild = NULL;    
      }    
        }    
        j++;    
        ch=str[j];    
  }    
  return root;    
}    
float result(BTNode *b) //计算表达式    
{    
    float n1,n2;    
    if(b->data >= '0' && b->data <= '9')    
        return (b->data - '0');

n1 = result(b->lchild);//计算左子表达式
    n2 = result(b->rchild);//计算右子表达式    
    
    if (b->sign == true && b->data == '+')
     b->data = n1 + n2;
    else if (b->sign == true && b->data == '-')
     b->data = n1 - n2;    
    else if (b->sign == true && b->data == '*')
     b->data = n1 * n2;        
    else if (b->sign == true && b->data == '/')
     b->data = n1 / n2;

return b->data;    
}    
void main()    
{    
  while(true)
  {
    BTNode static *b=NULL,*q=NULL;    
    char str[100];
    printf("请输入符合要求的代数表达式:");    
    scanf("%s",str);    
    int n=0,i=0;    
    while(str[i++] != '\0')    
      n++;    
    b = create(str,n);    
    printf("该表达式的值为:%f\n", result(b));    
  }

}

转载于:https://blog.51cto.com/howin45/315936

二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)相关推荐

  1. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /** * ...

  2. C语言计算表达式咋写,C语言如何计算表达式(x++)+(++x)+(x++)

    满意答案 wqnn2980 2013.06.17 采纳率:51%    等级:12 已帮助:6027人 我原来在别的贴回答过这样的问题, 这里再发一次, 如果你没看明白中间的, 你就记住开头和结尾就行 ...

  3. 几种生成验证码的方式以及计算表达式的计算

    kaptcha 数字字母形式验证码 google kaptcha验证码生成器且可以配置生成的验证码格式 引入依赖: <dependency><groupId>com.githu ...

  4. C语言实现中缀转后缀并计算表达式结果

    文章目录 一.问题描述 二.AC代码 三.注意点 四.实现思路/代码解析 一.问题描述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2   ...

  5. matlab计算表达式 k,刘卫国 Matlab 例题 1-3章

    第一章 例1.1 分别绘制函数和的曲线. x=-2*pi:pi/180:2*pi; plot(x,2.^(-abs(x)),':',x,sin(x)); 例1.2 求方程 2x5-3x3 +71x2- ...

  6. 计算表达式结果(支持带括号的加减乘除以及乘幂和小数运算)

    以(1.22+((3.43+54.54)*8^3*9)-3*(2+4*2-1))/10+9^3这个表达式为例吧.首先先分析一下这个表达式,有括号,括号的优先级最高,其次有乘幂和乘除,应该是先算乘幂再算 ...

  7. php字符串转换表达式,php处理字符串格式的计算表达式

    有时候我们对每一种产品都有一个提成公式,而这个计算提成的公式是以字符串格式存在表中的 当我们用这个计算公式时,他并不像我们写的:$a=2+3*5;这样简单的能计算出结果,而它是个字符串 所以,我们就必 ...

  8. 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法

    异常:本机框架位于调用堆栈之上,无法计算表达式的值 原因: 如果使用 Response.End.Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbo ...

  9. LeetCode Basic Calculator(用栈计算表达式的值)

    题意:给出一个计算表达式,只包含 +,-,(,),求计算结果 思路:用栈来实现 代码如下: public class Solution {private int cal(int num1, int n ...

最新文章

  1. PHP框架之间有什么区别,php框架和设计模式区别
  2. docker安装elasticsearch和kibana
  3. java游戏贪吃蛇_Java实现贪吃蛇游戏
  4. Linux kernel 国内repo
  5. C++之new和delete探究
  6. spring security reactive获取security context
  7. [转载] R语言read.table函数
  8. VC设置cookies实现文件刷下载量
  9. u盘最大单个文件支持多少g_解决U盘拷贝时提示文件过大问题(不能拷贝超过4个g的文件)...
  10. CSS学习(一)--选择器
  11. Python语言的适用范围
  12. db2和相关驱动的下载
  13. 黑马程序员-反射-constructor-feld类-Method-数组的反射-反射的作用
  14. 借助CatGPT让turtlesim小乌龟画曲线
  15. Hadoophbase监控页面未授权访问漏洞处理方案验证过程实现
  16. 用户 不在 sudoers 文件中。此事将被报告
  17. LIO-SAM中的scan_to_map原理剖析
  18. C++ 取整,四舍五入
  19. ViewPager的setOnPageChangeListener方法详解
  20. 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询...

热门文章

  1. elasticsearch不能使用root启动问题解决
  2. You are running Composer with SSL/TLS protection disabled.
  3. MySQL学习笔记(三)
  4. linux系统终端介绍
  5. 配置使用EF6.0常见的一些问题及解决方案
  6. Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
  7. ARM LCD简单绘图API
  8. AMF(Action Message Format)其它语言对象转ActionScript对象[转]
  9. jQuery 基础学习笔记
  10. Linux学习系列之Nginx调优实战