四则运算作业
| 博客班级 | 计算机18级 |
|---|---|
| 作业要求 | 要求 |
| 作业目标 | 会编写四则运算代码 |
| 学号 | 3180701213 |
| 题目要求: | |
| 写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展: |
除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
程序要求能处理用户的输入,判断对错,累积分数
程序支持可以由用户自行选择加、减、乘、除运算
使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
整数加法:
"public static void intAdd() {
int x1=(int)(Math.random()100);
int x2=(int)(Math.random()100);
int answer=x1+x2;
int myAnswer=0;//正确答案
System.out.printf("%d+%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s1=new Scanner(System.in);
myAnswer=s1.nextInt();
if(myAnsweranswer) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d",answer);
System.out.printf("累计得分%.2f",score);
}
}"
整数减法:
"public static void intSub() {
int x1=(int)(Math.random()100);
int x2=(int)(Math.random()100);
int answer=x1-x2;
int myAnswer=0;
System.out.printf("%d-%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s2=new Scanner(System.in);
myAnswer=s2.nextInt();
if(myAnsweranswer) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d",answer);
System.out.printf("累计得分%.2f",score);
}
} "
整数乘法:
"public static void intMul() {
int x1=(int)(Math.random()100);
int x2=(int)(Math.random()100);
int answer=x1x2;
int myAnswer=0;
System.out.printf("%d%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s3=new Scanner(System.in);
myAnswer=s3.nextInt();
if(myAnsweranswer) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d",answer);
System.out.printf("累计得分%.2f",score);
}
}"
整数除法:
"public static void intDiv() {
int x1=(int)(Math.random()*100);
int x2=0;
while(x20) {
x2=(int)(Math.random()100);
}
float answer=(float)x1/x2;
float myAnswer=0;
System.out.printf("%d/%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s4=new Scanner(System.in);
myAnswer=s4.nextFloat();
//保留两位小数
BigDecimal b=new BigDecimal(answer);
float answer1=b.setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
if(myAnswer==answer1) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%.2f",answer);
System.out.printf("累计得分%.2f",score);
}
}"
分数加法:
"public static void decimalAdd() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y2+y1x2;//答案分子
answer1=x2y2;//答案分母
System.out.printf("%d/%d+%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s5=new Scanner(System.in);
String str=s5.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}"
分数减法:
"public static void decimalSub() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y2-y1x2;//答案分子
answer1=x2y2;//答案分母
System.out.printf("%d/%d-%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s6=new Scanner(System.in);
String str=s6.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}"
分数乘法:
"public static void decimalMul() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y1;//答案分子
answer1=x2y2;//答案分母
System.out.printf("%d/%d×%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s7=new Scanner(System.in);
String str=s7.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}"
分数除法:
"public static void decimalDiv() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y2;//答案分子
answer1=x2y1;//答案分母
System.out.printf("%d/%d÷%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s6=new Scanner(System.in);
String str=s6.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}"
主函数:
"public static void main(String[] args) {
Scanner s=new Scanner(System.in);
n=s.nextInt();
int type;//随机选择题目的类型
for(int i=0;i<n;i++) {
type=(int)(Math.random()10)%8;//随机产生0到7的整数
switch(type) {
case 0://整数加法
Operations.intAdd();
System.out.println("\n");
break;
case 1://整数减法
Operations.intSub();
System.out.println("\n");
break;
case 2://整数乘法
Operations.intMul();
System.out.println("\n");
break;
case 3://整数除法
Operations.intDiv();
System.out.println("\n");
break;
case 4://分数加法
Operations.decimalAdd();
System.out.println("\n");
break;
case 5://分数减法
Operations.decimalSub();
System.out.println("\n");
break;
case 6://分数乘法
Operations.decimalMul();
System.out.println("\n");
break;
case 7://分数除法
Operations.decimalDiv();
System.out.println("\n");
break;
}//switch
}//for
}//main"
运行结果:

源码:
"package homework;
import java.util.Scanner;
import java.math.BigDecimal;
public class Operations {
static int n=0;//题目的个数
static int n1=0;//答对题目的个数
static float score=0;//得分
public static void intAdd() {
int x1=(int)(Math.random()100);
int x2=(int)(Math.random()100);
int answer=x1+x2;
int myAnswer=0;//正确答案
System.out.printf("%d+%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s1=new Scanner(System.in);
myAnswer=s1.nextInt();
if(myAnsweranswer) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d",answer);
System.out.printf("累计得分%.2f",score);
}
}
public static void intSub() {
int x1=(int)(Math.random()100);
int x2=(int)(Math.random()100);
int answer=x1-x2;
int myAnswer=0;
System.out.printf("%d-%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s2=new Scanner(System.in);
myAnswer=s2.nextInt();
if(myAnsweranswer) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d",answer);
System.out.printf("累计得分%.2f",score);
}
}
public static void intMul() {
int x1=(int)(Math.random()100);
int x2=(int)(Math.random()100);
int answer=x1x2;
int myAnswer=0;
System.out.printf("%d%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s3=new Scanner(System.in);
myAnswer=s3.nextInt();
if(myAnsweranswer) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d",answer);
System.out.printf("累计得分%.2f",score);
}
}
public static void intDiv() {
int x1=(int)(Math.random()*100);
int x2=0;
while(x20) {
x2=(int)(Math.random()100);
}
float answer=(float)x1/x2;
float myAnswer=0;
System.out.printf("%d/%d=?\n",x1,x2);
System.out.println("请输入你的答案:");
Scanner s4=new Scanner(System.in);
myAnswer=s4.nextFloat();
//保留两位小数
BigDecimal b=new BigDecimal(answer);
float answer1=b.setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
if(myAnswer==answer1) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%.2f",answer);
System.out.printf("累计得分%.2f",score);
}
}
public static void decimalAdd() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y2+y1x2;//答案分子
answer1=x2y2;//答案分母
System.out.printf("%d/%d+%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s5=new Scanner(System.in);
String str=s5.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}
public static void decimalMul() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y1;//答案分子
answer1=x2y2;//答案分母
System.out.printf("%d/%d×%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s7=new Scanner(System.in);
String str=s7.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}
public static void decimalSub() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y2-y1x2;//答案分子
answer1=x2y2;//答案分母
System.out.printf("%d/%d-%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s6=new Scanner(System.in);
String str=s6.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}
public static void decimalDiv() {
int x1=(int)(Math.random()50)+1;
int x2=(int)(Math.random()50)+1;
int y1=(int)(Math.random()50)+1;
int y2=(int)(Math.random()50)+1;
int answer=0;
int answer1=0;
answer=x1y2;//答案分子
answer1=x2y1;//答案分母
System.out.printf("%d/%d÷%d/%d=?\n",x1,x2,y1,y2);
System.out.println("请输入你的答案:");
Scanner s6=new Scanner(System.in);
String str=s6.nextLine();
char[] a=str.toCharArray();
int sum=0;//输入的分数是字符串sum表示'/'所在的位置
for(int i=0;i<a.length;i++) {
if(a[i]'/')
{
break;
}
sum++;
}
String f1=str.substring(0, sum);
String f2=str.substring(sum+1,str.length());
int num1=Integer.parseInt(f1);//输入的分子
int num2=Integer.parseInt(f2);//输入的分母
if((answer/num1)(answer1/num2)) {
n1=n1+1;
score=(float)n1/n100;
System.out.println("恭喜你答对了");
System.out.printf("累计得分%.2f",score);
}
else {
score=(float)n1/n100;
System.out.printf("抱歉你答错了,正确答案是:%d/%d",answer,answer1);
System.out.printf("累计得分%.2f",score);
}
}
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
n=s.nextInt();
int type;//随机选择题目的类型
for(int i=0;i<n;i++) {
type=(int)(Math.random()10)%8;//随机产生0到7的整数
switch(type) {
case 0://整数加法
Operations.intAdd();
System.out.println("\n");
break;
case 1://整数减法
Operations.intSub();
System.out.println("\n");
break;
case 2://整数乘法
Operations.intMul();
System.out.println("\n");
break;
case 3://整数除法
Operations.intDiv();
System.out.println("\n");
break;
case 4://分数加法
Operations.decimalAdd();
System.out.println("\n");
break;
case 5://分数减法
Operations.decimalSub();
System.out.println("\n");
break;
case 6://分数乘法
Operations.decimalMul();
System.out.println("\n");
break;
case 7://分数除法
Operations.decimalDiv();
System.out.println("\n");
break;
}//switch
}//for
}//main
}
"
总结:总的来说题目不算太难,这个题目为我新学的java语言复习了一遍,尤其是字符串和数字操作。
| psp2.1 | 任务内容 | 计划完成需要的时间 | 实际完成需要的时间 |
|---|---|---|---|
| planning | 计划 | 15 | 14 |
| estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 30 |
| development | 开发 | 20 | 25 |
| analysis | 需求分析 | 16 | 8 |
| design spec | 生成设计文档 | 21 | 12 |
| design review | 设计复审 | 6 | 5 |
| coding standard | 代码规范 | 5 | 3 |
| design | 具体设计 | 10 | 16 |
| coding | 具体编码 | 35 | 37 |
| code review | 代码复审 | 6 | 8 |
| test | 测试 | 10 | 6 |
| reporting | 报告 | 6 | 8 |
| test reporting | 测试报告 | 3 | 2 |
| size measurement | 计算工作量 | 3 | 2 |
| postmortem & process improvement plan | 总结并提出改进计划 | 5 | 8 |

浙公网安备 33010602011771号