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

            計(jì)算器 - 棧的實(shí)現(xiàn)

             

            /////////////////////////////////////////////////////////////
            // File Name :    calculator.cpp
            /////////////////////////////////////////////////////////////
            // 本程序名為        計(jì)算器 
            //
            // 小菜技術(shù)有限,程序難免有不足和錯(cuò)誤,望各位高手多多指教
            //        編程序的時(shí)間緊促,功能不全,今后會(huì)加以改進(jìn) 
            //           小菜的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)我打到這里時(shí),我已經(jīng)經(jīng)過了n次吐血 
            //////////////////////////////////////////////////
            //
            //    總結(jié):用Dev C++ 這個(gè)編譯器非常不爽,對(duì)代碼錯(cuò)誤的
            //     提示不足。這個(gè)程序的未知錯(cuò)誤,Dev C++居然找不到。 
            //    姜還是老的辣,還是VC++ 糾錯(cuò)能力強(qiáng)些.
            ////////////////////////////////////////////////// 



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

            評(píng)論

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

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

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

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

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

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

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

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

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

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

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

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

            剛才的主頁地址錯(cuò)了,不好意思,blog.csdn.net/vbspine 這個(gè)是對(duì)的
              回復(fù)  更多評(píng)論   

            欧美精品一本久久男人的天堂| 久久久久久久97| 国产三级精品久久| 久久五月精品中文字幕| 色99久久久久高潮综合影院| 久久精品亚洲AV久久久无码| 久久久一本精品99久久精品66| 久久99国产精品久久| 亚洲国产成人精品91久久久| 久久夜色精品国产噜噜亚洲AV | 久久精品国产免费观看三人同眠| 色狠狠久久AV五月综合| 久久精品国产黑森林| 久久九九精品99国产精品| 久久人人爽人爽人人爽av| 伊人久久无码中文字幕| 日韩亚洲国产综合久久久| 97r久久精品国产99国产精| 国产精品成人久久久久久久| 久久青青草原精品国产软件| 国产精品久久久久久一区二区三区 | 99久久婷婷国产综合亚洲| 蜜桃麻豆WWW久久囤产精品| 国内精品久久久久久中文字幕| 一本久道久久综合狠狠爱| 久久精品无码一区二区三区日韩| 久久久婷婷五月亚洲97号色| 成人综合久久精品色婷婷| 久久久久亚洲AV成人网人人网站| 99久久久精品| 国产91色综合久久免费| 久久人人爽人人爽人人AV| 久久久久亚洲AV片无码下载蜜桃 | 久久精品国产精品青草app| 色综合久久久久综合体桃花网 | 99久久精品费精品国产| 国内精品伊人久久久久av一坑| 五月丁香综合激情六月久久| 亚洲精品tv久久久久久久久 | 99999久久久久久亚洲| 久久99精品久久久久久久不卡|