亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.cpp

?? 簡單的計算器程序
?? CPP
字號:
#include<iostream>
#include<math.h>
#include <string>
#include <cstdlib>
#include<ctype.h>
using namespace std;
const int SIZE=20;
template <class T> class Queue;
template <class T> class SeqQueue;
enum ResultCode{Underflow,Overflow,Success,Duplicate,NotPresent,Inputwrong};
bool IsNumber(const char *s){
bool Numberdoor=0,Indexdoor=0,NePositivedoor=0;
bool Decimaldoor=0;
int i=0;
char c;
while(*(s+i)!='\0'){
	c=*(s+i);
	if(isdigit(c)) {
		Numberdoor=1;
		NePositivedoor=1;
	}
	else if(c=='.'){
		if(Decimaldoor==1)   return false;
		Numberdoor=0;
		Decimaldoor=1;
	}
	else if(c=='+'||c=='-'){
		if(NePositivedoor==1)   return false;
		if(Numberdoor==1)   return false;
		NePositivedoor=1;
		Numberdoor=0;

	}
	else if(c=='e'||c=='E'){
		if(Indexdoor==1)  return false;
		if(Numberdoor==0)   return false;
		Indexdoor=1;
		Numberdoor=0;
		NePositivedoor=0;
		Decimaldoor=1;
	}
	else return false;
	i++;
}
if(Numberdoor==0)   return false;
return true;
}
int icp(const char *c)
 {  // 計算運算符c的棧外優先級 
  int priority;
  switch(c[0]){
	case '(': priority=8; break;
	case ')': priority=1;break;
	case '+':  
	case '-': priority=2; break;
	case '*': 
	case '/': priority=4; break;
	case '^': priority=6; break;
	case '#': priority=0; break;
  }
  return priority;
 }
int isp(const char *c)
 {  // 計算運算符c的棧內優先級 
  int priority;
  switch(c[0]){
	case '(': priority=1; break;
	case ')': priority=8; break;
	case '+':  
	case '-': priority=3; break;
	case '*': 
	case '/': priority=5; break;
	case '^': priority=7; break;
	case '#': priority=0; break;
  }
  return priority;
 }
bool OperateSymbol(const char *c){
	switch(*c){
	case '+':
	case '-':
    case '*':
    case '^':
	case '(':
	case '/':
		     return true;
	default: return false;
	}
}
template <class T> 
class Queue
{
public:
	virtual bool IsEmpty()  const=0;
	virtual bool IsFull() const=0;
	virtual bool Front(T &x) const =0;
	virtual bool EnQueue(T x) =0;
	virtual bool DeQueue()=0;
	virtual bool Clear() =0;
};
template <class T>
class  SeqQueue:public Queue<T>
{
private:
	int front, rear;
	int maxSize;
	T *q;
public:
	SeqQueue(int mSize);
	~SeqQueue(){delete []q;}//釋放內還
	bool IsEmpty() const{return front==rear;}
	bool IsFull() const {return (rear+1)% maxSize==front;}
	bool Front(T &x) const;
	bool EnQueue(T x);
	bool DeQueue();
	bool Clear() {front=rear=0; return true;}
	void ListAll();
	T IDfind(int i);
};
void  InfixToPostfix(SeqQueue<string> &suffix0);
template <class T>
SeqQueue<T>::SeqQueue(int mSize){
	maxSize=mSize;
	q=new T[maxSize];
	front=rear=0;
}
template <class T>
bool SeqQueue<T>::Front (T &x) const{
	if (IsEmpty()){
		cout<<"empty"<<endl; return false;//空隊列處理
	}
	x=q[(front+1)%maxSize];
	return true;
}
template <class T>
bool SeqQueue<T>::EnQueue (T x){
	if (IsFull()){//溢出處理
		cout<<"隊滿"<<endl; return false;
	}
	q[(rear=(rear+1)%maxSize)]=x;
	return true;
}
template <class T>
bool SeqQueue<T>::DeQueue (){
	if(IsEmpty()){//空隊列處理
		cout<<"隊列下溢"<<endl; return false;
	}
	front=(front+1)%maxSize;
	return true;
}
template <class T>
void SeqQueue<T>::ListAll (){//輸出隊列里的所有元素
int temp;
int number=0;
temp=front;
if(front==rear)  {cout<<"隊列無數據 !"<<endl;return;}
do{ cout<<q[temp+1]<<' ';
	temp=(temp+1)%maxSize;
}while(rear!=temp+1);
}
template <class T>
T SeqQueue<T>::IDfind(int i){//根據在隊列里的序號找出相應元素
	int number=front;
	if(i==0)   return q[front+1];
	number=(number+1+i)%maxSize;
	return q[number];
}
//將中綴表達式轉化為后綴表達式
template <class T>
class stack
{	public:
		virtual bool IsEmpty() const=0;
		virtual bool IsFull() const=0;
		virtual bool Top(T &x) const=0;
		virtual bool Push(T x)=0;
		virtual bool Pop()=0;
		virtual void Clear()=0;
};
template <class T>
class seqstack:public stack<T>

{
	public:
		seqstack(int mSize);
		~seqstack(){delete []s;}
		bool IsEmpty() const {return top==-1;}
		bool IsFull() const {return top==maxTop;}
		bool Top(T &x) const;//取出棧頂元素
		bool Push(T x);//壓入棧
		void Clear(){top=-1;}//清空棧
		bool Pop();//彈出棧
	private:
		int top;//棧頂指針
		int maxTop;//最大棧頂指針
		T *s;
};
template <class T>
seqstack<T>::seqstack(int mSize)//初始化棧
{
	maxTop=mSize-1;
	s=new T[mSize];
	top=-1;
}
template <class T>
bool seqstack<T>::Top(T &x) const
{
	if(IsEmpty()){
		cout<<"棧空"<<endl;return false;
	}
	x=s[top];return true;
}
template <class T>
bool seqstack<T>::Push(T x)
{
	if(IsFull()){
		cout<<"棧上溢"<<endl;return false;
	}
	s[++top]=x;return true;
}
template <class T>
bool seqstack<T>::Pop()
{
	if(IsEmpty()){
		cout<<"棧下溢"<<endl;return false;
	}
	top--;return true;
}
//定義計算器類
class Calculator
{
public:
	Calculator(int maxSize):s(maxSize),suffix(maxSize) {};
	void Run();//從隊列逐個讀入字符,做相應的運算,輸出結果
	void Clear(){s.Clear();suffix.Clear();}
private:
	SeqQueue<string> suffix;//存放轉換后得到的后綴表達式隊列對象
	seqstack <double> s;//聲明存放操作數的棧對象
	void PushOperand(double);//操作數進棧
	bool GetOperands(double &,double &);//從棧中彈出2個操作數
	bool DoOperator(const char *per);
};
void Calculator::PushOperand(double op)
{
	s.Push(op);
}
bool Calculator::GetOperands(double &op1,double &op2)
{
	if(!s.Top(op1)){
		cerr<<"操作符多余"<<endl;return false;
	}
	s.Pop();
	if(!s.Top(op2)){
		cerr<<"操作符多余"<<endl;return false;
	}
	s.Pop(); return true;
}
bool Calculator::DoOperator(const char *oper)
{
	bool result;
	double oper1,oper2;
	result=GetOperands(oper1,oper2);//從棧中彈出2個操作數
	if(result){
		switch(*oper)
	//根據操作符做相應的運算,先出棧的操作數oper1
	//放在操作符的右邊,后出棧的oper2放在左邊
	{
          case '+':s.Push(oper2+oper1);break;
		  case '-':s.Push(oper2-oper1);break;
		  case '*':s.Push(oper2*oper1);break;
		  case '/':if (fabs(oper1)<1e-6){//如果分母為0,則做出錯處理
			  cerr<<"Divide by 0!"<<endl;
			  Clear();return false;
				   }
			  else s.Push(oper2/oper1);break;
		  case '^':s.Push(pow(oper2,oper1));break;
	}
		return true;
	}
	else {Clear();return false;}
}
void Calculator::Run()
{
	const char * c;double newop;
	cout<<"請輸入運算式!"<<endl;
	InfixToPostfix(suffix);//中綴轉換為后綴
	int i=0;
	while(suffix.IDfind(i)!="="){//從隊列中依次讀入一個字符,遇'#'結束
		c=suffix.IDfind(i).c_str();
		i++;
		switch(*c){//從讀入的字符做如下處理
		case '+':
		case '-':
		if(strlen(c)>1){
			newop=atof(c);
			PushOperand(newop);
			}
			else {if(DoOperator(c)==0) return;}  
			break;
		case '*':
		case '/':
		case '^':if(DoOperator(c)==0)   return;break;//是操作符則進行相應的計算
		default://如不是操作符,則轉換為操作數
			newop=atof(c);
			PushOperand(newop);break;//操作數進棧
		}
	}
	if(s.Top(newop)){
		s.Pop();
		if(s.IsEmpty ()==1){
			cout<<"結果是:"<<newop<<endl;}//取到棧頂元素,并輸出結果
		else cout<<"操作數多余"<<endl;
		Clear();
	}
}
void  InfixToPostfix(SeqQueue<string> &suffix0){
	seqstack<string>  s(SIZE);
	string ch, y;
    s.Push("=");
	while(cin>>ch,ch!="="){
		if(IsNumber(ch.c_str())) suffix0.EnQueue (ch);//掃描到操作數直接入隊
		else if(ch==")") //掃描到右括號時的處理
			for(s.Top(y),s.Pop();y!="(";s.Top(y),s.Pop())
			    suffix0.EnQueue (y);
			else if(OperateSymbol(ch.c_str())) {//掃描到其他操作符時的處理
				for(s.Top(y),s.Pop();icp(ch.c_str())<=isp(y.c_str());s.Top(y),s.Pop()){
					suffix0.EnQueue (y);}//則彈出的m棧頂操作符優先級高時入隊
			   s.Push(y);//當彈出的棧頂操作符的優先級低時, 將其重新壓回棧中
			   s.Push(ch);//然后掃描到的操作符進棧
		}
        		else {
					cout<<"你輸錯"<<ch<<endl;
					s.Clear();
					suffix0.Clear();
					exit(1);
				}
	}
	while(!s.IsEmpty()){
		s.Top(y); s.Pop();
		if(y!="=") suffix0.EnQueue (y);
	}
	suffix0.EnQueue ("=");
}
void main()
{char c;
 cout<<"           歡迎使用本計算系統(笑^_^)"<<endl;
 cout<<"         注意 1.=表示算術式結束標志符!!!"<<endl;
 cout<<"              2.數字和符號之間用空格隔開"<<endl;
 Calculator Cal(SIZE);
 do{
 Cal.Run();
 cout<<"請輸入組合鍵Ctrl+Z,再按回車結束,按其他鍵繼續!!!"<<endl;
 c=cin.get();
 }while((c=cin.get())!=EOF);
 cout<<"謝謝使用...."<<endl;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线欧美小视频| 在线观看日韩国产| 久久国内精品自在自线400部| 亚洲乱码一区二区三区在线观看| 国产午夜精品在线观看| 国产日产亚洲精品系列| 久久久久成人黄色影片| 国产欧美日韩在线| 亚洲日本中文字幕区| 有码一区二区三区| 日韩黄色小视频| 裸体在线国模精品偷拍| 国产精品影音先锋| 91亚洲国产成人精品一区二三| 99久久综合色| 在线不卡a资源高清| 欧美mv和日韩mv的网站| 欧美激情中文字幕| 一区二区三区四区视频精品免费| 午夜影院在线观看欧美| 美女久久久精品| 成人免费观看男女羞羞视频| 99久久精品情趣| 欧美群妇大交群中文字幕| 日韩亚洲欧美一区二区三区| 国产午夜三级一区二区三| 亚洲精品一二三四区| 日韩激情一区二区| 不卡视频免费播放| 欧美精品乱码久久久久久| 国产日本欧洲亚洲| 天天做天天摸天天爽国产一区| 经典三级一区二区| 在线免费亚洲电影| 久久久久久一级片| 亚洲bt欧美bt精品| 成人精品视频网站| 日韩视频免费直播| 亚洲欧美日韩一区二区| 久久99精品国产| 欧美午夜一区二区三区免费大片| 日韩美女在线视频| 亚洲国产一区二区a毛片| 国产中文字幕一区| 91.成人天堂一区| 成人欧美一区二区三区白人| 看电影不卡的网站| 欧美日韩国产欧美日美国产精品| 中文av一区二区| 精品亚洲国内自在自线福利| 色婷婷综合激情| 国产精品入口麻豆九色| 美腿丝袜一区二区三区| 欧美性生活久久| 亚洲人吸女人奶水| 成人三级伦理片| 国产欧美一区二区三区在线看蜜臀 | 激情成人午夜视频| 欧美日韩一级二级| 一区二区三区国产精华| 99久久综合精品| 欧美激情艳妇裸体舞| 激情文学综合丁香| 精品国产精品一区二区夜夜嗨| 亚洲二区视频在线| 日本韩国一区二区| 亚洲欧美色图小说| 91久久线看在观草草青青| 国产精品美女久久久久aⅴ| 国产成人福利片| 国产三级精品三级| 丁香天五香天堂综合| 久久香蕉国产线看观看99| 九九视频精品免费| 久久久青草青青国产亚洲免观| 狠狠狠色丁香婷婷综合激情| 欧美sm极限捆绑bd| 国产精品综合久久| 国产精品久久久一区麻豆最新章节| 韩国女主播成人在线| 久久久久一区二区三区四区| 国产九色精品成人porny| 国产欧美一区二区三区沐欲| 风间由美一区二区三区在线观看| 国产亚洲精品aa午夜观看| 成人午夜av在线| 亚洲欧美在线观看| 在线视频中文字幕一区二区| 日韩国产高清影视| 欧美精品一区二区三| 大胆亚洲人体视频| 亚洲精品精品亚洲| 欧美一区二区播放| 国产成人自拍高清视频在线免费播放| 中文欧美字幕免费| 欧美午夜一区二区| 极品美女销魂一区二区三区| 国产午夜亚洲精品午夜鲁丝片 | 亚洲一卡二卡三卡四卡| 91精品福利在线一区二区三区 | 狠狠色丁香九九婷婷综合五月| 国产亚洲欧美激情| 91麻豆国产精品久久| 午夜久久久久久久久久一区二区| 欧美大白屁股肥臀xxxxxx| 成人少妇影院yyyy| 日韩成人免费看| 国产欧美日韩中文久久| 欧美日韩在线免费视频| 经典三级视频一区| 一区二区三区在线视频观看| 精品久久久久一区二区国产| 不卡av在线免费观看| 亚洲成a人v欧美综合天堂| 国产午夜精品福利| 欧美区在线观看| av不卡在线播放| 韩国女主播成人在线| 亚洲免费观看高清完整版在线观看熊 | 激情久久五月天| 亚洲一区二区三区中文字幕| 26uuu精品一区二区| 欧美三级韩国三级日本三斤| 国产福利精品一区二区| 日本中文在线一区| 一卡二卡三卡日韩欧美| 国产亚洲女人久久久久毛片| 欧美日韩国产高清一区二区| 成人不卡免费av| 久久精工是国产品牌吗| 亚洲一区免费观看| 亚洲男人的天堂一区二区| 国产清纯美女被跳蛋高潮一区二区久久w | 97久久精品人人澡人人爽| 蜜臀av一区二区| 亚洲成人av中文| 亚洲国产美女搞黄色| 成人免费一区二区三区视频| 国产欧美日韩卡一| 久久综合久久99| 337p日本欧洲亚洲大胆色噜噜| 欧美色图在线观看| 欧美午夜精品久久久久久孕妇 | 久久青草国产手机看片福利盒子 | 91精品国产乱码| 欧美精三区欧美精三区| 欧美中文字幕一区| 欧美综合天天夜夜久久| 日本丰满少妇一区二区三区| 色激情天天射综合网| 91免费看视频| 色先锋资源久久综合| 一道本成人在线| 欧美影院精品一区| 欧美视频中文字幕| 欧美日韩精品二区第二页| 欧美狂野另类xxxxoooo| 欧美午夜影院一区| 欧美日本乱大交xxxxx| 制服丝袜亚洲网站| 精品国产免费久久| 国产亚洲精久久久久久| 久久精品视频一区二区| 中文字幕日韩欧美一区二区三区| 国产精品美女久久久久aⅴ国产馆| 国产精品久久久久久久久动漫| 国产精品美女久久久久久2018| 自拍偷自拍亚洲精品播放| 亚洲乱码中文字幕| 日韩精品一级二级 | 91国偷自产一区二区使用方法| 欧美在线三级电影| 日韩精品影音先锋| 欧美激情一二三区| 亚洲午夜三级在线| 精品亚洲aⅴ乱码一区二区三区| 国产精华液一区二区三区| 91丝袜美腿高跟国产极品老师| 欧美日韩综合色| 精品日韩一区二区| 中文字幕在线不卡视频| 午夜伊人狠狠久久| 久久精品国产网站| 色94色欧美sute亚洲线路一ni| 制服丝袜一区二区三区| 欧美经典一区二区| 午夜在线成人av| 不卡大黄网站免费看| 6080yy午夜一二三区久久| 欧美高清一级片在线观看| 亚洲午夜久久久| 国产成人aaa| 欧美电影在线免费观看| 国产精品系列在线| 美女视频黄频大全不卡视频在线播放| 成人av资源下载| 欧美精品一区二区三区视频| 亚洲尤物在线视频观看| 国产成人av自拍| 日韩精品一区二区三区在线播放 |