标签:
【设计思路】
定义了4个数组,分别是bracket[4]、numberzi[4]、numberm[4]、sign[4]。Bracket用于存储括号,2代表左双,1代表错括号,-1代表右括号,-2代表右双,0没有括号,初始为0;numberzi用于存储分子,numbermu存储分母,sign存储符号。定义整型sui,用于限制式子的长度,随机生成,取值2-4.。定义整型type,取值范围0-1,1代表分数运算。对于每个式子都随机生成的式子长度sui,for循环sui,生成numberzi[i]、numbermu[i](当为整数时,取1)、sign[i](从i>0开始随机取值,范围0-1,生成符号时,判断是否需要乘除,是,再将取值范围扩大到0-3)。生成分数时,分母的取值范围为numberzi-high(最大值)。当循环次数大于一时,判断符号和运算符前后两个数的大小,看是否需要交换二者的位置(满足减法无负数,除法正分数)。
约分:当为分数时(numbermu==1),将分子赋值给整形变量cc,for循环cc--,直到分子与分母都能整除cc,运算除法,然后break;
加括号:这部分用的是死方法,将所有的情况都考虑到。当运算输有四个数时,此时分三种情况,1.双括号:双括号有四种位置,第一个数前,bracket【0】=2,【1】=-1,【2】=-1。第二个数前,第三个数后,第四个数后。2.单括号:前两个数,前三个数,后两个数,中间两个数,后面三个数,前俩个数和后两个数。3.没有括号。当运算数为三个数时,此时只有两种情况:1.只有一个括号,前两个数,后两个数2.没有括号。当运算数为2时,没有括号。
式子输出:for循环sui,当i=0时,不输出sign;判断type的值,确定式子的格式,整数只输出numberzi,分数全部输出。
计算:首先判断括号的情况,单双((a b) (c d)算但括号)。双括号分左双和右双,左双:从双括号开始,寻找下一个右括号,计算括号中的运算(先乘除,后加减),然后将结果存储在前一个数的位置,依次将后面的数向前移动(bracket、sign、numberzi、numbermu全移),然后再次计算,直至计算完括号中运算,然后寻找下一个后括号,一样运算直指没有右括号;右括号类似。单括号:计算括号中的运算,将后面的数前移,直至没有右括号。每进行一次运算,将sui--。没有括号:for循环sui,直接运算(先乘除,后加减)。数组前移。(注:单括号与双括号为同一层次,二者最后都会进行没有括号的运算)
结果输出:化简numberzi【0】与numbermu【0】,判断如果numbermu【0】=1,则结果为整数,输出numberzi【0】否则输出numberzi【0】与numbermu【0】。
结果验证:将结果转化成字符串的格式(已化简),用户输入的结果保存在一个字符串中,比较二者。
【时间记录表】
日期 | 开始时间 | 结束时间 | 总计 | 活动 | 备注 |
2016.3.28 | 8.00 | 10.00 | 100 | 上课 | |
2016.3.29 | 15.20 | 18.00 | 150 | 看书讨论 | 先写出来,在写成网页版 |
2016.3.30 | 15.00 | 17.00 | 120 | 设计程序 | |
2016.3.31 | 15.30 | 17.40 | 130 | 编程 | Java |
2016.4.4 | 19.00 | 21.00 | 120 | 编程 | Java |
2016.4.5 | 19.00 | 21.30 | 150 | 编程 | Java |
2016.4.6 | 15.00 | 21.00 | 240 | 编程,找错 | 吃饭 |
2016.4.7 | 15.30 | 21.00 | 200 | 找错 | 吃饭 |
2016.4.9 | 15.00 | 21.00 | 200 | 改错 | 吃饭 |
2016.4.10 | 15.00 | 19.00 | 200 | 将程序写成网页版 | jsp |
2016.4.11 | 8.00 | 10.00 | 100 | 上课 | |
2016.4.12 | 15.00 | 21.00 | 240 | 继续将程序改成网页版 |
标签:
原文地址:http://www.cnblogs.com/cchjl/p/5396127.html