• <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);
            }


            //////////////////////////////////////////////////
            //    當(dāng)我打到這里時,我已經(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

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

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

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

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

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

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

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

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

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

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

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

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

            久久无码国产| 国内精品久久久久久不卡影院 | 18岁日韩内射颜射午夜久久成人 | 精品免费久久久久国产一区| 久久精品aⅴ无码中文字字幕不卡| 伊人久久大香线蕉综合热线| 四虎影视久久久免费| 亚洲国产成人精品91久久久| 久久国产视频99电影| 婷婷久久综合九色综合绿巨人| 久久精品亚洲精品国产欧美| 久久夜色撩人精品国产| 久久国产影院| yy6080久久| 久久精品国产亚洲av日韩| 精品无码久久久久国产| 久久本道伊人久久| 久久久久久青草大香综合精品| 一本久久a久久精品综合香蕉| 久久人人添人人爽添人人片牛牛| 一本色综合网久久| 国产亚洲欧美成人久久片| 好属妞这里只有精品久久| 国产成人精品久久一区二区三区av | 久久综合丁香激情久久| 国产精品福利一区二区久久| 97精品国产97久久久久久免费| 久久综合久久综合久久| 国产99久久九九精品无码| 欧美日韩精品久久久久| 久久久久无码精品国产不卡| 国产午夜精品久久久久九九电影| 亚洲国产天堂久久久久久| A狠狠久久蜜臀婷色中文网| 精品久久久久久久久久久久久久久| 久久久久亚洲国产| 精品久久久久久| 久久国产欧美日韩精品| 精品久久久久国产免费 | 欧洲成人午夜精品无码区久久 | 99久久婷婷国产一区二区|