软件工程作业01--四则运算1

---恢复内容开始---

设计思想:

        先利用switch选择是整数运算还是分数运算,再分别选择有无余数和负数,然后输入产生式子的个数,

定义数组,分别产生随机数赋给数组,判断产生的式子是否与之前产生的式子相同,如果相同,i--,再到for循环中i++,

相当于重新为第i个数组元素赋值,如此循环,直到产生的式子跟之前的不一样为止,然后再判断运算符是否为“-”,

根据之前选择的是否含有负数,分别进行实现,如果选择没有负数,则将减数小于被减数的全部排除,如果选择有负数,

与之前同理;如果运算符是“/”,则根据之前选择的有无余数,分别实现,将正确结果转化为String类型,

String w=""+(b[i]/c[i])+"..."+(b[i]%c[i]);再将输入的结果与之比较,看结果是否正确;如果结果既不是“-”,

也不是“/”,则正常计算。当没有乘除的时候,只是判断有无余数,很简单。至于添加括号,暂时还未解决。

         计算分数的时候,当产生负数的时候,先同分,将分子相减,取得负数的时候,先取负数的绝对值,将分子的绝对值与分母进行化简。在负的分子取绝对值的时候,不能用零去减,直接p=-p;

import java.util.Scanner;

public class SiZeYunSuan02 {
	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()
	{
		System.out.println("请选择    1.有乘除   2.无乘除    3.有括号    "); 
		Scanner sc=new Scanner(System.in);
		int t4=sc.nextInt();
		switch(t4)
		{
		case 1:{                                           //3.6添加乘除
			System.out.println("请选择减法下是否有负数   1.有负数    2.无负数");
			int n1=sc.nextInt();    
			System.out.println("请选择除法下是否有余数   1.有余数    2.无余数");
			int n2=sc.nextInt();
			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]==3&&c[i]==0))  //限制不能重复,当为减法的时候,被减数大于减数,当为除法,被除数不为0
					i--;
				else if(d[i]==1)
				{
					switch(n1)
					{
					case 1:{
						if(b[i]>=c[i])   i--;
						else {
							System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
							String w2=""+(b[i]-c[i]);
							String q=sc.next();
							if(q.equals(w2))
								System.out.println("恭喜你,回答正确!");
							else
								System.out.println("回答错误! 正确结果为:"+w2);
							
						}
						break;
					 }
					case 2:{
						if(b[i]<=c[i])   i--;
						else{
							System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
							String w2=""+(b[i]-c[i]);
							String q=sc.next();
							if(q.equals(w2))
								System.out.println("恭喜你,回答正确!");
							else
								System.out.println("回答错误! 正确结果为:"+w2);
							
						}
						break;
					}
					
					}
				}
				else if(d[i]==3)
				{
					switch(n2)
					{
					case 1:{
						if(b[i]%c[i]==0)   {i--;}
						else{
							System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
						    String q=sc.next();
						    String w2=""+(b[i]/c[i])+"..."+(b[i]%c[i]);
						    if(q.equals(w2))
						    	System.out.println("恭喜你,回答正确!");
						    else
								System.out.println("回答错误! 正确结果为:"+w2);
						}
						break;
					}
					case 2:{
						if(b[i]%c[i]!=0)   {i--;}
						else 
						{
							System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
						    String q=sc.next();
						    String w2=""+(b[i]/c[i]);
						    if(q.equals(w2))
						    	System.out.println("恭喜你,回答正确!");
						    else
								System.out.println("回答错误! 正确结果为:"+w2);
						}
						break;
					}
					}
				}
				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 w3=""+(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]==2&&q.equals(w3))
						   System.out.println("恭喜你,回答正确!");
					   else if(d[i]==2&&!(q.equals(w3)))
						   System.out.println("回答错误! 正确结果为:"+w3);   
					}
				
			}
			break;
		}
		case 2:{                                      //3.7没有乘除号,只有加减
			System.out.println("请选择减法下是否有负数   1.有负数    2.无负数");
			int n1=sc.nextInt();    
			
			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()*2);
				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)  //限制不能重复,当为减法的时候,被减数大于减数,当为除法,被除数不为0
					i--;
				else if(d[i]==1)
				{
					switch(n1)
					{
					case 1:{
						if(b[i]>=c[i])   {i--;}
						else {
							System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
							String w2=""+(b[i]-c[i]);
							String q=sc.next();
							if(q.equals(w2))
								System.out.println("恭喜你,回答正确!");
							else
								System.out.println("回答错误! 正确结果为:"+w2);				
						}
						break;
					 }
					case 2:{
						if(b[i]<=c[i])   {i--;}
						else{
							System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
							String w2=""+(b[i]-c[i]);
							String q=sc.next();
							if(q.equals(w2))
								System.out.println("恭喜你,回答正确!");
							else
								System.out.println("回答错误! 正确结果为:"+w2);
							
						}	
						break;			
					}
					
					}
				}
				else
					{
					   System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" =");
					   String q=sc.next();      
					   String w1=""+(b[i]+c[i]);    //将数化为String类型				   				   
					   if(d[i]==0&&q.equals(w1))
						   System.out.println("恭喜你,回答正确!");
					   else if(d[i]==0&&!(q.equals(w1)))
						   System.out.println("回答错误! 正确结果为:"+w1);   
					}	
			}
			break;
		}
		case 3:{
			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()*6);
				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("请选择    1.有乘除   2.无乘除    3.有括号    "); 
		int t4=sc.nextInt();
		
		switch(t4)
		{
		case 1:{                                         //分数 有乘除
			System.out.println("请选择减法下是否有负数   1.有负数    2.无负数");
			int n1=sc.nextInt();    
			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 if(d[i]==1)
				{
					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 p2=b1[i]-c1[i];
					switch(n1)
					{
					case 1:{            //有负数
						
						if(p2>=0)   i--;
						else 
						{
							System.out.print("第"+(i+1)+"题:   "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"=");
							String q=sc.next();
							p2=-p2;
							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);
						}
						break;
					} 
					case 2:{                      //无负数
						if(p2<=0)    i--;
						else
						{
							System.out.print("第"+(i+1)+"题:   "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"=");
							String q=sc.next();
							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);
						}
						break;
					}
					}
				}
				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]==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]==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]/y2);
							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);
						}
					}
				}
			}
			break;
		}
		case 2:{                                           //分数只有加减,无乘除法
			System.out.println("请选择减法下是否有负数   1.有负数    2.无负数");
			int n1=sc.nextInt();    
			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()*2);
				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 if(d[i]==1)
				{
					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 p2=b1[i]-c1[i];
					switch(n1)
					{
					case 1:{          //有负数
						
						if(p2>=0)   i--;
						else 
						{
							System.out.print("第"+(i+1)+"题:   "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"=");
							String q=sc.next();
							p2=-p2;
							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);
						}
						break;
					}
					case 2:{           //无负数
						if(p2<=0)    i--;
						else
						{
							System.out.print("第"+(i+1)+"题:   "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"=");
							String q=sc.next();
							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);
						}
						break;
					}
				 }
				}
				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
					{
						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);
						}
					}
				}
			}
			break;
		}
		
		}
		
	}

}

截图 

 

   

---恢复内容结束---

                                                                                                  项目计划总结

日期/任务

听课/分钟

编写程序/分钟

阅读课本/分钟

日总计/分钟

3.6 周一

100

30

130

周二

60

60

周三

120

120

周四

60

60

周五

80

80

周总结

100

350

0

450

                                                                                               时间记录日志

日期

开始时间

结束时间

中断时间

净时间

活动

 

3.6周一

14:00

15:50

100

上课

周二

19:00

22:00

120

编程

周三

14:00

16:50

120

编程

周四

19:00

20:50

60

编程

周五

19:00

21:00

80

编程、写报告

                                                                                                     缺陷记录日志

日期

编号

引入阶段

排除阶段

修复时间

 

 

3.9

周四

01

编码

变译

50

描述:在真分数相减的差为负数,并化简分数时,将负数的分子先取绝对值再化简,不能用p=0-p;而应该直接p=-p;

原文地址:https://www.cnblogs.com/Zhanghaonihao/p/6532865.html