1樓:匿名使用者
#include
#include
#include
#include
using namespace std;
const char num=;
const char operation=;
const double pi=3.14159265358979;
const double ee=2.71828182818281;
class fun //處理系統數學函式的類
static string fun;
double calc();
private:
int type; //666 0 1 sin90 2 3! 3 3c2
string op; //函式型別
double lvalue; //函式左邊的值
double rvalue; //函式右邊的值
static int funnum;
};int fun::funnum=8;
string fun::fun=;
/*函式說明:
1:log是以10為底的工程對數
2:ln 是以e為底的自然對數
3:c 計算組合數 輸入規則 如計算 3取2的組合 輸入表示式 3c2
4:a 計算排列數 輸入規則 如計算 3取2的排列 輸入表示式 3a2
5:! 計算階乘
6:^ x的y次方 輸入 x^y
*/int factorial(int n) //階乘函式
int c(int a,int b)
int a(int a,int b)
double fun::calc() //計算系統函式的值}}
struct unit //雙向連結串列儲存運算單元
int pri; //優先順序
char operation; //操作符
string code; //原始**
double value; //資料
int type; //型別 操作符0 資料1 函式2
unit * pre; //構成雙向連結串列
unit * next;
};class node //表示式樹狀結構的節點
node * head; //節點的根,左樹枝,右樹枝
node * left;
node * right;
double getvalue();
char getoperation() const
int getpri() const
int i***p() const
private:
char operation; //操作符
int pri; //優先順序
int expression; //記錄該節點是否是表示式0 1
double value; //該節點的值
};double node::getvalue() //運算該節點的值
}else
return value;
}bool isnum(char c)
else //其他的當做函式處理}}
return head;
}unit * calc(unit * head) //計算雙向連結串列基本單元的值
p=p->next;
}return head;
}node * tree(unit * head) //生成表示式樹
else
else
now_pri=p->pri;}}
p=p->next;
}if(! hadop)
root=new node(' ',0,0,head->value);
return root;
}int main()
return 0;}
2樓:匿名使用者
一共這麼多字元:0123456789+-*/=()
每個字元編號,然後用switch+case進行逐個字元分析,判斷運算順序,可以了……
3樓:範
#include
void main()
4樓:小鼻兒鼻兒
c++做法:
#include
using namespace std;
int main()
用c++設計一個簡單的計算器程式,只要求能進行加減乘除運算。
5樓:煙子丹
#include
using std::cin;
using std::cout;
int main()
return 0;
}如果不限定for或while,還有兩種簡單思路:
輸入一個string遍歷字元,搜尋符號
2.while(cin << int)
while(cin << char)
while(cin << int)
依靠不符型別迴圈跳出來儲存兩個數值,根據儲存的char執行操作
6樓:
是畢業設計用嗎?
我會的 ,,,好不
想用c++編寫一個計算器程式,只是簡單的加減乘除,但是想實現多數同時運算
7樓:匿名使用者
哇,那你這個需要使用棧呢。
還要有一個符號優先順序的定義。。。。。
如何用c++編寫一個連續加減乘除的計算器,函while語句 20
8樓:匿名使用者
#include
#include
#include
#include
#include
#include
#include
using namespace std;
vector> f(string s)
else if (s[i] == ')')else if (s[i] == '+' || s[i] == '-')
else if (s[i] == '*' || s[i] == '/')
else if(s[i] == ' ')
else if (s[i] <= '9' && s[i] >= '0' || s[i] == '.')
}return v;
}bool bijiao(int n, string a)stackf_nbl(vector> v)f.pop();
}else if(f.top() == "(")f.push(xi->second);
else
else
f.push(xi->second);}}}}
}while(f.top() != "#")f.pop();
while(!s.empty())
return f;
}double f_js(stacks)
ch = s.top();
if (s.size())
s.pop();
b = p.size() ? p.top() : 0;
if (p.size())
p.pop();
a = p.size() ? p.top() : 0;
if (p.size())
p.pop();
switch(ch[0])
{case '+' : p.push(a + b); break;
case '-' : p.push(a - b); break;
case '*' : p.push(a * b); break;
case '/' : if(b==0.0){cout<<"除數不能為0"<>s;
cout<
9樓:冰旋華影
你可以看一下,資料結構c語言版,棧那一章
10樓:匿名使用者
要不要處理先乘除後加減?
求一個用c++編過計算器的,就是那種加減乘除三角函式可以寫一排算的
11樓:來複還盡散金千
^//*************************************
//數學表示式解析類
//*************************************
//expression_parser.cpp
#include
#include
#include
const double pi=3.141592654;
//將角度轉換成弧度
double degtorad( double deg )
//將中綴表示式轉換為字尾表示式(逆波蘭式)
void trans( char a, char b )
;int top=0;
int len=0;
int i=0;
int j=0;
top = -1;
j = -1;
len = strlen(a);
for ( i=0; i=0 && stock[top]!='(' )
stock[++top] = ' ';
stock[++top] = a[i];
break;
case '*':
case '/':
while( top>=0 && stock[top]!='(' && stock[top]!='+' && stock[top]!='-' )
stock[++top] = ' ';
stock[++top] = a[i];
break;
case 's':
case 'c':
case 't':
while( top>=0 && stock[top]!='(' && stock[top]!='+' && stock[top]!
='-' && stock[top]!='*' && stock[top]!='/' )
stock[++top] = ' ';
stock[++top] = a[i];
break;
case 'v':
case '^':
while( top>=0 && stock[top]!='(' && stock[top]!='+' && stock[top]!
='-' && stock[top]!='*' && stock[top]!='/' && stock[top]!
='s' && stock[top]!='c' && stock[top]!='t' )
stock[++top] = ' ';
stock[++top] = a[i];
break;
case 'l':
while( top>=0 && stock[top]!='(' && stock[top]!='+' && stock[top]!
='-' && stock[top]!='*' && stock[top]!='/' && stock[top]!
='s' && stock[top]!='c' && stock[top]!='t' && stock[top]!
='v' && stock[top]!='^' )
stock[++top] = ' ';
stock[++top] = a[i];
break;
case')':
while( stock[top]!='(' )
top--;
break;
default:
b[++j] = a[i];
if( i == len-1 || a[i+1]<'0' || a[i+1]>'9' )
}break;}}
while ( top>=0 )
b[++j] = '\0';
}//求解字尾表示式(逆波蘭式)的值
double compvalue( char exp )
;char str_num_temp[128]=;
top = -1;
len = strlen(exp);
for ( i=0; i='0' && exp[i]<='9' || exp[i] == '.' )
str_num_temp[c] = '\0';
digit[++top] = atof(str_num_temp);
break;}}
return digit[0];
}//解析數學表示式(供外界呼叫的介面)
double expression_parser( char *expression )
;trans( expression, temp );
return compvalue( temp );
//呼叫方法
//main.cpp
#include
using namespace std;
double expression_parser( char *expression );
int main()
{double result=0;
char exp="t45-c60+s30+(-6)*3^4+l100+v4-8/2";
//cin>>exp>>endl; //取消改行註釋,等待使用者輸入數學表示式
result = expression_parser( exp );
cout<<"表示式 "<
小數加減乘除計算題帶答案100道,分數混合運算40道帶答案
88 56 12 88 12 56 100 56 156 776 125 8 776 125 8 776 1000 776000 小學四年級口算小數加減乘除法題目100題並附帶答案 不要分數 5.6 7 0.8 27 0.01 2700 1.25 4 5 0.54 0.09 6 5.2 0 0 1....
給我二十道分數加減乘除計算題!!最好有答案!
1 80分之2 4 2 20 1 10 2 9分之7 3 7 3 3 25分之2 5 2 5 4 70分之7 140 14 5 5分之3 7 21 5 6 7分之8 7 8 7 2分之7 9 63 2 8 9分之7 2 14 9 9 4分之2 2 1 10 14分之7 4 14 7 2 11 20分...
求助c語言計算器刑序為何跳過執行?求高手
假設你要輸入3 5,0在你輸入3a5之後,再按回車作為結束,q getchar 不是沒執行,是執行了把 回車符 賦給了 q 所以就會判斷失敗。我按你的思想對void funj 進行了修改 void funj case x exit 0 default printf error 輸入有誤!n prin...