zoukankan      html  css  js  c++  java
  • 软件工程概论-四则运算

    一.设计思念

    首先想到用随机数函数得到多组随机数。为了避免题目的重复想到用二维数组将随机数存起来保证每一行对应列的数值不相同。通过控制随机数函数rand()%m其中的m来改变随机数的范围。通过添加另一个随机数来确定数值的正负,通过条件语句来判断结果是否存在余数。为了确定运算符还需要随机数函数rand()%4来得到(0,1,2,3)分别来控制(+,-,*,/).最后通过一个switch语句来控制输出。

    二.总结

    在随机数这个算法中没有找到最简单的算法,通过同学之间的探讨得到了一个比自己更简单的控制随机数范围的算法。另一个问题就是没有做到界面实现,这个问题还会在接下来的时间内继续完善(原因:C++还不会做界面)。另外在关于一些语句的使用还不是很熟练仍需要练习。

    三.事件记录表

    学生:   杜永超            课程软件工程概论     任务:   四则运算   

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    2015-3-13

    1000

    12:00

    10分钟

    110分钟

    上课

    软件工程概论

    2015-3-14

    14:00

    16:30

    20分钟

    130分钟

    编程

    完成题目避免重复的要求

    2015-3-15

    9:00

    10:00

    60分钟

    上网查询

    查询如何利用随机数确定范围

    2015-3-15

    10:30

    11;30

    60分钟

    编程

    完成确定随机数范围要求

    2015-3-16

    16:00

    17:00

    60分钟

    编程

    完成随机数正负要求以及运算符是否有乘除法

    2015-3-18

    14:00

    17:00

    60分钟

    120分钟

    编程

    完成除法是否有余数要求以及完成main函数中的整体循环完成程序可循环来稍微弥补无界面的问题。

     四.代码

    #include<iostream>
    #include<ctime>
    #include<cmath>
    #define N 100
    using namespace std;
    
    //产生随机数
    void set(int m,int M,int A[N][3],int i)
    {
    	int x,y,t;                  //随机产生t设定数值为正还是为负,x,y分别为取值范围的绝对值
    	int a,b,c;                  //c为运算符用(1,2,3,4)表示(+,-,*,/);a,b为两个随机数 
    	//用于随机产生运算符
    
    	c=rand()%4;          
    	x=abs(m);
    	y=abs(M);
    	if(m>=0)
    	{	
    		//产生随机数
    		a=rand()%(y+1);    
    		b=rand()%(y+1);
    
    		//判断是否符合要求
    		while(a<m||b<m)   
    		{
    			a=rand()%(y+1);
    			b=rand()%(y+1);
    		}
    	}
    	else if(M<=0)
    	{
    		a=-rand()%(x+1);
    		b=-rand()%(x+1);
    		while(a>M||b>M)
    		{
    			a=-rand()%(x+1);
    			b=-rand()%(x+1);
    		}
    	}
    	else
    	{
    		t=rand()%2;
    		if(t==0)
    		{
    			a=rand()%(x+1);
    			while(a>M)
    				a=rand()%(x+1);
    		}
    		else
    			a=-rand()%(x+1);
    		t=rand()%2;
    		if(t==0)
    			b=rand()%(y+1);
    		else
    		{
    			b=-rand()%(y+1);
    			while(b<m)
    				b=-rand()%(y+1);
    		}
    	}
    
    	//把符合要求的随机数存入数组
    	A[i][0]=a;
    	A[i][1]=c;
    	A[i][2]=b;
    }
    //循环产生随机数
    void setnumber(int m,int M,int n,int A[][3])
    {
    	 //定义变量             
    	
    	int i;                //用于循环判断
    
    	//用循环产生n组
    	for(i=0;i<n;i++)           
    	{
    		set(m,M,A,i);
    		while(A[i+1][0]==A[i][0]&&A[i+1][2]==A[i][2])    
    			{
    				set(m,M,A,i);  //利用了函数嵌套
    			}
    
    	}
    }
    
    //输出
    void output(int n,int A[][3])
    {
    	int i;                   //i用于循环
    	for(i=0;i<n;i++)
    	{
    		if(A[i][2]>0)
    		{
    			switch(A[i][1])
    	    	{
    	    	case 0:{cout<<A[i][0]<<"+"<<A[i][2]<<"="<<endl;}break;
    	    	case 1:{cout<<A[i][0]<<"-"<<A[i][2]<<"="<<endl;}break;
    	    	case 2:{cout<<A[i][0]<<"*"<<A[i][2]<<"="<<endl;}break;
        		case 3:{cout<<A[i][0]<<"/"<<A[i][2]<<"="<<endl;}break;
    	    	}
    		}
    		else if(A[i][2]<0)
    		{
    			switch(A[i][1])
    	    	{
    	    	case 0:{cout<<A[i][0]<<"+("<<A[i][2]<<")="<<endl;}break;
    	    	case 1:{cout<<A[i][0]<<"-("<<A[i][2]<<")="<<endl;}break;
    	    	case 2:{cout<<A[i][0]<<"*("<<A[i][2]<<")="<<endl;}break;
        		case 3:{cout<<A[i][0]<<"/("<<A[i][2]<<")="<<endl;}break;
    	    	}
    		}
    	}
    }
    
    //随机数范围设置
    void setlong(int &m,int &M)
    {
    	cout<<"请输入取值范围:(例如1-100则输入1,100)!";               //取值范围设定
    	cin>>m>>M;
    	while(m>M)
    	{
    		cout<<"m<M,please input seconds!"<<endl<<endl;
    		cin>>m>>M;
    	}
    }
    
    //设定是否有乘除法
    void setYSF(int n,int A[][3])
    {
    	cout<<"关闭乘除法!"<<endl;
    	int i;
    	int c;
    	srand(unsigned(time(NULL)));
    	for(i=0;i<n;i++)
    	{
    		c=rand()%2;
    		A[i][1]=c;
    	}
    }
    
    //设置四则运算除法没有余数
    void setcomplementation(int m,int M,int n,int A[][3])
    {
    	cout<<"除法不存在余数!"<<endl<<endl;
    	int i;
    
    	for(i=0;i<n;i++)
    	{
    		while(A[i][0]%A[i][2]!=0)
    		{
    			set(m,M,A,i);
    			//避免了数的重复出现
    			while(A[i+1][0]==A[i][0]&&A[i+1][2]==A[i][2])    
    			{
    				set(m,M,A,i);
    			}
    		}
    	}
    }
    void main()
    {
    	//定义变量
    	int A[N][3];             //存放随机数
    	//int a,b,c;             //随机数变量
    	int n=30;                //n为输出行数(可以通过输入来设定,本程序从简没有设置)
    	int m=1,M=99;            //随机数默认范围为1-99
    	srand(unsigned(time(NULL)));       //以系统时间为随机种子保证数的变化
    	
    	//循环
    	int q=1;
    	while(q!=5)
    	{
    		cout<<endl<<endl;
    		cout<<"------------------------------------------"<<endl;
    		cout<<"-----------1:设置随机数范围---------------"<<endl;
    		cout<<"------------------------------------------"<<endl;
    		cout<<"-----------2:设置运算符结果---------------"<<endl;
    		cout<<"------------------------------------------"<<endl;
    		cout<<"-----------3:设置随机数正负---------------"<<endl;
    		cout<<"------------------------------------------"<<endl;
    		cout<<"---------4:设置除法是否存在余数-----------"<<endl;
    		cout<<"------------------------------------------"<<endl;
    		cout<<"-----------------5:结束-------------------"<<endl;
    		cout<<"------------------------------------------"<<endl;
    		cin>>q;
    		switch(q)
    		{
    		case 0:break;return;
    		case 1:
    			setlong(m,M);
    			setnumber(m,M,n,A);
    			output(n,A);
    			break;
    		case 2:
    			setlong(m,M);
    			setnumber(m,M,n,A);
    			setYSF(n,A);
    			output(n,A);
    			break;
    		case 3:
    			setlong(m,M);
    			if(m<0)
    				m=0;
    			setnumber(m,M,n,A);
    			output(n,A);
    			break;
    		case 4:
    			setlong(m,M);
    			setnumber(m,M,n,A);
    			setcomplementation(n,M,n,A);
    			output(n,A);
    			break;
    		}
    	}
    
    }
    

     五.结果截图(此截图只是一种功能)

  • 相关阅读:
    洛谷P1501 动态树(LCT)
    Beijing Institute of Technology 2019.6 Monthly Contest (For grade 2018)
    [BJOI2018]求和
    [JSOI2015]最小表示
    简单题
    [Ynoi2016]掉进兔子洞
    乘积
    飞扬的小鸟
    [CTSC2008]网络管理
    Sequence
  • 原文地址:https://www.cnblogs.com/dyc940210/p/4350992.html
Copyright © 2011-2022 走看看