个人作业1——四则运算题目生成程序(基于控制台)
码市地址:https://coding.net/u/H1159650478/p/huangrui/git/blob/master/软件工程.txt
1、 a、需求分析: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
运算符为 +, −, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率。
要求能处理用户输入的真分数, 如 1/2, 5/12 等
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目 Myapp.exe -n 10
b、功能设计: 1.产生随机数。
2.随机进行整数和真分数的运算并且可以判断正确并给出正确答案。
3.可以算出正确率。
c、设计实现: 我是用eclipse软件写的java代码。由于知识掌握的不够好,所以我是用比较繁琐的switch来完成整数和分数的四则运算,一共用到8个case。然后运用了Random完成了随机数的生成,最后当程序跳出while循环后进行了正确率的运算,整个编程也写完了。
d、代码说明:
这段代码实现了我要自主做的题目数,并实现了用while循环使题目随机生成。
int c = 0;
while (c < x) {
Random r = new Random();
int i;// 分子
int j;
int d;// 分母
int e;
这段代码就是用switch和case开始了四则运算。
switch (s) {
case 0: {
i = r.nextInt(23);// 随机数在0到23之间产生
j = r.nextInt(23);
System.out.print(+i + "+" + j + "=");
Scanner sc = new Scanner(System.in);
int str = 0;
str = sc.nextInt();
int sum = i + j;
if (str == sum) {
System.out.println("correct");
a++;
c++;
} else {
System.out.println("wrong");
int p = i + j;
System.out.println("the right answer is:" + p);
c++;
}
}
break;
这段代码就是这次编程我觉得最难的地方了,用到辗转相除法求最大公约数。
int n1 = i * e;
int m1 = j * d;
int k = m1 % n1;
int l = n1;
int o = 0;
if (k == 0) {
m1 = m1 / n1;
n1 = 1;
} else {
while (m1 % k != 0 || n1 % k != 0) {
o = k;
k = l % k;
l = o;
}
m1 = m1 / k;
n1 = n1 / k;
}// 辗转相除求出最大公约数
e、测试运行:
正确错误都有显示出来,最后计算出来对的正确率。
2、展示PSP
3、小结:这次作业对我而言很有挑战,真的发现自己差了很多。而且以前的知识由于没有巩固忘记的也很快,所以编程很吃力。虽然思路简单但是知识储存太少,导致编程的工作量增加了很多。说实话一开始随机数怎么做都完全不知道,这次的收获大概在于学懂了一点点随机生成吧,当然也向同学们寻求了很多帮助,希望下次作业可以再有进步。