zoukankan      html  css  js  c++  java
  • 软件工程个人作业01 100以内四则运算自动答题系统(含整数和真分数)

    import java.util.Scanner;
    
    public class Yunsuan {
    	public static void main(String[] args){
    		Scanner sc=new Scanner(System.in); 
    		int t=1,n=0;
    		while(t!=0)
    		{
    			System.out.println("请选择:  1.整数运算    2.分数运算    0.退出");
    			t=sc.nextInt();
    			switch(t)
    			{
    			case 1:{zhengshu();
    				break;
    			}
    			case 2:{fenshu();
    			break;
    			}
    			
    		}
    		
    	}
    	}
    	//化简分数;求最大公约数
    	public static int simple(int a,int b)
    	{
    		int c=0;
    		if(a>b)
    		{		
    			while(a!=b)
    			{
    				c=a-b;
    				if(b>=c)
    				{
    					a=b;
    					b=c;
    				}
    				if(c>b)
    				{
    					a=c;
    				}
    			}
    			return a;
    		}
    		else
    		{
    			while(a!=b)
    			{
    				c=b-a;
    				if(a>=c)
    				{
    					b=a;
    					a=c;
    				}
    				if(c>a)
    				{
    					b=c;
    				}
    				
    			}
    			return a;
    		}
    	}
    	
    	//求最小公倍数
    	public static int gongbei(int a,int b)
    	{
    		int t=simple(a,b);
    		return a*b/t;
    	}
    	
    	//整数运算
    	public static void zhengshu()
    	{
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请输入题目数量:");
    		int n=sc.nextInt();
    		String a[]={"+","-","*","/"};
    		int b[]=new int [n]; 
    		int c[]=new int [n];
    		int d[]=new int [n];
    		for(int i=0;i<n;i++)
    		{
    			b[i]=(int) (Math.random()*100);    //产生随机数
    			c[i]=(int) (Math.random()*100);
    			d[i]=(int) (Math.random()*4);
    			boolean f = false;
    			for(int j=i-1;j>=0;j--)
    			{
    				if(b[i]==b[j]&&c[i]==c[j]&&d[i]==d[j])
    				{
    					f = true;
    					break;			
    				}
    			}
    			if(f == true||(d[i]==1&&b[i]<c[i])||(d[i]==3&&c[i]==0))  //限制不能重复,当为减法的时候,被减数大于减数,当为除法,被除数不为0
    				i--;
    			else
    				{
    				   System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
    				   String q=sc.next();      
    				   String w1=""+(b[i]+c[i]);    //将数化为String类型
    				   String w2=""+(b[i]-c[i]);
    				   String w3=""+(b[i]*c[i]);
    				   String w4=""+(b[i]/c[i]);
    				   
    				   if(d[i]==0&&q.equals(w1))
    					   System.out.println("恭喜你,回答正确!");
    				   else if(d[i]==0&&!(q.equals(w1)))
    					   System.out.println("回答错误! 正确结果为:"+w1);
    				   
    				   if(d[i]==1&&q.equals(w2))
    					   System.out.println("恭喜你,回答正确!");
    				   else if(d[i]==1&&!(q.equals(w2)))
    					   System.out.println("回答错误! 正确结果为:"+w2);
    				   
    				   if(d[i]==2&&q.equals(w3))
    					   System.out.println("恭喜你,回答正确!");
    				   else if(d[i]==2&&!(q.equals(w3)))
    					   System.out.println("回答错误! 正确结果为:"+w3);
    				  
    				   if(d[i]==3)
    				   {
    					   if((b[i]%c[i]==0&&q.equals(w4)))
    					   {
    						   System.out.println("恭喜你,回答正确!");
    					   }
    					   else if(b[i]%c[i]!=0)
    					   {
    						   int t=simple(b[i],c[i]);
    						   b[i]/=t;c[i]/=t;
    						   w4=""+b[i]+"/"+c[i];
    						   if(q.equals(w4))
    						   {
    							   System.out.println("恭喜你,回答正确!");
    						   }
    					   }
    				   }
    				   else if(d[i]==3)
    					   System.out.println("回答错误! 正确结果为:"+w4);
    				   
    				}
    			
    		}
    	}
    	public static void fenshu()
    	{
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请输入题目数量:");
    		int n=sc.nextInt();
    		String a[]={"+","-","*","/"};
    		int b1[]=new int [n]; 
    		int b2[]=new int [n];
    		int c1[]=new int [n];
    		int c2[]=new int [n];
    		int d[]=new int [n];
    		for(int i=0;i<n;i++)
    		{
    			b1[i]=(int) (Math.random()*100);  //产生随机数
    	        b2[i]=(int) (Math.random()*100);
    			c1[i]=(int) (Math.random()*100);
    			c2[i]=(int) (Math.random()*100);
    			
    			d[i]=(int) (Math.random()*4);
    			boolean f = false;
    			for(int j=i-1;j>=0;j--)
    			{
    				if(b1[i]==b1[j]&&b2[i]==b2[j]&&c1[i]==c1[j]&&c2[i]==c2[j]&&d[i]==d[j])//查重
    				{
    					f=true;
    		            break;
    				}		
    			}
    			if(f==true||(b1[i]>=b2[i])||(c1[i]>=c2[i])||(b2[i]==0)||(c2[i]==0)||(b1[i]==0)||(c1[i]==0))//分子大于分母,都不为0
    			{
    				i--;
    			}
    			else
    			{
    				int t1=simple(b1[i],b2[i]);
    				int t2=simple(c1[i],c2[i]);
    				b1[i] /= t1;               //都化为最简
    				b2[i] /= t1;
    				c1[i] /= t2;
    				c2[i] /= t2;
    				
    				
    				int t=gongbei(b2[i],c2[i]);   //最小公倍数
    				int y1=t/b2[i];             //最小公倍数除以分母
    				int y2=t/c2[i];
    				b1[i]*=y1;   //同分后的分子
    				c1[i]*=y2;   //同分后的分子
    				
    				int p1=b1[i]+c1[i];
    				int p2=b1[i]-c1[i];
    				if(d[i]==0&&p1>=t)
    				{
    					i--;
    					continue;
    				}
    				else if(d[i]==1&&p2<=0)
    				{
    					i--;
    					continue;
    				}
    				else if(d[i]==2&&((b1[i]/y1)*(c1[i]/y2)>=b2[i]*c2[i]))   //乘除的时候按同分前的分子,分母计算
    				{
    					i--;
    					continue;
    				}	
    				else if(d[i]==3&&((b1[i]/y1*c2[i])>=(b2[i]*c1[i]/y2)))
    				{
    					i--;
    					continue;
    				}	
    				else
    				{
    					System.out.print("第"+(i+1)+"题:   "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"=");
    					String q=sc.next();         
    					if(d[i]==0)
    					{
    						int t3=simple(p1,t);
    						p1 /=t3;
    						t /=t3;
    						String w1=""+p1+"/"+t;
    						if(q.equals(w1))
    							System.out.println("恭喜你,回答正确!");
    						else
    							System.out.println("回答错误! 正确结果为:"+w1);
    					}
    					else if(d[i]==1)
    					{
    						int t3=simple(p2,t);
    						p2 /=t3;
    						t /=t3;
    						String w1=""+p2+"/"+t;
    						if(q.equals(w1))
    							System.out.println("恭喜你,回答正确!");
    						else
    							System.out.println("回答错误! 正确结果为:"+w1);
    					}
    					else if(d[i]==2)
    					{
    						b1[i] /=y1;
    						b1[i] *=(c1[i]/y2);
    						b2[i] *=c2[i];
    						int t3=simple(b1[i],b2[i]);
    						b1[i] /=t3;
    						b2[i] /=t3;
    						String w1=""+b1[i]+"/"+b2[i];
    						if(q.equals(w1))
    							System.out.println("恭喜你,回答正确!");
    						else
    							System.out.println("回答错误! 正确结果为:"+w1);
    					}
    					else if(d[i]==3)
    					{
    						b1[i] /=y1;
    						b1[i] *=c2[i];
    						b2[i] *=c1[i];
    						int t3=simple(b1[i],b2[i]);
    						b1[i] /=t3;
    						b2[i] /=t3;
    						String w1=""+b1[i]+"/"+b2[i];
    						if(q.equals(w1))
    							System.out.println("恭喜你,回答正确!");
    						else
    							System.out.println("回答错误! 正确结果为:"+w1);
    					}
    				}
    			}
    		}
    	}
    
    }
    

    设计思想

    1.设置几个数组,将随机产生的100以内数存入其中,在一个数组里分别存入加减乘除,利用产生的三以内的整数,确定运算符号;

    2.添加限制,将产生负数,和上面的算式相同的排除掉,重新产生随机数。

    3.计算出结果,与输入的结果进行比较。

    4.在计算真分数的时候,先计算出分子和分母的最大公约数,将式子化简,进行加法运算的时候,先求出两个数的分母的最小公倍数,

    进行同分,让分子进行加减,由于不能有假分数,将两个分子相加大于最小公倍数的排除,重新产生随机数,由于结果也是分数形式,只能用String类型的,

    将计算的结果转化成String类型,String q=“”+分子+"/"+分母;再将结果与之比较

    运行截图

      

    没按预期时间完成的主要原因是不能清楚地理解题目的意思,老是改,是不是真分数包括带分数,来回的改。

    基础还是不太扎实,有时还会对逻辑关系分不清。

  • 相关阅读:
    python之timeit模块
    python isinstance函数
    继承
    冒泡排序&&选择排序
    监听器
    被钝化的代码
    Ajax验证用户名
    原生ajax访问服务器所展现的现象
    今天
    随机点名
  • 原文地址:https://www.cnblogs.com/Zhanghaonihao/p/6492241.html
Copyright © 2011-2022 走看看