• <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 ]

            計算器 - 棧的實現(xiàn)

             

            /////////////////////////////////////////////////////////////
            // File Name :    calculator.cpp
            /////////////////////////////////////////////////////////////
            // 本程序名為        計算器 
            //
            // 小菜技術(shù)有限,程序難免有不足和錯誤,望各位高手多多指教
            //        編程序的時間緊促,功能不全,今后會加以改進 
            //           小菜的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);
            }


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



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

            評論

            # re: 計算器 - 棧的實現(xiàn) 2009-08-13 12:13 pear_li

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

            # re: 計算器 - 棧的實現(xiàn) 2009-08-13 15:15 Stupid ET

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

            # re: 計算器 - 棧的實現(xiàn) 2009-08-14 08:36 guest

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

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

            # re: 計算器 - 棧的實現(xiàn) 2009-08-14 10:58 Stupid ET

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

            # re: 計算器 - 棧的實現(xiàn) 2009-08-14 20:23 9cat

            本人主頁里有個比較基礎(chǔ)的表達式求值實現(xiàn),包含了中后綴轉(zhuǎn)換和后綴求值  回復  更多評論   

            # re: 計算器 - 棧的實現(xiàn) 2009-08-14 20:24 9cat

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

            久久精品国产亚洲AV久| 久久国产精品无码一区二区三区 | 欧美一级久久久久久久大| 国产精品久久久久jk制服| 少妇内射兰兰久久| 久久WWW免费人成一看片| 热99RE久久精品这里都是精品免费| 精品无码人妻久久久久久| 久久久艹| 99久久这里只精品国产免费 | 久久综合亚洲色一区二区三区| 久久久久亚洲AV无码专区网站| 激情久久久久久久久久| 精品久久久久久无码中文字幕| 国产一区二区精品久久凹凸| 国产一区二区精品久久凹凸 | 久久精品女人天堂AV麻| 青青草国产97免久久费观看| 久久免费99精品国产自在现线 | 99久久无色码中文字幕| 爱做久久久久久| 亚洲伊人久久综合影院| 亚洲va国产va天堂va久久| 久久久久亚洲AV成人片| 亚洲午夜久久影院| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久久精品国产sm调教网站| 青青青国产成人久久111网站| 久久激情亚洲精品无码?V| 香蕉久久夜色精品国产尤物| 亚洲va久久久噜噜噜久久男同| 99re这里只有精品热久久| 久久亚洲国产精品123区| 亚洲精品无码久久久久去q| 人人狠狠综合久久亚洲婷婷| 久久国产AVJUST麻豆| 成人国内精品久久久久一区| 一本久久综合亚洲鲁鲁五月天| 麻豆亚洲AV永久无码精品久久| 99久久精品国产一区二区三区| 99久久国产精品免费一区二区|