青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

最近在網(wǎng)上看到一個(gè)求解數(shù)學(xué)表達(dá)式程序,感覺(jué)很不錯(cuò),故拿出來(lái)修改之后供大家一起分享.
程序如下:
#include <ctype.h> //打開庫(kù)文件
#include <stdio.h>
#include <iostream.h>
#include <malloc.h>
#include <process.h>
#include <string.h>

#define error 0
#define ok 1
typedef struct{
? int *base;
? int *top;
? int stacksize;
}sqstack;

class CExpression
{
public:
?CExpression();
?~CExpression();
public:
?void initstack(sqstack &s);
?int gettop(sqstack &s);
?void push(sqstack &s,int e);
?int pop(sqstack &s,int &e);
?int setfind(char a,char b[]); //查找a在b中的位置
?char precede(char op1,char op2,int &flag); //比較op1和op2的優(yōu)先級(jí)
??? int numlink(int opd,int ops,int &flag); //數(shù)字與字符串的連接
?int operate(int n1,char o,int n2,int &flag);//運(yùn)算
??????????? /*
??????????? flag為一個(gè)標(biāo)志變量,
??????????? 1為表達(dá)式有誤!除數(shù)為0!
??????????? 2為表達(dá)式的值過(guò)大或過(guò)小
??????????? 3為未知類型的錯(cuò)誤,可能沒(méi)有這一點(diǎn)
??????????? 但為了容錯(cuò),還是要加上這一點(diǎn)
?-*/
public:
?sqstack opnd;
?sqstack optr;
private:
?sqstack s;
};

CExpression::CExpression()
{
?s.top=s.base;
}

CExpression::~CExpression()
{
}

void CExpression::initstack(sqstack &s)
{
?s.base=(int *)malloc(10*sizeof(int));
?if(!s.base) exit(1);
?s.top=s.base;
?s.stacksize=100;
}

int CExpression::gettop(sqstack &s)
{
?int e;
?e=*(s.top-1);
?return e;
}

void CExpression::push(sqstack &s,int e)
{
??? if(s.top-s.base>=s.stacksize)
?{
??s.base=(int*)realloc(s.base,(s.stacksize+10*sizeof(int)));
??if(!s.base)
???exit(2);
??s.top=s.base+s.stacksize;
??s.stacksize+=10;
?}
?*s.top++=e;
}

int CExpression::pop(sqstack &s,int &e)
{
?if(s.top==s.base)return error;
?e=*--s.top;
?return ok;
}

int CExpression::setfind(char a,char b[])
{
?int i,j;
?i=-1,j=0;
?while(b[j]!='\0')
??if(a==b[j++]) {i=j-1;break;}
??return i;
}

char CExpression::precede(char op1,char op2,int &flag) //比較op1和op2的優(yōu)先級(jí)
{
?int i,j;
?char st1[8]={"+-*/()#"}; //運(yùn)算符初始化
?char st2[7][8]={">><<<>>",">><<<>>",">>>><>>", //比較操作初始化
??">>>><>>","<<<<<= ",">>>> >>","<<<<< ="};
?i=setfind(op1,st1);j=setfind(op2,st1);
?if (i>-1 && j>-1) //如果你所輸入的運(yùn)算符不在+-*/()#內(nèi),返回ERROR
?{return st2[i][j];flag=ok;}
?else flag=error;
?return error;
}

int CExpression::numlink(int opd,int ops,int &flag){ //數(shù)字與字符串的連接
?int aa=ops;
?ops=ops*10+opd-48;
?if (ops<0 && aa>0 || aa>214748364)
??flag=error; else flag=ok; //flag=0,說(shuō)明ops已經(jīng)過(guò)大,
?return ops;
}

int CExpression::operate(int n1,char o,int n2,int &flag){ //運(yùn)算
??????????? /*
??????????? flag為一個(gè)標(biāo)志變量,
??????????? 1為表達(dá)式有誤!除數(shù)為0!
??????????? 2為表達(dá)式的值過(guò)大或過(guò)小
??????????? 3為未知類型的錯(cuò)誤,可能沒(méi)有這一點(diǎn)
??????????? 但為了容錯(cuò),還是要加上這一點(diǎn)
?-*/
?
?int result=0;
?switch (o){
?case '+': //加法運(yùn)算
??flag=0;result=n1+n2;
??if (n1>=0 && n2>=0 && result<0 || n1<=0 && n2<=0 && result>0)
???//兩個(gè)大于0的數(shù)相加,和小于0,或兩個(gè)小于0的數(shù)相加,和大于0,返回錯(cuò)誤
??{flag=2;return error;}
??else
??{flag=0;return result;}
??break;
?case '-': //減法運(yùn)算
??flag=0;result=n1-n2;
??if (n1>=0 && n2<0 && result<0 || n1<=0 && n2>0 && result>0)
???//一個(gè)大于0的數(shù)減一個(gè)小于0 的數(shù),和小于0或一個(gè)小于0 的數(shù)減去一個(gè)大于0的數(shù),返回錯(cuò)誤
???
??{flag=2;return error;}
??else
??{flag=0;return result;}
??break;
?case '*': //乘法運(yùn)算
??flag=0;result=n1*n2;
??if (n1>=0 && n2>=0 && result<0 || n1<=0 && n2<=0 && result>0)
???//兩個(gè)大于0的數(shù)相乘,積小于0,或兩個(gè)小于0的數(shù)相乘,積大于0,返回錯(cuò)誤
??{flag=2;return error;}
??else
??{flag=0;return result;}
??break;
?case '/': //除法運(yùn)算
??if(n2!=0) //如果被除數(shù)為0要返加ERROR
??{flag=0;return n1/n2;break;}
??else
???//除數(shù)為0,返回錯(cuò)誤
??{flag=1;return error;break;}
?}
?flag=3;return error;
}

void main()
{
?CExpression expression;
//?sqstack opnd; //用于存放運(yùn)算數(shù)
//?sqstack optr; //用于存放運(yùn)算符
?int theta; //用于存放一個(gè)運(yùn)算符
?int a,b; //用于存放用于操作的兩個(gè)數(shù)
?int temp; //一個(gè)臨時(shí)的變量
?int flag2=0; //一個(gè)標(biāo)志變量,用于判斷是否要連接數(shù)字
?int flag1; //一個(gè)標(biāo)志變量,用于判斷表達(dá)式是否是無(wú)效的
?int cn=0; //用于存放字符的位置
?int ops=0; //用于存放當(dāng)前的操作數(shù)
?char st1[255]; //表達(dá)式中最多有255個(gè)字符
?char c; //用于表示當(dāng)前的字符
?for (a=0;a<255;a++) st1[a]='#'; //對(duì)數(shù)組初始化
?expression.initstack(expression.opnd); //對(duì)棧OPND初始化
?expression.initstack(expression.optr); //對(duì)棧OPTR初始化
?expression.push(expression.optr,'#');
?cin>>st1;
?temp=strlen(st1);
?if (st1[temp-1]!='#') st1[temp]='#'; //對(duì)表達(dá)式的結(jié)尾加入一個(gè)#
?
?c=st1[0];
?while(c!='#' || expression.gettop(expression.optr)!='#'){ //cout<<st1;
??
??c=st1[cn];
??if(isdigit(c)) {
???ops=expression.numlink(c,ops,temp);
???if (temp==ok)
???{
????if (flag2) expression.pop(expression.opnd,temp);
????flag2=1;
????expression.push(expression.opnd,ops);
????cn++;
????continue;
???}
???else
???{cout<<"表達(dá)式的值過(guò)大,無(wú)法計(jì)算!"<<endl;return;}
??}
??else{
???ops=0;
???flag2=0;
???temp=expression.precede(expression.gettop(expression.optr),c,temp); //temp為precede中的一個(gè)代號(hào),為ok為正確的運(yùn)算符比較,為error為錯(cuò)誤的運(yùn)算符比較
???if (temp==error) {cout<<"表達(dá)式有誤!無(wú)法求解!"<<endl;return;} //錯(cuò)誤的運(yùn)算符比較時(shí),返回.
???switch (temp){
???case '<':
????expression.push(expression.optr,c);cn++;break; //如果為<,操作符入棧
???case '=':
????expression.pop(expression.optr,temp);cn++;break; //如果為=,操作符出棧
???case '>': //如果為>,執(zhí)行運(yùn)算操作
????expression.pop(expression.optr,theta);
????expression.pop(expression.opnd,b);
????expression.pop(expression.opnd,a);
????expression.operate(a,theta,b,flag1);
????if (flag1==1) {cout<<"表達(dá)式有誤!除數(shù)不能為0!"<<endl;return;}
????else if(flag1==2) {cout<<"表達(dá)式的值過(guò)大或過(guò)小,無(wú)法計(jì)算!"<<endl;return;}
????else if(flag1==3) {cout<<"未知道類型的錯(cuò)誤!"<<endl;return;}
????expression.push(expression.opnd,expression.operate(a,theta,b,flag1));
????break;
???case ' ':
????cout<<"表達(dá)式有誤!無(wú)法求解!"<<endl;return;
???} //end switch
??} //end if
?} //end while
?a=expression.gettop(expression.opnd);
?cn=0;
?while(st1[cn]!='#') cout<<st1[cn++]; //輸出你所輸入字符串
?cout<<"=";
?cout<<a<<endl; //輸出最終結(jié)果
}

該程序的缺點(diǎn)是不能處理存在小數(shù)的表達(dá)式.


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


posts - 4, comments - 4, trackbacks - 0, articles - 0

Copyright © 瘋蝶雨人

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲理伦电影| 久久在线播放| 黄色小说综合网站| 久久精品主播| 国产一区二区高清| 欧美视频在线不卡| 国产精品一卡二| 精品不卡在线| 一本色道久久88精品综合| 亚洲欧美另类国产| 久久人人爽人人爽| 亚洲日本成人| 亚洲深夜福利网站| 久久精品国产精品亚洲| 欧美高清视频一区二区| 国产精品久久久久9999吃药| 国产亚洲精品自拍| 99在线精品视频在线观看| 亚洲欧美日韩精品久久亚洲区 | 久久成人一区| 欧美激情自拍| 亚洲欧美日韩精品一区二区| 久久人体大胆视频| 国产精品丝袜xxxxxxx| 在线看片成人| 欧美亚洲一区在线| 91久久久亚洲精品| 久久国产直播| 欧美午夜视频在线| 亚洲精品国产日韩| 久久久免费精品| 一区二区三区产品免费精品久久75 | 久久久www成人免费精品| 久久久久天天天天| 亚洲视频一区在线| 牛夜精品久久久久久久99黑人| 国产精品久久久久久久久久尿 | 亚洲欧洲偷拍精品| 久久精品国产精品亚洲精品| 一本色道久久88综合日韩精品| 久久裸体视频| 国内精品久久久久久久97牛牛| 亚洲一区在线播放| 91久久午夜| 欧美ab在线视频| 亚洲黄色天堂| 欧美激情精品久久久久久黑人 | 久久网站免费| 亚洲一区二区在| 欧美日韩高清在线观看| 在线电影国产精品| 欧美诱惑福利视频| 中文国产亚洲喷潮| 欧美日韩一区二区三区四区在线观看| 亚洲国产精品va在线观看黑人| 香蕉亚洲视频| 亚洲天堂久久| 国产精品国产三级国产普通话三级 | 亚洲激情av| 麻豆精品在线观看| 久久精品免费| 在线国产亚洲欧美| 噜噜噜躁狠狠躁狠狠精品视频| 欧美一区二区成人6969| 国产亚洲福利| 久久裸体视频| 蜜桃久久av一区| 亚洲免费av观看| 亚洲免费观看视频| 国产精品久久二区二区| 欧美一区在线视频| 久久精品国产亚洲高清剧情介绍| 国产欧美日韩一区二区三区在线| 性欧美在线看片a免费观看| 亚洲欧洲av一区二区| 韩国成人福利片在线播放| 麻豆免费精品视频| 欧美激情精品久久久久久久变态 | 欧美午夜精品久久久久久浪潮| 99精品国产福利在线观看免费| 亚洲精品一区二区三区四区高清| 欧美黄色免费网站| 亚洲色在线视频| 亚洲欧美久久久久一区二区三区| 国产在线观看91精品一区| 美玉足脚交一区二区三区图片| 免播放器亚洲一区| 亚洲综合日韩在线| 久久免费视频一区| 亚洲视频视频在线| 久久精品成人| aa日韩免费精品视频一| 亚洲一区二区高清| 亚洲黑丝在线| 亚洲综合第一| 亚洲靠逼com| 欧美一区高清| 亚洲一区二区少妇| 久久久久久亚洲综合影院红桃 | 母乳一区在线观看| 久久久视频精品| 亚洲麻豆视频| 亚洲欧美激情视频在线观看一区二区三区| 激情av一区| 亚洲一区日韩| av成人激情| 欧美亚洲专区| 亚洲一区二区三区精品在线| 久久久久久久一区二区三区| 一本大道久久精品懂色aⅴ| 久久爱91午夜羞羞| 亚洲一区二区欧美日韩| 免费永久网站黄欧美| 久久精品国产综合精品| 欧美日韩在线直播| 亚洲国产精品成人综合| 狠狠88综合久久久久综合网| 亚洲婷婷综合色高清在线| 亚洲精品资源| 久久一二三四| 久久五月天婷婷| 国产精自产拍久久久久久| 日韩视频免费观看高清在线视频| 亚洲电影免费观看高清完整版在线观看 | 久久免费视频观看| 久久国产精品亚洲va麻豆| 欧美+日本+国产+在线a∨观看| 久久久亚洲高清| 国产亚洲永久域名| 亚洲在线国产日韩欧美| 亚洲免费伊人电影在线观看av| 欧美激情久久久久| 亚洲国产激情| 亚洲精品在线视频观看| 欧美成黄导航| 亚洲第一精品夜夜躁人人爽 | 亚洲精品之草原avav久久| 亚洲欧洲三级电影| 欧美电影资源| 亚洲精品久久久久久久久久久久久| 亚洲成人影音| 欧美sm极限捆绑bd| 亚洲丁香婷深爱综合| 亚洲精品乱码久久久久| 免费一级欧美片在线播放| 亚洲第一在线综合在线| 日韩视频中文| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲日本在线视频观看| 亚洲成人资源网| 欧美激情视频一区二区三区在线播放| 久久夜色精品国产欧美乱极品| 国产偷久久久精品专区| 欧美在线视频日韩| 久久久久久久综合狠狠综合| 黄色成人av网| 老司机午夜精品| 亚洲日本国产| 欧美一级黄色网| 一区二区亚洲| 欧美激情亚洲国产| 亚洲小视频在线观看| 久久久91精品国产一区二区三区| 伊人久久婷婷| 欧美日韩在线免费| 午夜免费在线观看精品视频| 免费成年人欧美视频| 亚洲蜜桃精久久久久久久| 国产精品伦一区| 久色婷婷小香蕉久久| 一本色道久久综合狠狠躁的推荐| 欧美一区二区视频在线观看2020| 在线观看一区欧美| 欧美视频在线观看 亚洲欧| 欧美在线黄色| 99国产精品国产精品毛片| 久久精品一区二区三区四区| 日韩网站在线观看| 国产视频在线观看一区二区| 欧美aaaaaaaa牛牛影院| 午夜精品亚洲| 99国产精品国产精品久久| 久久在线免费观看| 亚洲无线一线二线三线区别av| 韩国av一区二区三区四区| 欧美色区777第一页| 麻豆精品国产91久久久久久| 亚洲欧美国产精品桃花| 亚洲国产天堂久久综合| 久久免费国产精品1| 亚洲主播在线播放| 日韩一级黄色片| 亚洲国产经典视频| 国产无一区二区| 国产精品一区一区三区| 欧美日韩精品欧美日韩精品| 免费人成网站在线观看欧美高清 | 免费在线观看精品| 久久精彩免费视频| 欧美中文字幕在线观看|