CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

紧急求救!帮忙啦!谢谢!

楼主believebowps(I love .NET)2003-06-02 11:49:09 在 专题开发/技术/项目 / 数据结构与算法 提问

完成一个科学计算器算出3*(2-5)+4%6  
   
  就是这个问题啦! 问题点数:100、回复次数:5Top

1 楼dcyu(Dd)回复于 2003-06-02 12:27:05 得分 50

偶倒是收藏了一个四则运算器:  
  http://vip.6to23.com/dcyu/TurboC/senior/8.html  
  科学计算器难度就高了些。Top

2 楼believebowps(I love .NET)回复于 2003-06-02 13:04:25 得分 0

不是啦,我只需要一些核心代码就行了.  
  谢谢.  
  ^_^Top

3 楼believebowps(I love .NET)回复于 2003-06-02 13:16:21 得分 0

谁能帮我呀!就是需要一些代码呀!  
  呜呜~~~~~~~~~~~~~~~Top

4 楼mmmcd(超超)回复于 2003-06-02 13:28:38 得分 50

这是我所收藏的之一,还可以用  
  /*  
  Program   Name:   Mathematical   Expression   Calculator(using   stacks,in   ANSI   C)  
  Language:ANSI   C  
  Author:   Feng   ziqiao  
  Date:   2003-03-02  
  */  
  #include<stdio.h>  
  #include<stdlib.h>  
  #include<string.h>  
  #include<ctype.h>  
  #include<math.h>  
  #define   Max   100  
  #define   PLS   '+'  
  #define   MIN   '-'  
  #define   MUL   '*'  
  #define   DIV   '/'  
  #define   LB   '('  
  #define   RB   ')'  
  #define   POW   '^'  
  #define   FAC   '!'  
  #define   END   ';'  
  #define   PI   3.141592653589793238L  
  #define   E   2.71828182845904523L  
  long   double   Factorial(long   double   n)  
   
   
          {   long   double   i,Fac;  
          Fac=1.0;  
          for(i=1.0;i<=n;i+=1.0)  
          Fac*=i;  
          return   Fac;  
  }  
  int   SymCmp(char   s1,char   s2)  
   
   
          {   if(s1==LB||s2==LB)   return   -1;  
          if(s2==RB||s2==END)   return   1;  
          if(s1==FAC)  
   
   
                  {   if(s2==FAC)   return   0;  
                  else   return   1;  
          }  
          if(s1==POW)  
   
   
                  {   if(s2==FAC)   return   -1;  
                  if(s2==POW)   return   0;  
          }  
          else   if(s1==MUL||s1==DIV)  
   
   
                  {   if(s2==FAC||s2==POW)   return   -1;  
                  if(s2==MUL||s2==DIV)   return   0;  
          }  
          else   if(s1==PLS||s1==MIN)  
   
   
                  {   if(s2==PLS||s2==MIN)   return   0;  
          }  
          return   1;  
  }  
  int   main()  
   
   
          {   char   symbol[Max];  
          long   double   number[Max];  
          char   expr[100];  
          int   i,j,len,stop=0,ntop=0;  
          scanf("%s",expr);  
          len=strlen(expr);  
          expr[len]=END;  
          expr[len+1]=0;  
          len++;  
          for(i=0;i<len;i++)  
   
   
                  {   if(isdigit(expr[i]))  
   
   
                          {   number[ntop++]=(long   double)atof(expr+i);  
                          while(isdigit(expr[i])||expr[i]=='.')  
                          i++;  
                  }  
                  else   if(isalpha(expr[i]))  
   
   
                          {   if(expr[i]=='p'||expr[i]=='P')  
   
   
                                  {   number[ntop++]=PI;  
                                  i++;  
                          }  
                          else   if(expr[i]=='e'||expr[i]=='E')  
                          number[ntop++]=E;  
                  }  
                  if(ispunct(expr[i]))  
   
   
                          {   symbol[stop++]=expr[i];  
                          while(stop>1)  
   
   
                                  {   if(symbol[stop-2]==LB&&symbol[stop-1]==RB)  
                                  {   stop-=2;  
                                    continue;  
                                  }  
                                  if(SymCmp(symbol[stop-2],symbol[stop-1])>=0)  
                                  {   switch(symbol[stop-2])  
                                    {   case   PLS:  
                                    number[ntop-2]+=number[ntop-1];  
                                    break;  
                                  case   MIN:  
                                    number[ntop-2]-=number[ntop-1];  
                                    break;  
                                  case   MUL:  
                                    number[ntop-2]*=number[ntop-1];  
                                    break;  
                                  case   DIV:  
                                    number[ntop-2]/=number[ntop-1];  
                                    break;  
                                  case   POW:  
                                    number[ntop-2]=powl(number[ntop-2],number[ntop-1]);  
                                    break;  
                                  case   FAC:  
                                    number[ntop-1]=Factorial(number[ntop-1]);  
                                    ntop++;  
                                    break;  
                                    }  
                                    symbol[stop-2]=symbol[stop-1];  
                                    stop--;ntop--;  
                                  }  
                                  else   break;  
                          }  
                  }  
          }  
          printf("%.18Lf\n",number[0]);  
          return   0;  
  }Top

5 楼believebowps(I love .NET)回复于 2003-06-02 13:56:53 得分 0

谢谢各位!  
  哈哈Top

相关问题

  • 紧急,紧急!
  • !!!!!!!!!!!!!紧急
  • !!紧急!!
  • 紧急~~~~~~~~~~~~~~~~~~
  • 紧急~~~~~~~~~~~~~~~~~~
  • 紧急!!!
  • 紧急!!!
  • 紧急
  • 紧急
  • 紧急

关键词

  • ntop
  • fac
  • stop
  • symbol
  • number
  • define
  • break
  • case
  • double
  • include

得分解答快速导航

  • 帖主:believebowps
  • dcyu
  • mmmcd

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo