标题:c语言的算术表达式
只看楼主
wu10045125
Rank: 1
来 自:江西抚州
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-10-17
结帖率:50%
已结贴  问题点数:20 回复次数:6 
c语言的算术表达式
比如当你输入  23.55+20.25# 时 #是结束标志  当我定义一个float的栈是  将我转过来的值23.550000传入栈中时  值就变成了23.549999 不知道有谁知道啊!
核心代码是
ElemType ch,x;
    float y1=0.0f,y2=0.0f,s,r=0.0f,j=1.0f,k=0.0f;
    push(Z,'#');
    printf("输入算式(以#号结束):");
    ch=getchar();
    gettop(Z,x);
    while(ch != '#' || x != '#')
    {
        
       if(panduan(ch))
           switch(youxianji(x,ch))
       {
            case '<':push(Z,ch);
                ch=getchar();
                break;
            case '=':pop(Z,x);
                ch=getchar();
                break;
            case '>':pop(Z,x);
                pop1(S,y2);
                pop1(S,y1);
                push1(S,operate(y1,y2,x));
       }
       else if(ch >='0' && ch <= '9' || ch == '.')
       {
              s=0.0f;
            
            
              while(ch >= '0' && ch <= '9')
              {
                  s=s*10+ch-48.0f;
                  ch=getchar();
              }

           
         
           
          if(ch == '.')
           {
               ch=getchar();
               r=ch-48.0f;
               r=r/10.0f;
                      j=1.0f/10;
                    printf("r=%f \n j=%f \n",r,j);
        
               ch=getchar();
               while(ch >= '0' && ch <= '9' )
               {
                     j=j/10.0f;
                     r=r+(ch-48)*j;

                     printf("r=%f \n j=%f \n",r,j);
                     ch=getchar();
               }
          }
               
               k=s+r;
               printf("数为:%f \n",k);
               push1(S,k);
               pop1(S,k);
               printf("数为1:%f \n",k);
              
           }
       else
       {
           printf("您输入了非法字符!!!");
           exit(1);
       }

        gettop(Z,x);
      
搜索更多相关主题的帖子: c语言 标志 表达式 
2012-03-05 22:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:10 
第一,不是所有十进制数都可以精确转换为二进制表示,而计算机是使用二进制的。
第二,数据类型的精度与字长正相关,float是浮点数中最低精度的。

授人以渔,不授人以鱼。
2012-03-05 22:16
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:10 
有点误差很正常,如果不影响使用就不用管它了。
2012-03-05 22:25
wu10045125
Rank: 1
来 自:江西抚州
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-10-17
得分:0 
可是我再用23.55+20.25运行的答案是43.800000  我只是把23.550000传给push1();怎么会丢失精度呢!
2012-03-05 23:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
答案不就应该是 43.8 吗?有什么问题。
2012-03-06 00:21
wu10045125
Rank: 1
来 自:江西抚州
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-10-17
得分:0 
但是显示的答案是 43.799999     不知为啥???
2012-03-06 09:28
wu10045125
Rank: 1
来 自:江西抚州
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-10-17
得分:0 
运行图
2012-03-06 09:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362301-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020573 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved