⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vccode.txt

📁 用VC++编写的计算器源代码
💻 TXT
字号:
#include <iostream.h> 
#include <string> 
using namespace std; 

/**************Simple Calculator Code************************* 
This program is abstracted from <C++ Programming Language> 
all the ideas belong to original author 

you can study from it 

how to use ? 
input a line of expression which is ended with ";" 
Examples: 
you put : 
3+(5+6)*(-1+8); 
the reult : 
80 
and you can continue ... 
***********************************************************/ 
enum Token_value{ 
NAME, NUMBER, END, 
PLUS = '+', MINUS = '-',MUL = '*',DIV = '/', 
PRINT = ';',ASSIGN = '=',LP = '(',RP = ')' 
}; 

Token_value curr_tok = PRINT; 

// fuction list////////////////////////////////////// 
double expr(bool get); 
double term(bool get); 
double prim(bool get); 
Token_value get_token(); 
double error(const string &s); 

////////////////////////////////////////////////////////// 
double expr(bool get) //plus and minus 
{ 
double left = term(get); 
for(;;) 
{ 
switch(curr_tok){ 
case PLUS: 
left+=term(true); 
break; 
case MINUS: 
left-=term(true); 
break; 
default: 
return left; 
} 
} 
} 

double term(bool get) // multiply and divide 
{ 
double left = prim(get); 
for(;;) 
{ 
switch(curr_tok){ 
case MUL: 
left*=prim(true); 
break; 
case DIV: 
if(double d = prim(true)){ // no zero!! 
left/= d; 
break; 
} 
return error("divide by zero!!\n"); 
default : 
return left; 
} 
} 
} 

double number_value; 
double string_value; 

double prim(bool get) 
{ 
if(get) get_token(); 

switch(curr_tok){ 
case NUMBER: 
{ 
double v = number_value; 
get_token(); 
return v; 
} 
case NAME: 
{ 
double v; 
//double &v = table[string_value]; 
//this table reserved the name mapped with variable 
//now we don't use it! 
if(get_token()==ASSIGN) 
v = expr(true); 
return v; 
} 
case MINUS: // negative 
{ 
return -prim(true); 
} 
case LP: 
{ 
double e = expr(true); 
if(curr_tok!=RP)return error(")expected"); 
get_token(); // absorb ) 
return e; 
} 
default: 
return error("primary expected"); // no primary 
} 
} 

Token_value get_token() 
{ 
char ch =0; 
cin>>ch; 
switch(ch){ 
case 0: 
return curr_tok=END; //return and assignment 
case ';': 
case '*': 
case '/': 
case '+': 
case '-': 
case '(': 
case ')': 
case '=': 
return curr_tok = Token_value(ch); 
case '0':case '1':case '2':case '3':case '4': 
case '5':case '6':case '7':case '8':case '9': 
case '.': 
cin.putback(ch); 
cin>>number_value; 
return curr_tok = NUMBER; 
default: 
if(isalpha(ch)) 
{ 
cin.putback(ch); 
cin>>string_value; 
return curr_tok = NAME; 
} 
error("bad token!"); 
return curr_tok = PRINT; 
} 
} 

int no_of_error; 

double error(const string &s) 
{ 
no_of_error++; 
cout<<"error:"<<s.data()<<"\n"; 
return 1; 
} 

int main() 
{ 
while(cin) 
{ 
get_token(); 
if(curr_tok==END)break; 
if(curr_tok==PRINT) continue; 
cout<<expr(false)<<'\n'; 
} 

return no_of_error; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -