软件工程概论作业三
题目要求:
程序设计思想:
在这次实验中老师提出了许多新的要求,比如要输出题目答案,并将答案存储到数据库中,还有分数提供要用真分数的形式表示出来,对此我编写了一个约分函数,对于真分数的四则运算的答案输出提供了较为便利的方法。
约分函数:
public static void fen() { Scanner num=new Scanner(System.in); System.out.println("请输入分母数值范围起始值:"); int fan1=num.nextInt(); System.out.println("请输入分母数值范围终点值:"); int fan2=num.nextInt(); System.out.println("请输入出题数量:"); int n = num.nextInt(); String timu[]=new String [n]; for(int i=0;i<n;i++) { String k2=""; boolean flag=true; int z1,z2; int b1; int c1; int x1=(int)(Math.random()*fan2);//分子 int y1=(int)(Math.random()*fan2+fan1+1);//分母 int x2=(int)(Math.random()*fan2);//分子 int y2=(int)(Math.random()*fan2+fan1+1);//分母 String q1=""; int a=(int)(Math.random() * 4);//用来判断四则运算的符号 if(x2==0&&a==3) i--; else{ if(a==0) {q1=x1+"/"+y1+"+"+x2+"/"+y2+"="; b1=x1*y2+x2*y1;c1=y1*y2; k2=yuefen(b1,c1);} if(a==1) {while((x1*y2-x2*y1)<0){x1=(int)(Math.random()*fan2);y1=(int)(Math.random()*fan2+fan1+1); x2=(int)(Math.random()*fan2); y2=(int)(Math.random()*fan2+fan1+1);} q1=x1+"/"+y1+"-"+x2+"/"+y2+"="; b1=x1*y2-x2*y1;c1=y1*y2; k2=yuefen(b1,c1);} if(a==2) {q1="("+x1+"/"+y1+")"+"*"+"("+x2+"/"+y2+")"+"="; b1=x1*x2;c1=y1*y2; k2=yuefen(b1,c1);} if(a==3) { while(y1*x2==0){ x1=(int)(Math.random()*fan2); x2=(int)(Math.random()*fan2); y1=(int)(Math.random()*fan2+fan1+1); y2=(int)(Math.random()*fan2+fan1+1); } q1="("+x1+"/"+y1+")"+"/"+"("+x2+"/"+y2+")"+"="; b1=x1*y2;c1=x2*y1; k2=yuefen(b1,c1);} int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; flag=false; break; } } if(flag){ timu[i]=q1; System.out.print(q1); String k1=num.next(); if(k1.equals(k2)) { System.out.println(" 答案正确"); } else { System.out.println(" 答案错误,正确答案为:"+k2); }} } } } //对结果进行约分的函数 public static String yuefen(int a,int b)//a为分子,b为分母 { int n = 0,z1,z2; String z3=""; if(a==0) z3="0"; else{ int s=a<b?a:b; for(int i=s;i>0;i--) { if(a%i==0&&b%i==0){ n=i; break;} } z1=a/n;z2=b/n; if(z1<z2){ z3+=z1; z3+="/"; z3+=z2;} else if(z1%z2==0){z3+=(z1/z2);} else if(z1>z2){ int k; k=z1/z2; z3+=k; z3+="'"; z3+=(z1-z2*k); z3+="/"; z3+=z2; }} return z3; }
这个函数是我在这次实验中主要编写的代码,通过这次函数,为接下来真分数的计算提供了较为大的便利。
import java.util.Scanner; public class sizeyunsuan3 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner num=new Scanner(System.in); System.out.println("请选择题目类型:1.整数 2.真分数"); int type=num.nextInt(); if(type==1)zheng(); if(type==2)fen(); } //整数四则运算 public static void zheng() { Scanner num=new Scanner(System.in); System.out.println("请输入数值范围起始值:"); int fan1=num.nextInt(); System.out.println("请输入数值范围终点值:"); int fan2=num.nextInt(); System.out.println("请输入出题数量:"); int n = num.nextInt(); String timu[]=new String [n]; String q1=""; for(int i=0;i<n;i++) { boolean flag=true; String b1=""; int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 4);//用来判断四则运算的符号 if(a==0){q1=x+"+"+y+"="; b1+=(x+y);} if(a==1){ while(x<y){x=(int)(Math.random()*fan2+fan1); y=(int)(Math.random()*fan2+fan1);} q1=x+"-"+y+"="; b1+=(x-y);} if(a==2){q1=x+"*"+y+"="; b1+=(x*y);} if(a==3){ while(y==0){y=(int)(Math.random()*fan2+fan1);} q1=x+"/"+y+"="; b1=yuefen(x,y); } int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; flag=false; break; } } if(flag){ timu[i]=q1; System.out.print(q1); String c1=num.next(); if(c1.equals(b1)) { System.out.println(" 答案正确"); } else { System.out.println(" 答案错误,正确答案为:"+b1); } }} } //真分数四则运算 public static void fen() { Scanner num=new Scanner(System.in); System.out.println("请输入分母数值范围起始值:"); int fan1=num.nextInt(); System.out.println("请输入分母数值范围终点值:"); int fan2=num.nextInt(); System.out.println("请输入出题数量:"); int n = num.nextInt(); String timu[]=new String [n]; for(int i=0;i<n;i++) { String k2=""; boolean flag=true; int z1,z2; int b1; int c1; int x1=(int)(Math.random()*fan2);//分子 int y1=(int)(Math.random()*fan2+fan1+1);//分母 int x2=(int)(Math.random()*fan2);//分子 int y2=(int)(Math.random()*fan2+fan1+1);//分母 String q1=""; int a=(int)(Math.random() * 4);//用来判断四则运算的符号 if(x2==0&&a==3) i--; else{ if(a==0) {q1=x1+"/"+y1+"+"+x2+"/"+y2+"="; b1=x1*y2+x2*y1;c1=y1*y2; k2=yuefen(b1,c1);} if(a==1) {while((x1*y2-x2*y1)<0){x1=(int)(Math.random()*fan2);y1=(int)(Math.random()*fan2+fan1+1); x2=(int)(Math.random()*fan2); y2=(int)(Math.random()*fan2+fan1+1);} q1=x1+"/"+y1+"-"+x2+"/"+y2+"="; b1=x1*y2-x2*y1;c1=y1*y2; k2=yuefen(b1,c1);} if(a==2) {q1="("+x1+"/"+y1+")"+"*"+"("+x2+"/"+y2+")"+"="; b1=x1*x2;c1=y1*y2; k2=yuefen(b1,c1);} if(a==3) { while(y1*x2==0){ x1=(int)(Math.random()*fan2); x2=(int)(Math.random()*fan2); y1=(int)(Math.random()*fan2+fan1+1); y2=(int)(Math.random()*fan2+fan1+1); } q1="("+x1+"/"+y1+")"+"/"+"("+x2+"/"+y2+")"+"="; b1=x1*y2;c1=x2*y1; k2=yuefen(b1,c1);} int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; flag=false; break; } } if(flag){ timu[i]=q1; System.out.print(q1); String k1=num.next(); if(k1.equals(k2)) { System.out.println(" 答案正确"); } else { System.out.println(" 答案错误,正确答案为:"+k2); }} } } }
运行结果截图:
反思:在这次实验中,对于两个运算符和三个运算符的四则运算的计算答案程序还在编写中,多次尝试未能调试成功。。。。正在努力中。。。。