• 软件工程个人作业03


    设计思路:(1)直接输出整数加减乘除的答案。然后取余余数用括号括起来。

                    (2)分数先通分(将分母相乘通分),最后答案找分子分母的最小公约数来约分。

    程序源代码:

    #include<iostream>
    #include<stdlib.h>
    #include<conio.h>
    using namespace std;
    void DealAddAndSubtract1(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*无负数*/
    {
    	for(int p=0;p<m;p++)
    	{
    
    	   int x,y;
    	   int a=(int)rand()%n;
    	   int b=(int)rand()%n;
    	    if(b>a)
    	   {
    		  int c;
    		  c=b;
    		  b=a;
    		  a=c;
    	    }
    		 
    	   
    	   
    		   int i=(int)rand()%n;
    	       int j=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(i<=j&&j!=0)
    			  break;
    			  i=(int)rand()%n;
    	          j=(int)rand()%n;
    		 }
    	   
    		  int c=(int)rand()%n;
    	      int d=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(c<=d&&d!=0)
    			  break;
    			  c=(int)rand()%n;
    	          d=(int)rand()%n;
    		 }
    	     if(c*j<d*i)
    	    {
    		 int e,f;
    		 e=i;
    		 i=c;
    		 c=e;
    		 f=j;
    		 j=d;
    		 d=f;
    		 }
    		  for(x=d*j;x>=1;x--)
    		 {
    			 if((c*j-d*i)%x==0&&d*j%x==0)
    				 break;
    		  }
    		  for(y=d*j;y>=1;y--)
    		 {
    			 if((c*j+d*i)%y==0&&d*j%y==0)
    				 break;
    		  }
    		 
    	   
    	   int k=(int)rand()%4;
    	   switch(k)
    	   {
    	   case 0:
    		   {
    			   cout<<a<<"+"<<b<<"="<<a+b;
    			   break;
    		   }
           case 1:
    		   {
    			   cout<<a<<"-"<<b<<"="<<a-b;
    			   break;
    		   }
    	     case 2:
    		   {
    			   cout<<"("<<c<<"/"<<d<<")"<<"+"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j+i*d)/y<<"/"<<(d*j)/y;
    			   break;
    
    		   }
    		   	   
    	   case 3:
    		   {
    			    cout<<"("<<c<<"/"<<d<<")"<<"-"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j-i*d)/x<<"/"<<(d*j)/x;
    			   break;
    		   }
    		   
    		   }
    	   
    	   if (p%3==2)
    		{
    			cout<<endl;
    		}
    		else
    		 {
    			 cout<<'	';
    		}
    	}
    }
    
    void DealAddAndSubtract2(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*有负数*/
    {
    	for(int p=0;p<m;p++)
    	{
    	   int x,y;
    	   int a=(int)rand()%n;
    	   int b=(int)rand()%n;
    	    
    		   int i=(int)rand()%n;
    	       int j=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(i<=j&&j!=0)
    			  break;
    			  i=(int)rand()%n;
    	          j=(int)rand()%n;
    		 }
    	   
    		  int c=(int)rand()%n;
    	      int d=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(c<=d&&d!=0)
    			  break;
    			  c=(int)rand()%n;
    	          d=(int)rand()%n;
    		 }
    		 for(x=d*j;x>=1;x--)
    		 {
    			 if((c*j-d*i)%x==0&&d*j%x==0)
    				 break;
    		  }
    		  for(y=d*j;y>=1;y--)
    		 {
    			 if((c*j+d*i)%y==0&&d*j%y==0)
    				 break;
    		  }
    		 
    
    	    
    	   int k=(int)rand()%4;
    	   switch(k)
    	   {
    	   case 0:
    		   {
    			   cout<<a<<"+"<<b<<"="<<a+b;
    			   break;
    		   }
           case 1:
    		   {
    			   cout<<a<<"-"<<b<<"="<<a-b;
    			   break;
    		   }
    	     case 2:
    		   {
    			   cout<<"("<<c<<"/"<<d<<")"<<"+"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j+i*d)/y<<"/"<<(d*j)/y;
    			   break;
    
    		   }
    		   	   
    	   case 3:
    		   {
    			    cout<<"("<<c<<"/"<<d<<")"<<"-"<<"("<<i<<"/"<<j<<")"<<"="<<(c*j-i*d)/x<<"/"<<(d*j)/x;
    			   break;
    		   }
    		   }
    	   
    	   if (p%3==2)
    		{
    			cout<<endl;
    		}
    		else
    		 {
    			 cout<<'	';
    		}
    	}
    		
    
    }
    void DealMultiplicationAndDivison1(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*无余数*/
    {
    	 for(int p=0;p<m;p++)
    	 {
    	    int x,y; 
    	   int a=(int)rand()%n;
    	   int b=(int)rand()%n;
    	    
    	   for(;;)
    		 {
    			 if(b!=0&&a>b&&a%b==0)
    			  break;
    			  a=(int)rand()%n;
    	          b=(int)rand()%n;
    		 }
    	   
    	   
    		   int i=(int)rand()%n;
    	       int j=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(i<=j&&j!=0&&i!=0)
    			  break;
    			  i=(int)rand()%n;
    	          j=(int)rand()%n;
    		 }
    	   
    		  int c=(int)rand()%n;
    	      int d=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(c<=d&&d!=0&&c!=0)
    			  break;
    			  c=(int)rand()%n;
    	          d=(int)rand()%n;
    		 }
    		 for(x=d*j;x>=1;x--)
    		 {
    			 if(c*i%x==0&&d*j%x==0)
    				 break;
    		  }
    		  for(y=d*j;y>=1;y--)
    		 {
    			 if(c*j%y==0&&d*i%y==0)
    				 break;
    		  }
    		  
    	   int k=(int)rand()%4;
    	   switch(k)
    	   {
    	   case 0:
    		   {
    			   cout<<a<<"*"<<b<<"="<<a*b;
    			   break;
    		   }
           case 1:
    		   {
    			   cout<<a<<"/"<<b<<"="<<a/b;
    			   break;
    		   }
    	     case 2:
    		   {
    			   cout<<"("<<c<<"/"<<d<<")"<<"*"<<"("<<i<<"/"<<j<<")"<<"="<<c*i/x<<"/"<<d*j/x;
    			   break;
    
    		   }
    		   	   
    	   case 3:
    		   {
    			    cout<<"("<<c<<"/"<<d<<")"<<"/"<<"("<<i<<"/"<<j<<")"<<"="<<c*j/y<<"/"<<d*i/y;
    			   break;
    		   }
    		   
    		   }
    	   
    	   if (p%5==4)
    		{
    			cout<<endl;
    		}
    		else
    		 {
    			 cout<<'	';
    		}
    
    	 
    	 }
    
    
    }
    void DealMultiplicationAndDivison2(int n/*取值*/,int m/*题数*/,int a[][2],int b[])/*有余数*/
    {
    	  for(int p=0;p<m;p++)
    	 {
    	    int x,y; 
    	   int a=(int)rand()%n;
    	   int b=(int)rand()%n;
    	    
    	   for(;;)
    		 {
    			 if(b!=0)
    			  break;
    			  b=(int)rand()%n;
    		 }
    	   
    	   
    		   int i=(int)rand()%n;
    	       int j=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(i<=j&&j!=0&&i!=0)
    			  break;
    			  i=(int)rand()%n;
    	          j=(int)rand()%n;
    		 }
    	   
    		  int c=(int)rand()%n;
    	      int d=(int)rand()%n;
    	     for(;;)
    		 {
    			 if(c<=d&&d!=0&&c!=0)
    			  break;
    			  c=(int)rand()%n;
    	          d=(int)rand()%n;
    		 }
    		 for(x=d*j;x>=1;x--)
    		 {
    			 if(c*i%x==0&&d*j%x==0)
    				 break;
    		  }
    		  for(y=d*j;y>=1;y--)
    		 {
    			 if(c*j%y==0&&d*i%y==0)
    				 break;
    		  }
    		  
    	   int k=(int)rand()%4;
    	   switch(k)
    	   {
    	    case 0:
    		   {
    			   cout<<a<<"*"<<b<<"="<<a*b;
    			   break;
    		   }
           case 1:
    		   {
    			  cout<<a<<"/"<<b<<"="<<a/b<<"("<<a%b<<")"<<'	';
    			  
    		   }
    	     case 2:
    		   {
    			   cout<<"("<<c<<"/"<<d<<")"<<"*"<<"("<<i<<"/"<<j<<")"<<"="<<c*i/x<<"/"<<d*j/x;
    			   break;
    		   }
    		   	   
    	   case 3:
    		   {
    			    cout<<"("<<c<<"/"<<d<<")"<<"/"<<"("<<i<<"/"<<j<<")"<<"="<<c*j/x<<"/"<<d*i/x;
    			   break;
    		   }  
    		   }
    	   
    	   if (p%5==4)
    		{
    			cout<<endl;
    		}
    		else
    		 {
    			 cout<<'	';
    		}	 
    	 }
    }
    
    void main()
    {
    	int b[1000];
    	int a[1000][2];
    	int z;
    	p:cout<<"请输入选项:"<<endl<<"1.无乘除,无负数."<<endl<<"2.无乘除,有负数."<<endl<<"3.有乘除,无余数,无负数."<<endl<<"4.有乘除,有余数,无负数."<<endl<<"5.有乘除,无余数,有负数."<<endl 
    		<<"6.有乘除,有余数,有负数."<<endl;
    	       
    	cin>>z;
    	if(z==1)/*无乘除,无余数*/
    	{
    		int m,n,x;
    		cout<<"请输入随机数的范围:"<<endl;
    		cin>>n;
    		cout<<"请输入题目的个数:"<<endl;
    		cin>>m;
    		
    		 DealAddAndSubtract1(n/*取值*/, m/*题数*/,a,b);
    		 int j;
    		cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl;
    		cin>>j;
    		if(j==1)
    		{
    			goto p;
    		}
    		else
    		{
    			exit(1);
    		}
    		
    	}
    	else if(z==2)/*无乘除,无负数*/
    	{
    		int m,n;
    		cout<<"请输入随机数的范围:"<<endl;
    		cin>>n;
    		cout<<"请输入题目的个数:"<<endl;
    		cin>>m;
    		 DealAddAndSubtract2(n/*取值*/, m/*题数*/,a,b);
    		 int j;
    		cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl;
    		cin>>j;
    		if(j==1)
    		{
    			goto p;
    		}
    		else
    		{
    			exit(1);
    		}
    	}
    	else if(z==3)/*有乘除,无余数,无负数*/
    	{
    		int m,n;
    		cout<<"请输入随机数的范围:"<<endl;
    		cin>>n;
    		cout<<"请输入题目的个数:"<<endl;
    		cin>>m;
            for(int i=0;i<m;i++)
    		{
    			int k=(int)rand()%2;
    			switch(k)
    			{
    			case 0:
    				{
    					 DealMultiplicationAndDivison1(n/*取值*/,1/*题数*/,a,b);
    					 break;
    
    				}
    			case 1:
    				{
    					DealAddAndSubtract1(n/*取值*/, 1/*题数*/,a,b);
    					break;
    				}
    		
    			}
    	   if (i%3==2)
    		 {
    			cout<<endl;
    		 }
    		else
    		 {
    			 cout<<'	';
    		  }
    		 }
    		int j;
    		cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl;
    		cin>>j;
    		if(j==1)
    		{
    			goto p;
    		}
    		else
    		{
    			exit(1);
    		}
    	
    	}
    	else if(z==4)/*有乘除,有余数,无负数*/
    	{
    		int m,n;
    		cout<<"请输入随机数的范围:"<<endl;
    		cin>>n;
    		cout<<"请输入题目的个数:"<<endl;
    		cin>>m;
            for(int i=0;i<m;i++)
    		{
    			int k=(int)rand()%2;
    			switch(k)
    			{
    			case 0:
    				{
    					 DealMultiplicationAndDivison2(n/*取值*/,1/*题数*/,a,b);
    					 break;
    
    				}
    			case 1:
    				{
    					DealAddAndSubtract1(n/*取值*/, 1/*题数*/,a,b);
    					break;
    				}
    		
    			}
    	   if (i%3==2)
    		 {
    			cout<<endl;
    		 }
    		else
    		 {
    			 cout<<'	';
    		  }
    		 }
    		int j;
    		cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl;
    		cin>>j;
    		if(j==1)
    		{
    			goto p;
    		}
    		else
    		{
    			exit(1);
    			
    		}
    	}
    	else if(z==5)/*有乘除,无余数,有负数*/
    	{
            	
    	int m,n;
    		cout<<"请输入随机数的范围:"<<endl;
    		cin>>n;
    		cout<<"请输入题目的个数:"<<endl;
    		cin>>m;
            for(int i=0;i<m;i++)
    		{
    			int k=(int)rand()%2;
    			switch(k)
    			{
    			case 0:
    				{
    					 DealMultiplicationAndDivison1(n/*取值*/,1/*题数*/,a,b);
    					 break;
    
    				}
    			case 1:
    				{
    					DealAddAndSubtract2(n/*取值*/, 1/*题数*/,a,b);
    					break;
    				}
    		
    			}
    	      if (i%3==2)
    		   {
    			cout<<endl;
    		    }
    		 else
    		  {
    			 cout<<'	';
    		   }
    		 }
    		int j;
    		cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl;
    		cin>>j;
    		if(j==1)
    		{
    			goto p;
    		}
    		else
    		{
    			exit(1);
    		}
    	
    	}
    	else if(z==6)/*有乘除,有余数,有负数*/
    	{
            	
    	   int m,n;
    		cout<<"请输入随机数的范围:"<<endl;
    		cin>>n;
    		cout<<"请输入题目的个数:"<<endl;
    		cin>>m;
            for(int i=0;i<m;i++)
    		{
    			int k=(int)rand()%2;
    			switch(k)
    			{
    			case 0:
    				{
    					 DealMultiplicationAndDivison2(n/*取值*/,1/*题数*/,a,b);
    					 break;
    				}
    			case 1:
    				{
    					DealAddAndSubtract2(n/*取值*/, 1/*题数*/,a,b);
    					break;
    				}
    		
    			}
    	   if (i%3==2)
    		 {
    			cout<<endl;
    		 }
    		else
    		 {
    			 cout<<'	';
    		  }
    	    }
    		int j;
    		cout<<endl<<"是否继续:"<<endl<<"1.继续"<<endl<<"2.退出"<<endl;
    		cin>>j;
    		if(j==1)
    		{
    			goto p;
    		}
    		else
    		{
    			exit(1);
    		}
    	   
    	   }
      else
    	 {
    		cout<<"输入有误!,请重新选择."<<endl;
    		goto p;
    	}
      }
    

     截图:

    周活动总结表姓名:杨国力  日期:26/3/2016

    日期/任务 听课 编程 阅读课本 准备考试     日总计
    周日 0 0 0 0     0
    周一 120 60 30 0     210
    周二 0 60 30 0     90
    周三 0

    60

    0 0     60
    周四 0 0 0 0     0
    周五 0 0 0 0     0
    周六 0 60 0 0     60
    周总计 120 240 60 0    

    420

     缺陷记录日志

    日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
    3.26 01 20 编码(没有排除分母不为0) 编译 3min  
      02 20 编码(漏掉分号) 编译 1min  
      03 20 编码(int类型与float类型混淆) 编译 3min  
                 

    学生:杨国力    日期:2016.3.26教师:王建明     课程:软件工程概论

    日期 开始时间 结束时间 中断时间 净时间 活动 备注 C U
    3.14 8:00 9:50 10 100 听课 休息    
      15:00 15:30 0 30 阅读      
    3.15 15:00 16:25 25 60 编程 上厕所.休息    
      17:00 17:20 0 20 阅读      
    3.16 15:00 16:10 10 60 编程      
    3.19 15:00 15:40 10 30 编程 上厕所    
      17:00 17:30   30 编程      
    3.14 14:30 15:30 0 60 编程      
      16:00 16:30 0 30 阅读      
                     
                     
                     
                     
                     

    编程总结:这一次编程只输出了运算题的答案。没有达到老师的要求。编程虽然难,但我会努力的。

  • 相关阅读:
    hive sql 解析json
    解决华为手机无法安装未签名apk问题(该安装包未包含任何证书)
    对马尔科夫决策过程的代码补充解释
    对马尔科夫决策过程MDP(Markov Decision Processes)的一点理解
    使用Web在PC和安卓之间传输文件(Transfer files via wifi)
    记录下自己的生活状态,昏昏沉沉的半年,迷茫的未来
    __repr__和pass在python中的含义
    LaTeX基础调节,调节行距,字体大小,字体,页边距
    LaTeX怎么让一行中的一部分右对齐
    Tkinter主动刷新(强制刷新)
  • 原文地址:https://www.cnblogs.com/ygl888/p/5323237.html
Copyright © 2020-2023  润新知