四则运算2
2016-03-12 08:37
225 查看
在第一次的基础上,本次老师又提出了新的要求:
1.题目避免重复
2.可定制(数量\打印方式)
3.控制参数
是否有乘除法
是否有括号(最多支持十个数参与运算)
数值范围
加减有无负数
除法有无余数
分析:
首先需要解决有无括号的问题,再在它的基础上完成其他要求。基本思路是定义两个数组分别存放操作数和运算符,再将两个数组合成一个数组,在运算符和操作数前后开辟空间来存放括号,开辟的空间内若操作数前随机显示为左括号,则在其后几个操作数后添加右括号,若有操作数左右括号都存在,则左右括号位置置为空,避免重复没有想到明确的思路,数量可在循环里添加变量实现,乘除法通过if else语句,数值范围用输入的数带入随机函数产生,后两项着实理解不透
源代码:
结果截图:
实验总结:
此次作业完成的质量很差,用了很长时间,试了很多思路,发现基础还是薄弱,老师提示的递归思路自己不会使用,数组使用过程也是磕磕绊绊小错不断,if()里两个等号的错误还是会犯,基本功能缺失很多,虽然本次作业完成质量不高,但是给了自己信心,让自己发现了很多弱点,要多看书,要有大致完全的思路再开始动手,不要惧怕新知识
1.题目避免重复
2.可定制(数量\打印方式)
3.控制参数
是否有乘除法
是否有括号(最多支持十个数参与运算)
数值范围
加减有无负数
除法有无余数
分析:
首先需要解决有无括号的问题,再在它的基础上完成其他要求。基本思路是定义两个数组分别存放操作数和运算符,再将两个数组合成一个数组,在运算符和操作数前后开辟空间来存放括号,开辟的空间内若操作数前随机显示为左括号,则在其后几个操作数后添加右括号,若有操作数左右括号都存在,则左右括号位置置为空,避免重复没有想到明确的思路,数量可在循环里添加变量实现,乘除法通过if else语句,数值范围用输入的数带入随机函数产生,后两项着实理解不透
源代码:
#include<iostream> #include<time.h> using namespace std; void main() { srand((int)time(NULL));//设置随机种子,使得程序每次运行的结果都不同 int subject_number; //出题数量 int a[100]; //将数字存入数组a char b[100]; //将运算符存入数组b char c[100]; //将左括号存入数组c char d[100]; //将右括号存入数组d int e[100]; //合成总数组 char random_bracket; //随机生成括号 int random_number = 0; //运算数字字数 int i = 0; int operation_character = 0; int fuhao = 0; //判定运算符 int j; int k; int l; int p; int min, Max; //定义输入的值得范围的最值 int random_have; //定义左、右括号的是否存在的随机变量 char review_array; //检查数组中左右括号之间是否还存在左右括号 char left; //左括号变量 char right; //左括号变量 char sign = 'a '; //符号赋初值 bool result = 0; //定义是否需要乘除法的变量 bool need = 0; random_number = rand() % 10 + 2; //随机生成2~10个数 cout << "*************************************************" << endl; cout << "请输入产生数字的范围(最小和最大):"; cin >> min >> Max; cout << "是否需要乘除法[0(yes)/1(no)]"; cin >> result; cout << "请输入出题数量"; cin >> subject_number; if (0 == result) { for (j = 0; j < subject_number; j++) //设置题目数量 { for (i = 0; i < random_number; i++) { operation_character = rand() % (Max - min + 1) + min; a[i] = operation_character; fuhao = rand() % 4 + 1; switch (fuhao) { case 1:sign = '+'; break; case 2:sign = '-'; break; case 3:sign = '*'; break; case 4:sign = '/'; break; } b[i] = sign; e[4 * i] = ' '; e[4 * i + 1] = a[i]; e[4 * i + 3] = b[i]; e[4 * i + 2] = ' '; } random_have = rand() % 2 + 1; //随机确定有无括号 switch (random_have) { case 1: left = '('; right = ')'; break; case 2: left = ' '; right = ' '; break; } for (i = 0; i < random_number; i++) { for (k = 0; k < (random_number - 1) / 2; k++) { e[4 * k] = left; if (left == '(') { e[4 * k + 10] = right; } } if ((e[4 * i] == left)&&(e[4 * i + 2] == right)) { e[4 * i] = ' '; e[4 * i + 2] = ' '; } cout << (char)e[4 * i] << e[4 * i + 1] << (char)e[4 * i + 2] << (char)e[4 * i + 3]; } cout << '\b' << "=" << endl;//使用退格符'\b'来消除数组b最后一个多出来的符号 } } else { for (j = 0; j < subject_number; j++) //设置题目数量 { for (i = 0; i < random_number; i++) { operation_character = rand() % (Max - min + 1) + min; a[i] = operation_character; fuhao = rand() % 4 + 1; switch (fuhao) { case 1:sign = '+'; break; case 2:sign = '-'; break; case 3:sign = '*'; break; case 4:sign = '/'; break; } b[i] = sign; e[4 * i] = ' '; e[4 * i + 1] = a[i]; e[4 * i + 3] = b[i]; e[4 * i + 2] = ' '; } random_have = rand() % 2 + 1; //随机确定有无括号 switch (random_have) { case 1: left = '('; right = ')'; break; case 2: left = ' '; right = ' '; break; } for (i = 0; i < random_number; i++) { for (k = 0; k < (random_number - 1) / 2; k++) { e[4 * k] = left; if (left == '(') { e[4 * k + 10] = right; } } if ((e[4 * i] == left) && (e[4 * i + 2] == right)) { e[4 * i] = ' '; e[4 * i + 2] = ' '; } cout << (char)e[4 * i] << e[4 * i + 1] << (char)e[4 * i + 2] << (char)e[4 * i + 3]; } cout << '\b' << "=" << endl;//使用退格符'\b'来消除数组b最后一个多出来的符号 } } }
结果截图:
实验总结:
此次作业完成的质量很差,用了很长时间,试了很多思路,发现基础还是薄弱,老师提示的递归思路自己不会使用,数组使用过程也是磕磕绊绊小错不断,if()里两个等号的错误还是会犯,基本功能缺失很多,虽然本次作业完成质量不高,但是给了自己信心,让自己发现了很多弱点,要多看书,要有大致完全的思路再开始动手,不要惧怕新知识
相关文章推荐
- 分支语句
- 成都Uber优步司机奖励政策(3月12日)
- C#运算符
- DOM inserBefore createElement
- Ubuntu+Win7+Samba实现文件共享_Linux教程_Linux公社-Linux系统门户网站
- 增强版的RecycleViewAdapter,能够直接使用
- Linux 下配置防火墙
- Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
- 第二周学习进度
- 北京Uber优步司机奖励政策(3月12日~3月13日)
- 原生 javaScript 百叶窗 效果的实现及原理介绍
- 构建之法读书笔记02
- 微软推送Win10更新KB3144756:修复浏览器卡住/游戏界面冻结及麦克风无法访问等问题
- iOS-为试图添加手势
- Android Studio的安装步骤及设置.
- Linux 下停止tomcat 进程没有停止,需要手动kill
- 机房管理系统——vb与excel链接2
- CSS【03】最核心的几个概念
- Set Map
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月12日)