C簡易計算器只要能計算加減乘除和混合運算輸入算式就出結果的那種可以連續運算單獨輸入時結束

2021-05-14 10:33:19 字數 6802 閱讀 9952

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...