编写一个简易计算器的源代码(2)

2019-02-16 01:06

{ }

double newDigit(double prior_digit, double now_digit, bool isHavePoint, double point_num) { }

double value; if(!isHavePoint) { } else { }

return value;

value = prior_digit + now_digit/(pow(10,point_num)); value = prior_digit*10 + now_digit; double value;

value = (double)ch - 48; return value;

Function.h

#ifndef FUNCTION_HEADER #define FUNCTION_HEADER

//友好的用户界面 void calUserInfo();

//用于记录处于栈内的优先级 int isp(char& ch);

//用于记录栈外的优先级 int osp(char& ch);

//相当于value = x op y;如果cal成功,然后将value的值返回r,用r来保存

bool cal(char op, double x, double y, double& r);

//判断是否为字符 bool isDigit(char ch);

//判断是否为小数点 bool isPoint(char ch);

//判断是否为操作运算符 bool isOperator(char ch);

//将数字的字符状态转化成double状态 double turnDigit(char ch);

//如果几个数字或加一个小数点连在一起,这说明他们是同一个数字的不同位数,此函数将不同连在一起的数字 //组成新的数字

double newDigit(double prior_digit, double now_digit, bool isHavePoint, double point_num); #endif

Main.cpp

#include \#include \#include #include #include using namespace std; int main() {

char str[100] = \

AStack opnd; //用于存放数据

AStack optr; char now_ch = '=';

//用于存放操作符

//用于记录当前字符

char prior_ch = '\\0'; //用于记录前一个字符 double now_dig = 0; //用于记录当前一个数字 double prior_dig = 0; //用于记录前一个数字 double value = 0; //用于存放计算后的值 bool point = false; //用于判断是否有小数点

int point_num = 1; //用于记录数字后面的小数点位数 char topValue; //用于记录opnd的top上的值 char option = 'Y'; //用于判断是否要继续运算 do{

prior_dig = 0; now_ch = '='; opnd.push(prior_dig); optr.push(now_ch); system(\calUserInfo();

cout << \请输入表达式(以等号结束):\cin >> str;

bool exitPoint = false; /*对每个字符的处理*/ for(int i = 0; i < strlen(str); i++) {

now_ch = str[i];

/*判断是不是数字以及相关操作*/ if (isDigit(now_ch)) {

now_dig = turnDigit(now_ch); if (isDigit(prior_ch)) {

//在opnd中提前放一个0

*/

}

}

opnd.pop(prior_dig); if(exitPoint) { } else

now_dig = newDigit(prior_dig, now_dig,point,point_num); point = true;

now_dig = newDigit(prior_dig, now_dig,point,point_num); point_num++;

if(isPoint(prior_ch)) { }

value = now_dig; opnd.push(now_dig); prior_ch = now_ch;

opnd.pop(prior_dig);

now_dig = newDigit(prior_dig, now_dig,point,point_num); exitPoint = true; point_num++;

/*判断是不是小数点以及相关操作*/ else if (isPoint(now_ch)) { }

/*判断是不是操作符以及相关操作*/ else if (isOperator(now_ch)) {

/*对用于数字操作的相关标记量进行清空,方便下一次数字操作point = true; prior_ch = now_ch;

point = false; point = 0; exitPoint = false; point_num = 1;

/*看optr中是否有操作符存在,若不存在,则只放一个操作符进/* 但不进行任何操作*/ if(optr.length() <= 1) { }

/*optr已有操作符存在的话,开始进行优先级的比较*/ else {

optr.pop(topValue);

/* 栈内优先级小于栈外优先级*/ if(isp(topValue) < osp(now_ch)) { }

/*栈内优先级大于栈外优先级*/ else if(isp(topValue) > osp(now_ch)) {

if(now_ch == ')' && topValue == '(') { }

break; optr.push(topValue); optr.push(now_ch); prior_ch = now_ch; optr.push(now_ch); prior_ch = now_ch;

去*/


编写一个简易计算器的源代码(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:牛津英语七年级下册任务型阅读训练有答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: