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

📄 no23.cpp

📁 一个关于计算器的程序
💻 CPP
字号:
#include <stdio.h>
#include<iostream> 
#include <stdlib.h> 
#include<conio.h> 
#include<ctype.h>
using namespace std;
char token; /*全局标志变量*/ 
 
/*递归调用的函数原型*/ 
int exp( void ); 
int term( void ); 
int factor( void ); 
 
void error( void ) /*报告出错信息的函数*/ 
{ 
    cout<<"错误"<<endl;; 
    exit( 1 ); 
} 
 
void match( char expectedToken ) /*对当前的标志进行匹配*/ 
{ 
    if( token == expectedToken ) token = getchar(); /*匹配成功,获取下一个标志*/ 
    else error(); /*匹配不成功,报告错误*/ 
} 
void Message(void) 
{ 
     
    cout<<"              递归实现的四则运算表达式求值程序               "<<endl; 
    
   cout<<"使用方法:请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]"<<endl;  
} 
int main() 
{ 
    int result;  /*运算的结果*/ 
    Message(); 
    cout<<" 请输入表达式: "; 
    token = getchar(); /*载入第一个符号*/ 
     
    result = exp(); /*进行计算*/ 
    if( token == '\n' ) /* 是否一行结束 */ 
       cout<< "表达式的计算结果为 :"<< result; 
    else error(); /* 出现了例外的字符 */ 
    getch(); 
	system("pause");
    return 0; 
} 
 
int exp( void ) 
{ 
    int temp = term(); /*计算比加减运算优先级别高的部分*/ 
    while(( token == '+' ) || ( token == '-' )) 
        switch( token ) { 
        case '+': match('+');     /*加法*/ 
              temp += term(); 
              break; 
        case '-': match('-'); 
              temp -= term(); /*减法*/ 
              break; 
        } 
    return temp; 
} 
 
int term( void ) 
{ 
    int div; /*除数*/ 
    int temp = factor();   /*计算比乘除运算优先级别高的部分*/ 
    while(( token == '*' ) || ( token == '/' )) 
        switch( token ) { 
        case '*': match('*');  /*乘法*/ 
              temp *= factor(); 
              break; 
        case '/': match('/');   /*除法*/ 
              div = factor(); 
              if( div == 0 ) /*需要判断除数是否为0*/ 
              { 
                  cout<< "除数为0." <<endl;; 
                  exit(1); 
              } 
              temp /= div;  
              break; 
        } 
    return temp; 
} 
 
int factor( void ) 
{ 
    int temp;  
    if( token == '(' ) /*带有括号的运算*/ 
    { 
        match( '(' ); 
        temp = exp(); 
        match(')'); 
    } 
    else if ( isdigit( token )) /*实际的数字*/ 
    { 
        ungetc( token, stdin ); /*将读入的字符退还给输入流*/ 
        scanf( "%d", &temp ); /*读出数字*/ 
        token = getchar();  /*读出当前的标志*/ 
    } 
    else error(); /*不是括号也不是数字*/ 
    return temp; 
} 

⌨️ 快捷键说明

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