首页 > 代码库 > 结对编程实现四则运算
结对编程实现四则运算
由于时间仓促,本程序距离完全体还有些距离,但完成度已经90%。剩下的就是优化下用户友好性之类的。
主要完成功能:1,实现了四则运算算式的随机产生。
2,实现了将随机产生的四则综合运算算式计算出结果。
待完成功能:1,增加积分系统,生成的随机算式是有分值的,例如1+2+3+4这种运算式肯定和99*98*97*96这种运算式不一样,分值由两方面决定,一是数的大小,一方面是运算符。比如数又大乘除法又多那么分就高。
2,增加点奖励,比如分数达到多少就说一句鼓励的话或出个图案。
以下是程序部分:
1,itos函数,将整形转换为String型。
1 string itos(int i) 2 {3 stringstream s;4 s << i;5 return s.str();6 }
2,num函数,生成100以内随机数。
int num(){ return rand()%100; }
3,fh函数,生成4以内随机数,用来随机运算符。
int fh(){ return rand()%4;}
4,convert2RPN函数,将字符型的算式有中缀表达式转换为后缀表达式,用来进行后续的计算,是非常重要的函数,承载着极大的工作量。
void convert2RPN(string &s) { stringstream ss; stack<char> stk; for (size_t i = 0; i < s.length(); i++) { if (isdigit(s.at(i))) { ss << s.at(i); // 如果下一位不是数字,或者已经是最后一位,就加上空格 if ((i < s.length() - 1 && !isdigit(s.at(i + 1))) || i == s.length() - 1) { ss << ‘ ‘; } } else { if (stk.empty()) { stk.push(s.at(i)); } else { switch (s.at(i)) { case ‘(‘: stk.push(s.at(i)); break; case ‘)‘: // 把配套的‘(‘和之上的符号出栈 while (stk.top() != ‘(‘) { ss << stk.top(); stk.pop(); } stk.pop(); break; case ‘+‘: case ‘-‘: // ‘+‘ ‘-‘ ‘*‘ ‘/‘都出栈 while (!stk.empty() && stk.top() != ‘(‘) { ss << stk.top(); stk.pop(); } stk.push(s.at(i)); break; case ‘*‘: case ‘/‘: // ‘*‘和‘/‘出栈 while (!stk.empty() && (stk.top() == ‘*‘ || stk.top() == ‘/‘)) { ss << stk.top(); stk.pop(); } stk.push(s.at(i)); break; } } } } // 运算完了,此时把栈的元素都pop出来 while (!stk.empty()) { ss << stk.top(); stk.pop(); } s = ss.str();}
5,calculateRPN函数,用来计算后缀表达式。
float calculateRPN(const string &s) { stack<float> stk; for (size_t i = 0; i < s.length(); i++) { // 如果是数字,就和之前的数字组合起来 if (isdigit(s.at(i))) { int e = atoi(&s.at(i)); int t = e / 10; while (t > 0) { i++; t /= 10; } i++; stk.push(e); } else { float r = stk.top(); stk.pop(); float l = stk.top(); stk.pop(); float result; switch (s.at(i)) { case ‘+‘: result = l + r; break; case ‘-‘: result = l - r; break; case ‘*‘: result = l * r; break; case ‘/‘: result = l / r; break; } stk.push(result); } } return stk.top();}
6,主函数
int main(){ char ope[4]={‘+‘,‘-‘,‘*‘,‘/‘}; srand(time(NULL)); string s; s = itos(num())+ope[fh()]+itos(num())+ope[fh()]+itos(num())+ope[fh()]+itos(num()); cout << s+" "+"="; convert2RPN(s); cout << calculateRPN(s) << endl; return 0;}
程序结果截图,虽然比较简单,但是还是有些技术含量的,经过后面更新一定会更用户友好。
只做了一点微小的工作,恳请老师和同学批评,谢谢大家。
结对编程实现四则运算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。