四则运算程序开发过程

一、设计思路:定义x,y,利用随机数产生函数rand()%m+1产生在数值范围中的两个数x,y,并且通过产生1-4的随机数控制四则运算的符号和是否产生乘除法

1、避免重复:定义数组,将输出的结果存在数组中,通过比较输出结果与数组中的变量是否重复,避免输出结果的重复。

2、可定制:定义一个变量i,输入i的数值控制出题的数量,然后通过i控制循环次数输出。

                定义变量来控制题目是按行输出还是按列输出。

3、控制参数:通过产生随机数的范围是1-2还是1-4控制是否输入乘除法。

                   通过改变m的值控制数的范围。

                   产生1-2的随机数来控制x,y的正负,决定加减法是否有负数。

                   如果输出的是除法,通过求余运算判断是否有余数,从而决定是否输出。

                   如果支持分数,输出随机数的倒数支持分数。

二、代码

#include<iostream>

using namespace std;

void create(int t,int &m,int &n,int &l,char x,char y,char z)

{

      int v;

      m=rand()%t+1;

      n=rand()%t+1;

      if(x=='y')  

      {   

          l=rand()%4;  

      }  

      else  

      {   

           l=rand()%2;

       }  

       if(z=='n')

       {   

            while(m%n!=0)  

            {    

                 m=rand()%t+1;      

                 n=rand()%t+1;   

             }  

         }

          if((l==0||l==1)&&y=='y')  

          {   

               v=rand()%2;   

               if(v==0)   

               {   

                     m=0-m;   

                }

           }

 }

void main()

{  

      int i,j,m,n,l,s,t,u;  

      char x,y,z,w;  

      cout<<"请输入出题的数量:";

      cin>>s;

      cout<<"请输入取值上限(大于0):";

      cin>>t;  

      cout<<"请输入是否有乘除法(y为是,n为否):";

      cin>>x;

      cout<<"请输入加减法是否有负数(y为是,n为否):";  

      cin>>y;  

      if(x=='y')

      {   

            cout<<"请输入除法是否有余数(y为是,n为否):";  

            cin>>z;  

      }  

      else  

      {   

             z=NULL;  

      }  

      cout<<"请输入是否有分数(y为是,n为否):";

      cin>>w;  

      cout<<"请输入打印方式(1为按行输出,2为按列输出):";

      cin>>u;

      int *a=new int[s];  

      int *b=new int[s];  

      int *c=new int[s];

      create(t,m,n,l,x,y,z);

      for(i=0;i<s;i++)  

      {  

            for(j=0;j<i;j++)  

            {    

                  if(a[j]==m&&b[j]==n&&c[j]==l)    

                  {     

                        create(t,m,n,l,x,y,z);     

                        j=-1;    

                   }  

             }   

            a[i]=m;   

            b[i]=n;   

            c[i]=l;

            if(w=='y'&&i%2==0)    

            {   

                  if(l==0)    

                  {     

                         cout<<"1/"<<m<<"+"<<n<<"="<<" ";    

                  }         

                 if(l==1)     

                 {       

                         cout<<"1/"<<m<<"-"<<n<<"="<<" ";      

                  }    

                  if(l==2)      

                  {       

                          cout<<"1/"<<m<<"*"<<n<<"="<<" ";      

                  }      

                  if(l==3)      

                  {       

                          cout<<"1/"<<m<<"/"<<n<<"="<<" ";      

                   }       

            }     

            else     

            {      

                   if(l==0)      

                  {       

                          cout<<m<<"+"<<n<<"="<<" ";      

                  }         

                  if(l==1)      

                  {       

                           cout<<m<<"-"<<n<<"="<<" ";      

                   }      

                   if(l==2)      

                   {       

                            cout<<m<<"*"<<n<<"="<<" ";      

                    }      

                    if(l==3)      

                    {       

                             cout<<m<<"/"<<n<<"="<<" ";   

                     }     

           }  

            if(u==2)  

            {   

                   cout<<endl;   

             }  

       }

}

三、实验截图

 

 四、总结

       写程序之前对程序思路进行了设计,但实际过程中与思路相差甚远,主要有两个方面。一、是由于实现的功能较多,经常要进行验证和重新生成,比较繁琐,所以将程序分成了主函数和其他函数,使程序比较清晰易懂。二、在支持分数的过程中,并不像想象的那么简单,所以最终通过输出随机数的倒数不太完美实现了这个功能。

       具体程序中出现的错误也主要有两方面。一是语法上出现的,忘记了输入分号或者其他符号,最终完美解决。二是由于未在前面声明函数,导致函数在主函数中不能调用,最后将函数放在主函数前面,从而解决了问题。

五、记录表

          学生______郭昊                                   日期        2015年3月19日

          教师          王建民                                 课程        软件工程概论       

 

         

转载于:https://www.cnblogs.com/act-gh95/p/4351216.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值