软件工程个人作业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<<'\t';
		}
	}
}

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<<'\t';
		}
	}
		

}
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<<'\t';
		}

	 
	 }


}
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<<")"<<'\t';
			  
		   }
	     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<<'\t';
		}	 
	 }
}

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<<'\t';
		  }
		 }
		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<<'\t';
		  }
		 }
		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<<'\t';
		   }
		 }
		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<<'\t';
		  }
	    }
		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 阅读      
                 
                 
                 
                 
                 

 

 

 

 

 

 

 

 

 

 

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

posted @ 2016-03-26 16:29  蝈蝈gl  阅读(127)  评论(0编辑  收藏  举报