• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ζ∽∑∏∞ψ

            cedricporter -- [ QQ: 414112390 ]

            計算器 - 棧的實現

             

            /////////////////////////////////////////////////////////////
            // File Name :    calculator.cpp
            /////////////////////////////////////////////////////////////
            // 本程序名為        計算器 
            //
            // 小菜技術有限,程序難免有不足和錯誤,望各位高手多多指教
            //        編程序的時間緊促,功能不全,今后會加以改進 
            //           小菜的QQ:414112390     Q群:7196588 
            //      Make By : Cedric Porter [Stupid ET] ~華肥~
            /////////////////////////////////////////////////////////////

            #include 
            <iostream>
            #include 
            <stack>
            #include 
            <list>
            #include 
            <cmath>
            #define NDEBUG

            using namespace std;

            double toi(char*int*);
            int test(char);

            stack
            <double, list<double> > num;
            stack
            <char, list<char> > op;

            int main()
            {

                op.push(
            '\0');

                
            char exp[100];
                cin.getline(exp, 
            100'\n');

                
            int n = 0;
                
            int len;
                len 
            = strlen(exp);

            #ifndef NDEBUG
                cout 
            << exp << endl;
            #endif 

                
            while (exp[n] != '\0')
                
            {
                    
            if (exp[n] == ' ')
                    
            {
                        
            for (int nn = n + 1;nn < len; nn++)
                            exp[nn
            -1= exp[nn];
                        len
            --;
                        n
            --;
                    }

                    n
            ++;
                }

                exp[len] 
            = '\0';

            #ifndef NDEBUG
                cout 
            << exp;
            #endif 

                
            int k; 
                k 
            = 0;

                
            int flag = 1;

                
            char c;
                c 
            = exp[0]; 

                
            while (flag)
                
            {
                    
            if (c >= '0' && c <= '9' || c == '.')
                        num.push(toi(exp, 
            &k));
                    
            else if (c == '(' || test(c) > test(op.top()))
                    
            {
                        op.push(c);
                        k
            ++;
                    }

                    
            else if (c == '\0' && op.top() == '\0')
                        flag 
            = 0;
                    
            else if (c == ')' && op.top() == '(')
                    
            {
                        op.pop();
                        k
            ++;
                    }

                    
            else if (test(c) <= test(op.top()))
                    
            {
                        
            double y = num.top();
                        num.pop();
                        
            double x = num.top();
                        num.pop();
                        c 
            = op.top();
                        op.pop();
                        
            switch (c)
                        
            {
                        
            case '*': x *= y; break;
                        
            case '/': x /= y; break;
                        
            case '+': x += y; break;
                        
            case '-': x -= y; break;
                        
            case '^': x = pow(x, y); break;
                        
            default : cout << "Error!!\n"break;
                        }

                        num.push(x);
                    }

                    c 
            = exp[k];
                }

                cout 
            << endl << exp << " = " << num.top() << endl << endl;

                system(
            "pause");

                
            return 0;
            }


            double toi(char* c, int* k)
            {
                
            double x, y = 1.0;
                
            int flag = 1;
                
            char s;
                x 
            = 0.0;
                s 
            = c[*k];
                
            while (s >= '0' && s <= '9' || s == '.')
                
            {
                    
            *= *+ 1;
                    
            if (s >= '0' && s <= '9')
                        
            if (flag == 1)
                            x 
            = 10*+ (s - 48); 
                        
            else
                        
            {
                            y 
            *= 0.1;
                            x 
            += y * (s - 48);
                        }

                    
            else 
                        flag 
            = 0;
                    s 
            = c[*k];
                }


                
            return (x);
            }


            int test(char c)
            {
                
            int x;
                
            switch (c)
                
            {
                
            case '^' : x = 3break;
                
            case '*' : x = 2break;
                
            case '/' : x = 2break;
                
            case '+' : x = 1break;
                
            case '-' : x = 1break;
                
            case '(' : x = 0break;
                
            case ')' : x = 0break;
                
            case '\0' : x = -1break;
                }

                
            return (x);
            }


            //////////////////////////////////////////////////
            //    當我打到這里時,我已經經過了n次吐血 
            //////////////////////////////////////////////////
            //
            //    總結:用Dev C++ 這個編譯器非常不爽,對代碼錯誤的
            //     提示不足。這個程序的未知錯誤,Dev C++居然找不到。 
            //    姜還是老的辣,還是VC++ 糾錯能力強些.
            ////////////////////////////////////////////////// 



            posted on 2009-08-13 11:32 Stupid ET 閱讀(1890) 評論(6)  編輯 收藏 引用 所屬分類: Language

            評論

            # re: 計算器 - 棧的實現 2009-08-13 12:13 pear_li

            一秒鐘然你程序崩潰,輸入:
            *
              回復  更多評論   

            # re: 計算器 - 棧的實現 2009-08-13 15:15 Stupid ET

            嗯嗯...我也覺得,好像語法檢查對于我來說頗難。看來到大學要認真學習編程才行了...@pear_li
              回復  更多評論   

            # re: 計算器 - 棧的實現 2009-08-14 08:36 guest

            1:題目應該叫計算器的實現。。。。。
            2:Dev C++是個IDE,不是編譯器。

            從小養成習慣還是好的,不要混淆概念。  回復  更多評論   

            # re: 計算器 - 棧的實現 2009-08-14 10:58 Stupid ET

            @guest
            哦...不好意思....原來我真的沒有編譯器和IDE的概念...-_-||....  回復  更多評論   

            # re: 計算器 - 棧的實現 2009-08-14 20:23 9cat

            本人主頁里有個比較基礎的表達式求值實現,包含了中后綴轉換和后綴求值  回復  更多評論   

            # re: 計算器 - 棧的實現 2009-08-14 20:24 9cat

            剛才的主頁地址錯了,不好意思,blog.csdn.net/vbspine 這個是對的
              回復  更多評論   

            久久精品国产亚洲77777| 人妻无码中文久久久久专区| 国产成人精品综合久久久久| 色99久久久久高潮综合影院 | 中文字幕无码久久精品青草| 亚洲婷婷国产精品电影人久久| 91精品观看91久久久久久| 一级做a爱片久久毛片| 国产精品久久久久久久久鸭 | 国产亚洲美女精品久久久| 日韩精品无码久久一区二区三| 国内精品久久久久影院网站| 久久精品国产一区二区| 亚洲精品国精品久久99热一| 欧美亚洲国产精品久久蜜芽| 日韩久久无码免费毛片软件| 性做久久久久久久久久久| 亚洲国产精品成人AV无码久久综合影院| 久久久91人妻无码精品蜜桃HD| 亚洲AⅤ优女AV综合久久久| 一本一道久久a久久精品综合| 精品多毛少妇人妻AV免费久久| 国内精品久久久久影院日本 | 久久人人青草97香蕉| 久久91精品国产91久久小草| 色8激情欧美成人久久综合电| 久久久久久久久66精品片| 久久人人爽人人人人爽AV| 国内精品久久久久久久97牛牛 | 人妻无码久久精品| 无码人妻少妇久久中文字幕蜜桃| 国产∨亚洲V天堂无码久久久| 久久国产美女免费观看精品 | 成人资源影音先锋久久资源网| 99国内精品久久久久久久| 色妞色综合久久夜夜| 久久人人超碰精品CAOPOREN| 热久久这里只有精品| 久久久亚洲裙底偷窥综合| 国产91久久综合| 国产亚洲成人久久|