• <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 閱讀(1896) 評論(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 這個是對的
              回復  更多評論   

            国产99久久久国产精品小说| 久久久久久精品无码人妻| jizzjizz国产精品久久| 国产精品欧美久久久天天影视| 国产三级久久久精品麻豆三级| 久久综合久久综合九色| 亚洲欧洲精品成人久久奇米网| 久久亚洲AV成人出白浆无码国产 | 色综合久久无码中文字幕| 久久国产精品99精品国产| 精品国产综合区久久久久久| 午夜精品久久久久久中宇| 国产AⅤ精品一区二区三区久久| 麻豆av久久av盛宴av| 97精品伊人久久久大香线蕉| 精品综合久久久久久98| 久久久91人妻无码精品蜜桃HD| 亚洲国产精品成人久久| 色婷婷久久综合中文久久一本| 99久久精品日本一区二区免费| 午夜精品久久久久| 久久99精品久久久久久齐齐| 国产精品久久影院| 久久久久人妻精品一区二区三区| 污污内射久久一区二区欧美日韩| 久久国产乱子伦精品免费强| 色狠狠久久AV五月综合| 久久久亚洲裙底偷窥综合 | 麻豆成人久久精品二区三区免费 | 亚洲精品无码久久久久AV麻豆| 国产精品VIDEOSSEX久久发布| 国产亚洲精久久久久久无码 | 久久人人爽爽爽人久久久| 欧美色综合久久久久久| 99久久国产综合精品网成人影院| 久久亚洲欧美国产精品| 久久精品国产亚洲77777| 久久久久久亚洲精品成人| 精品蜜臀久久久久99网站| 国产精品禁18久久久夂久| 国产欧美久久久精品|