小组成员:黄丽萍,杜若憧
讨论图片:
若果没有括号:
1、对整数‘+’,‘-’运算直接由用户输入结果,与计算结果进行比较。‘/’鲜花见再用字符串类型以最简分数的形式输出。
2、对于分数运算,分别求出分子与分母,再用simplify()函数将其化简,并用字符串类型将其以最简分数的形式输出。
当有括号时:
使用新的数组认识op[]储存括号计算结果,用op[]储存括号外的运算符。利用for循环,先找到‘*’,‘/’运算符,将符号两边的数值进行计算,将后一个数值改为0,次运算符修改为‘+’,在进行加减运算。
源代码为:
//要求判断结果是否正确
import java.util.Scanner; public class operate { static int simplify(int x,int y){/*求两数最大公约数,用于分数化简*/ int t,xx,yy,k=1; if(x>y) { t=x;x=y;y=t; } if(x<0) { x=-1*x; } if(y<0) { y=-1*y; } for(int i=x;i>=2;i--) { xx=x%i;yy=y%i; if(xx==0&&yy==0) { k=i; break; } } return k; } public static void main(String[] args) { // TODO 自动生成的方法存根 int a1,a2,b1,b2,k; int count=0;//统计作对题目个数 /*控制题目个数*/ Scanner in=new Scanner(System.in); System.out.print("请输入题目个数(>0):"); int number=in.nextInt(); /*数值范围*/ System.out.print("请输入数值所取得最大值(>0):"); int max=in.nextInt(); /*判断括号*/ int backets; System.out.print("是否有括号:(0:无 1:有):"); backets=in.nextInt(); if(backets==0)//没有括号 { /*控制是否有负数*/ System.out.print("是否有负数:(0:无 1:有):"); int negative=in.nextInt(); /*控制是否有乘除*/ System.out.print("是否有乘除法(0:无 1:有):"); int panduan; for(;;) { panduan=in.nextInt(); if(panduan==0||panduan==1) break; else panduan=in.nextInt(); } /*有无余数*/ int remainder=0; if(panduan==1){ System.out.print("是否有余数:(0:无 1:有):"); remainder=in.nextInt();} /*算法的实现*/ for(int i=0;i<number;i++) { int index; if(panduan==0) { index=(int)(Math.random()*1); } else { index=(int)(Math.random()*4); //随机产生,控制运算符 } a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); b1=(int)(Math.random()*max); b2=(int)(Math.random()*(max-1)+1); k=(int)(Math.random()*2); //控制是否是整数或分数,随机产生 if(k==0)//k=1输出整数运算 { if(index==0) //加法运算 { if(negative==0)//没有负数 { System.out.print(a1+"+"+b1+"="); int rs=a1+b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else //有负数 { a1=-1*a1; System.out.print(a1+"+"+b1+"="); int rs=a1+b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } if(index==1)//减法运算 { if(negative==0) {//无负数 if(a1>b1) { System.out.print(a1+"-"+b1+"="); int rs=a1-b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else { System.out.print(b1+"-"+a1+"="); int rs=b1-a1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } else//有负数 { System.out.print(a1+"-"+b1+"="); int rs=a1-b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } if(index==2)//乘法运算 { System.out.print(a1+"*"+b1+"="); int rs=a1*b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } if(index==3)//除法运算 { if(remainder==0) {//没有余数 for(int kk=0;;) { //余数不为0.继续生成随机数 if(a1!=0) { //判断分母是否为0 if(b1%a1!=0) { a1=(int)(Math.random()*max); b1=(int)(Math.random()*max); } else break; } else a1=(int)(Math.random()*max);} } System.out.print(b1+"/"+a1+"="); String rs; if(b1==0) { rs=0+"";//结果为0,不需要化简 } int cd=simplify(b1,a1); b1=b1/cd;a1=a1/cd; if(a1==1) { rs=b1+""; } else { rs=b1+"/"+a1; } String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } else//分数计算 { int s2=simplify(a1,a2); a1=a1/s2; a2=a2/s2; int s3=simplify(b1,b2); b1=b1/s3; b2=b2/s3; if(index==0) { if(negative==0) //没有负数 { /*分母不为1,分情况输出*/ if(a2!=1&&b2!=1) { System.out.println(a1+"/"+a2+"+"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=a1*b2+b1*a2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print(a1+"+"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=a1*b2+b1;//分子 int cd=simplify(molecule,denom);//最大公约数 String rs; denom=denom/cd; molecule=molecule/cd; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(a1+"/"+a2+"+"+b1+"="); int denom=a2; //分母 int molecule=a1+b1*a2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } else{//有负数 if(a2!=1&&b2!=1) { System.out.print("-"+a1+"/"+a2+"+"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=b1*a2-a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print("-"+a1+"+"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=b1-a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print("-"+a1+"/"+a2+"+"+b1+"="); int denom=a2; //分母 int molecule=b1*a2-a1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } } if(index==1) { if(a1/a2>=b1/b2) {/*分类输出:分母是否为1*/ if(a2!=1&&b2!=1) { System.out.print(a1+"/"+a2+"-"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=a1*b2-a2*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print(a1+"-"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=a1*b2-b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(a1+"/"+a2+"-"+b1+"="); int denom=a2; //分母 int molecule=a1-a2*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } else{ if(a2!=1&&b2!=1) { System.out.print(b1+"/"+b2+"-"+a1+"/"+a2+"="); int denom=a2*b2; //分母 int molecule=b1*a2-a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print(b1+"/"+b2+"-"+a1+"="); int denom=b2; //分母 int molecule=b1-a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(b1+"-"+a1+"/"+a2+"="); int denom=a2; //分母 int molecule=b1*a2-a1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } } if(index==2)//分数乘法 { if(a2!=1&&b2!=1) { System.out.println(a1+"/"+a2+"*"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=a1*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print(a1+"*"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=a1*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(a1+"/"+a2+"*"+b1+"="); int denom=a2; //分母 int molecule=a1*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } if(index==3)//分数除法 { if(a2!=1&&b2!=1) { for(int kk=0;;) { //余数不为0.继续生成随机数 if(b1==0) { //判断分母是否为0 b1=(int)(Math.random()*max); } else break; } System.out.print("("+a1+"/"+a2+")"+"/"+"("+b1+"/"+b2+")"+"="); int denom=a2*b1; //分母 int molecule=a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(molecule==0) { rs=0+""; } if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1&&a1!=0) { System.out.print(a1+"/"+"("+b1+"/"+b2+")"+"="); int denom=b1; //分母 int molecule=a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1&&b1!=0) { System.out.print("("+a1+"/"+a2+")"+"/"+b1+"="); int denom=a2*b1; //分母 int molecule=a1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } } } } else//有括号 { int szgs,fhgs,x,z,y;//szgs数字个数 fhgs符号个数 double result;//结果 int sz[]=new int[20];//数字数组 char fh[]=new char[10];//字符数组 char operate[]={'+','-','*','/'}; for(int p=0;p<number;p++) { szgs=(int)(Math.random()*7+3);//随机生成数字个数(3~7) //szgs=(int)(Math.random()*2+3); fhgs=szgs-1;//字符个数比数字少1 double rs[]=new double[fhgs];//储存每个括号计算结果 char op[]=new char[10];//储存字符 for(y=0;y<szgs;y++) { sz[y]=(int)(Math.random()*9);//随机生成数 } for(y=0;y<fhgs;y++) { x=(int)(Math.random()*3);//产生0~3的随机数 控制字符 fh[y]=operate[x]; } fh[fhgs]='='; if(fhgs%2==0)//偶数个运算符 { System.out.print(sz[0]);System.out.print(fh[0]); rs[0]=sz[0];op[0]=fh[0]; int d=1; for(y=1;y<fhgs;y++) { System.out.print("("); System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); System.out.print(")"); if(fh[y]=='+') { rs[d]=sz[y]+sz[y+1]; } else if(fh[y]=='-') { rs[d]=sz[y]-sz[y+1]; } else if(fh[y]=='*') { rs[d]=sz[y]*sz[y+1]; } else if(fh[y]=='/') { rs[d]=sz[y]/sz[y+1]; } System.out.print(fh[y+1]); op[d]=fh[y+1]; y=y+1; d=d+1; } //先算乘除 for(d=0;d<fhgs/2;d++) { if(op[d]=='*') { rs[d]=rs[d]*rs[d+1]; rs[d+1]=0; op[d]='+'; } if(op[d]=='/') { rs[d]=rs[d]/rs[d+1]; rs[d+1]=0; op[d]='+'; } } double sum=rs[0]; //后算加减 for(int ii=0;ii<fhgs/2+1;ii++) { if(op[ii]=='+') { sum=sum+rs[ii+1]; } if(op[ii]=='-') { sum=sum-rs[ii+1]; } } result=in.nextDouble(); if(result==sum) { System.out.println("回答正确!"); count++; } else System.out.print("回答错误!"); System.out.println("正确结果:"+sum); } else//奇数运算符 { int id=0; for(y=0;y<fhgs;y++) { System.out.print("("); System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); System.out.print(")"); //计算括号里的结果 if(fh[y]=='+') { rs[id]=sz[y]+sz[y+1]; } else if(fh[y]=='-') { rs[id]=sz[y]-sz[y+1]; } else if(fh[y]=='*') { rs[id]=sz[y]*sz[y+1]; } else if(fh[y]=='/') { rs[id]=sz[y]/sz[y+1]; } System.out.print(fh[y+1]); op[id]=fh[y+1]; y=y+1; id=id+1; } //先算乘除 for(id=0;id<fhgs/2+1;id++) { if(op[id]=='*') { rs[id]=rs[id]*rs[id+1]; rs[id+1]=0; op[id]='+'; } if(op[id]=='/') { rs[id]=rs[id]/rs[id+1]; rs[id+1]=0; op[id]='+'; } } double sum=rs[0]; //后算加减 for(int ii=0;ii<fhgs/2+1;ii++) { if(op[ii]=='+') { sum=sum+rs[ii+1]; } if(op[ii]=='-') { sum=sum-rs[ii+1]; } } result=in.nextDouble(); if(result==sum) { System.out.print("回答正确!"); count=count+1; } else System.out.print("回答错误!"); System.out.println("正确结果:"+sum); } } } System.out.println("计算正确的个数:"+count); } }
运行结果截图为:
周活动总结表
学生:黄丽萍
日期:2016/3/26
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
日总计 |
||
周日 |
0 |
||||||
周一 |
100 |
30 |
30 |
160 |
|||
周二 |
40 |
40 |
|||||
周三 |
40 |
40 |
|||||
周四 |
50 |
30 |
80 |
||||
周五 |
30 |
30 |
|||||
周六 |
60 |
60 |
|||||
周总计 |
100 |
250 |
60 |
410 |
事件记录日志
教师:王建民老师
学生:黄丽萍
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/21 |
8:00 |
9:50 |
10 |
100 |
听课 |
√ |
||
3/21 |
20:00 |
20:30 |
30 |
阅读 |
构建执法 |
√ |
||
3/21 |
13:00 |
15:30 |
30 |
编写程序,讨论 |
√ |
|||
3/22 |
20:00 |
20:50 |
20 |
40 |
编写程序,讨论 |
打电话 |
√ |
|
3/23 |
16:00 |
17:40 |
40 |
编程序,讨论 |
√ |
|||
3/24 |
16:00 |
17:30 |
40 |
50 |
编写程序 |
聊天 |
√ |
|
3/24 |
21:00 |
21:30 |
0 |
30 |
阅读 |
√ |
||
3/25 |
16:30 |
17:00 |
0 |
30 |
编写程序 |
√ |
||
3/26 |
12:50 |
14:00 |
10 |
60 |
编写程序 |
√ |
缺陷记录日志
学生:黄丽萍
日期:2016/3/26
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/26 |
1 |
编码 |
编译 |
10min |
||
描述:负数分数运算输出的结果化简失败 |
||||||
2 |
编码 |
编译 |
10min |
|||
描述:分数除法运算,第二个分数为0,导致计算结果错误, |
||||||
3 |
编码 |
编译 |
60min |
|||
描述:有多个括号时无法实现预期结果 |