软件工程个人作业02------即01的升级版本

程序要求:

第二版的要求为:

1、题目避免重复;

2、可定制(数量/打印方式);

3、可以控制下列参数:

????????是否有乘除法;

????????是否有括号(最多可以支持十个数参与计算);

????????数值范围;

????????加减有无负数;

????????除法有无余数!

设计思路:

先把第一版的面向过程,改成面向对象的设计,要不然不容易改。????

第一个要求为不重复,需要把第一二个随机数分别用数组表示,这样在后面比较的时候,才能在
第一二个随机数组里面和前面的进行比较。

如果想要不重复,我在判断是否重复的时候,用的方法不是一次性判断第一个数并且第二个数并且符号都同时相等,这样比较每次需要比较三个。

for(int j=1;j<=i-1;j++)

????????if(dividend1[i]==dividend1[j] && divisor1[i]==divisor1[j] && operate[i%4+1]==operate[j%4+1])

?

我用的是,先判断第一个,如果和上面有重复的,那么比较第二个;如果第二个同时也重复了,那么比较符号。这样只有当上一个比较满足的时候,

才会比较后面的;否则后面的根本不需要比较,觉得可以简化比较过程。

for(int j=1;j<=i-1;j++)

????????if(dividend1[i]==dividend1[j])

????????????????if(divisor1[i]==divisor1[j])

????????????????????if(operate[i%4+1]==operate[j%4+1])

比较的时候,每生成一个新的,就和前面所有已经生成过的进行一次比较,用for的嵌套实现。

假分数的做法和上面的整数做法基本雷同。

?

程序做的不如意的地方就是:整数和假分数是有共同的代码段的,他们从某种角度来看是可以合并的,或者是用另外一个函数来封装共同代码段,然后在整数和假分数里面分别进行调用就可以,但是程序当中并没有实现。

?

关于乘除法这部分,只有整数部分实现了,假分数部分没有做,不过就是把假分数部分的乘除法去掉即可,与整数部分没区别。

关于这个程序的一个想法,不同于现在的编程思路:输出全部的条件,让用户选择。

然后根据条件,来随机出现选定的条件。比如是否有乘除法,有的话,就随机出现;没有的话,就不用出现。

大概是根据大一通讯录的类的添加,查询,删除之类的程序来的想法。

????

源代码:

  1. /* 底云飞 2016.3.19 */
  2. #include <iostream>
  3. #include <time.h>
  4. #include <string>
  5. using
    namespace std;
  6. #define MAX 2000
  7. //显示有乘除法的运算题
  8. void show_multiplication()
  9. {
  10. ???//随机数dividend1和divisor1对应第一个随机数和第二个随机数,operate是用于四则运算的
  11. ???float dividend1[MAX],divisor1[MAX],operate[4]; //分别为第一个随机数,第二个随机数,运算符
  12. ???float result=0; //result是结果
  13. ???string fu; //运算符号
  14. ???int a=0; //a用来给计数的
  15. ???int number=0; //要生成多少道题
  16. ???cout<<"要生成多少道题呢?";
  17. ???cin>>number;
  18. ???for(int i=1;;i++)
  19. ???{
  20. p: dividend1[i] = rand()%100;
  21. ??????divisor1[i] = rand()%100;
  22. ??????operate[i%4+1] = rand()%4+1; //生成第一二个随机数和随机运算符的代表数字
  23. ??????for(int j=1;j<=i-1;j++)
  24. ?????????if(dividend1[i]==dividend1[j])
  25. ????????????if(divisor1[i]==divisor1[j])
  26. ???????????????if(operate[i%4+1]==operate[j%4+1]) //判断是否重复
  27. ??????????????????goto p;
  28. ??????if(operate[i%4+1]==1)
  29. ??????{
  30. ?????????result=dividend1[i]+divisor1[i];
  31. ?????????fu = "+";
  32. ??????}
  33. ??????else
    if(operate[i%4+1]==2)
  34. ??????{
  35. ?????????result=dividend1[i]-divisor1[i];
  36. ?????????fu = "-";
  37. ??????}
  38. ??????else
    if(operate[i%4+1]==3)
  39. ??????{
  40. ?????????result=dividend1[i]*divisor1[i];
  41. ?????????fu = "*";
  42. ??????}
  43. ??????else
    if(operate[i%4+1]==4)
  44. ??????{
  45. ?????????result=dividend1[i]/divisor1[i];
  46. ?????????fu = "/";
  47. ??????} //直接用result把运算结果算出来,用于后面显示
  48. ??????if(fu=="/"&&divisor1[i]==0) //如果除法时分母为0,则重新生成随机数
  49. ?????????goto p;
  50. ??????cout<<a+1<<". "<<dividend1[i]<<fu<<divisor1[i]<<"="<<result<<endl;
  51. ??????a++;
  52. ??????if(a==number) //当达到指定数量时,结束
  53. ?????????break;
  54. ???} //for
  55. }
  56. ?
  57. //显示没有乘除法的运算题
  58. void show_nomultiplication()
  59. {
  60. ???//随机数dividend1和divisor1对应第一个随机数和第二个随机数,operate是用于四则运算的
  61. ???float dividend1[MAX],divisor1[MAX],operate[2]; //分别为第一个随机数,第二个随机数,运算符
  62. ???float result=0; //result是结果
  63. ???string fu; //运算符号
  64. ???int a=0; //a用来给计数的
  65. ???int number=0; //要生成多少道题
  66. ???cout<<"要生成多少道题呢?";
  67. ???cin>>number;
  68. ???for(int i=1;;i++)
  69. ???{
  70. p: dividend1[i] = rand()%100;
  71. ??????divisor1[i] = rand()%100;
  72. ??????operate[i%2+1] = rand()%2+1;
  73. ??????for(int j=1;j<=i-1;j++)
  74. ?????????if(dividend1[i]==dividend1[j])
  75. ????????????if(divisor1[i]==divisor1[j])
  76. ???????????????if(operate[i%2+1]==operate[j%2+1])
  77. ??????????????????goto p;
  78. ??????if(operate[i%2+1]==1)
  79. ??????{
  80. ?????????result=dividend1[i]+divisor1[i];
  81. ?????????fu = "+";
  82. ??????}
  83. ??????else
    if(operate[i%2+1]==2)
  84. ??????{
  85. ?????????result=dividend1[i]-divisor1[i];
  86. ?????????fu = "-";
  87. ??????} //直接用result把运算结果算出来,用于后面显示
  88. ??????cout<<a+1<<". "<<dividend1[i]<<fu<<divisor1[i]<<"="<<result<<endl;
  89. ??????a++;
  90. ??????if(a==number) //当达到指定数量时,结束
  91. ?????????break;
  92. ???} //for
  93. }
  94. ?
  95. //显示假分数运算题
  96. void showimproperfraction()
  97. {
  98. ???//int dividend1[MAX],divisor1[MAX],operate[4]; //分别为被除数,除数和运算符
  99. ???float dividend1[MAX], divisor1[MAX], dividend2[MAX], divisor2[MAX], operate[MAX];
  100. ???int number,b=0; //number用来输入几个假分数的运算,b用来计数,查看是否到达number个
  101. ???float result; //计算之后的结果
  102. ???string fu; //计算符号
  103. ???cout<<"需要生成几个假分数的四则运算?";
  104. ???cin>>number;
  105. ???cout<<"下面是生成的"<<number<<"个假分数四则运算:"<<endl;
  106. ???cout<<"个数 "<<"随机次数 "<<"题目"<<endl;
  107. ???for(int i=1;;i++)
  108. ???{
  109. q: dividend1[i] = rand()%100;
  110. ??????divisor1[i] = rand()%100;
  111. ??????dividend2[i] = rand()%100;
  112. ??????divisor2[i] = rand()%100;
  113. ??????operate[i%4+1] = rand()%4+1;
  114. ??????for(int j=1;j<=i-1;j++)
  115. ?????????if(dividend1[i]==dividend1[j])
  116. ????????????if(divisor1[i]==divisor1[j])
  117. ???????????????if(dividend2[i]==dividend2[j])
  118. ??????????????????if(divisor2[i]==divisor2[j])
  119. ?????????????????????if(operate[i%4+1]==operate[j%4+1])
  120. ????????????????????????goto q;
  121. ??????if(divisor1[i]>=dividend1[i]&&divisor2[i]>=dividend2[i]&&dividend1[i]!=0&&divisor1[i]!=0) //判断是真分数并且分母不能为0
  122. ??????{
  123. ?????????if(operate[i%4+1]==1)
  124. ?????????{
  125. ????????????result=(divisor1[i]/dividend1[i])+(divisor2[i]/dividend2[i]);
  126. ????????????fu = "+";
  127. ?????????}
  128. ?????????else
    if(operate[i%4+1]==2)
  129. ?????????{
  130. ????????????result=(divisor1[i]/dividend1[i])-(divisor2[i]/dividend2[i]);
  131. ????????????fu = "-";
  132. ?????????}
  133. ?????????else
    if(operate[i%4+1]==3)
  134. ?????????{
  135. ????????????result=(divisor1[i]/dividend1[i])*(divisor2[i]/dividend2[i]);
  136. ????????????fu = "*";
  137. ?????????}
  138. ?????????else
    if(operate[i%4+1]==4)
  139. ?????????{
  140. ????????????result=(divisor1[i]/dividend1[i])/(divisor2[i]/dividend2[i]);
  141. ????????????fu = "/";
  142. ?????????}
  143. ?????????cout<<b+1<<". "<<i<<". "<<"("<<divisor1[i]<<"/"<<dividend1[i]<<")"<<fu<<"("<<divisor2[i]<<"/"<<dividend2[i]<<")="<<result<<endl;
  144. ?????????b++;
  145. ??????}//判断是两个真分数的if条件语句
  146. ??????if(b==number) //当达到真分数数量要求时,停止
  147. ?????????break;
  148. ???}//for
  149. }
  150. ?
  151. void main()
  152. {
  153. ???int fenshuflag,chengchuflag;
  154. ???srand((unsigned)time(0)); //用时间做随机种子,随机数发生器
  155. ???cout<<"需要有乘除法吗?需要输入1,不需要输入0:"<<endl;
  156. ???cin>>chengchuflag;
  157. ???if(chengchuflag==1)
  158. ??????show_multiplication(); //带有乘除法的运算
  159. ???else
  160. ??????show_nomultiplication(); //不带有乘除法的运算
  161. ?
  162. //假分数的四则运算
  163. ???cout<<"需要生成假分数的四则运算吗(需要输入1,不需要输入0)?:";
  164. ???cin>>fenshuflag;
  165. ???if(fenshuflag==1)
  166. ??????showimproperfraction();
  167. ???else
    if(fenshuflag == 0)
  168. ??????exit(1);
  169. }

?

?

?

?

程序感想:

程序的众多功能并没有实现,原因还是在于自己的懒惰,觉得这个程序比较难,就没有想去做了,所以一时之间又不能实现所有功能。

程序有的部分自己有想法,但是并没有体现在程序中,做的和自己设想的还是相差好多。

时间: 2024-10-13 01:29:28

软件工程个人作业02------即01的升级版本的相关文章

软件工程结对作业02(借鉴版)

软件工程结对作业02(借鉴版) 在编写程序的时候因为不会将Java程序嵌入进jsp中所以借鉴了一个学姐的程序,下面是学姐的程序.但在对学姐程序就行修改时发现了一些问题: 在Newjsp中能调用html中的题目个数的参数 在Myjsp中不能调用html中的题目个数的参数 其中这个参数timugeshu,是我自己后来添加的,用来改变题目个数的,与Java程序无关,只在jsp文件中作用 源程序: NewFeil.html <!DOCTYPE html> <html> <head&g

软件工程个人作业02(四则运算)

四则运算作业02 import javax.swing.JOptionPane; import java.util.Random; import java.util.Scanner; public class Arithmetic { public static void main(String[] args) { // TODO 自动生成的方法存根 int c;//选择 int c1,c4,c5,c6,c7,c8; int a,b,d1;//二位数运算 int c2,c3; int e=0;/

软件工程概论作业02

这周,我们上了软件工程概论第三节课,终于体会到的程序员的不易,作业一次比一次难,老师提出的要求越来越多,就像未来的客户一样,要求永远无止境. 这次还在上次的要求上提出了新的要求,要求可选择整数还是分数,可指定范围,不可重复. 可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数! 日期 开始时间 结束时间 中断时间 净时间 活动 备注 C U 3/10 14:00 16

软件工程结对作业02(原创版)

一.设计思路 1.在HTML文件中写题目选择项 2.输入一个数控制题目个数 3.输入一个数控制取值范围(小于100) 4.输入一个数控制参数个数 5.选择是否有乘除法数 6.在有乘除法时,选择是否有余法 7.选择是否有括号 8.点击提交按钮,通过一个链接进入jsp文件,并且用户在HTML输入的参数传到jsp 页面 9.调用java函数,输出题目 10.点击开始答题之后,进入下一个jsp页面,用户答题并显示用户答题情况 二.源代码: HTML文件 <!DOCTYPE html PUBLIC "

软件工程结队作业02

设计思想:    使用jsp实现java代码与网页的连接,利用数组实现数据的传输.Session对象页面的跳转功能. 源代码: 运行结果截图: 编程总结: 对jsp和session的使用不熟悉,不知道如何将java代码插入到网页程序中,所以参考了网上代码进行编写. 周活动总结表 姓名:杜若憧                            日期 2016/4/8 听课 编写代码 阅读课本 准备考试 日总计 周日 周一 50 50 周二 100 60 160 周三 22 22 周四 30 3

软件工程个人作业02(四则运算2)

题目要求: 是否有乘除法:  是否有括号(最多可以支持十个数参与计算):  数值范围:  加减有无负数:  除法有无余数!    四则运算2的设计思想:因为题目要求可以选择是否有除法,是否有括号,加减有无负数,除法有无余数.所以这里考虑用if~~else语句来进行选择.目前程序无法完成生成题目是否有括号的要求.    源程序代码: import java.util.Random; import java.util.Scanner; public class sizeyunsuan2 { /*是否

软件工程个人作业02

设计思想:采用随机数来决定是否右括号,计算结果用到递归方法,先对运算符中的乘除进行计算,在进行加减计算,在输出结果. 源程序代码:(未完成) package 四则运算; import java.util.Random; import java.util.*; public class Sizeyunsuan2 { public static void main(String[] args) { int m = 0; int n = 0; Scanner scan = new Scanner(Sy

软件工程结对作业02

import java.util.Scanner; class Fraction//分数 { public int numerator;//分子 public int denominator;//分母 public void creatFraction() { //--生成值并化简-- boolean bool=false; while(bool==false) { int up=(int)(1+Math.random()*10); int down=(int)(1+Math.random()*

软件工程个人作业02——PSP0级要求记录

项目计划日志: 没有累计时间,所以没有累计时间. 时间记录日志: 缺陷记录日志:

软件工程概论-作业02

1.要求:写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算.题目避免重复.可定制出题的数量. 2.思路: 1)产生随机数choose,1或2,1表示生成整数表达式,2表示生成分数表达式,并用一个字符串数组存储表达式便于打印输出(长度由用户输入): 2)用一个字符数组存储"+ - * ÷"等符号,取符号则生成随机数0-3: 3)若choose为1,random生成两个整数作为表达式的左操作数和右操作数,并随机产生操作符: