码迷,mamicode.com
首页 > 其他好文 > 详细

“四则运算2”分析报告

时间:2015-03-19 00:52:31      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

“四则运算2”分析报告

一、设计思路

 

初步设计思路:

1. 题目不重复先使用srand函数,生成两个做运算的随机数,再生成一个随机数,控制运算符号。

2. 是否有乘除法,数值范围,负数,余数,分数可以让用户选择。根据用户选择的结果,在每个函数之前根据用户的选择来执行不同的代码。

3. 把生成的每一个新的算式放在一起,每生成一个新的算式要验证是否与之前生成的算式重复,用字符串比如来做,如果重复就重新生成一个新的算式。

4. 打印只要用两个用户输入的变量就可以控制,一个控制打印的张数,一个控制打印每个式子的间距。

 

修改后设计思路:(修改了第2、3条)

1. 题目不重复先使用srand函数,生成两个做运算的随机数,再生成一个随机数,控制运算符号。

2. 是否有乘除法,数值范围,负数,余数,分数可以让用户选择。根据用户选择的结果,调用随机数生成函数,生成符合要求的随机数。

3. 为了避免算式重复,我定义了两个整型数组,一个字符数组。两个整型数组分别用来依次存放两个随机生成的数(a,b),字符数组用来依次存放每个式子的运算符号(+、-、*、/),每次输出生成算式的结果时,调用函数,验证当次生成的a,b两个随机数和符号是否完全一样,如果完全一样,则此次结果不保存在数组中,也不输出,在主函数中和for循环中加一次循环,新生成一个式子。

4. 打印只要用两个用户输入的变量就可以控制,一个控制打印的张数,一个控制打印每个式子的间距。

 

二、源程序代码

#include<iostream>

#include<time.h>

#include<string>

#define n 5

using namespace std;

void display(int a,int b,char z,int &i,int d[],int e[],char f[])    //验证算式是否重复,输出函数

{

      int j,K=1;

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

      if(a==d[j] && b==e[j] && z==f[j])   

           K=0;

      if(K!=0)

      {  

           d[i]=a;  

           e[i]=b;  

           f[i]=z;  

           if(b<0)   

                cout<<a<<z<<"("<<b<<")="<<endl;   

           else    

                cout<<a<<z<<b<<"="<<endl;

       }  

      else   

          i=i-1;

}

 

void suiji(int &a,int &b,int &c,string s1,string s2,string s3)      //s1 数值范围  s2 乘除法 s3 负数

{  

     if(s1=="Y")  

     {   

           a=rand()%50;  

           b=rand()%50;  

     }  

     else  

     {   

          a=rand();  

          b=rand();  

      }

 

      if(s2=="Y")  

           c=rand()%4;  

      else  

           c=rand()%2;

 

      if(s3=="Y")

      {   

             if(s1=="Y")

             { 

                 a=-rand()%76+25;   

                 b=-rand()%76+25;  

            }   

            else   

           {    

                a=rand()-rand();    

                b=rand()-rand();  

            }

      }

}

 

void main()                       //主程序

{

      int a,b,c,i;
       char z;
      int d[n];
      int e[n];
      char f[n];
      string s1,s2,s3,s4;

     srand((int)time(0));

      cout<<"---------------------------四则运算出题小程序-------------------------"<<endl;  cout<<endl;

       cout<<"是否有负数?(Y or N)"<<endl;

       cin>>s3;

      cout<<"是否有乘除法?(Y or N)"<<endl;  

      cin>>s2;

      cout<<"是否有数值范围?(Y or N)"<<endl;

      cin>>s1;

      cout<<"乘除法是否有余数?(Y or N)"<<endl;  

      cin>>s4;

 

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

      {   

           suiji(a,b,c,s1,s2,s3);

 

           if(c==0)                                                         //加法

          {    

                z=‘+‘;   

                if(b<0)    

                     display(a,b,z,i,d,e,f);    

                else     

                    display(a,b,z,i,d,e,f);  

            }

            if(c==1)                                                          //减法

            {   

                   z=‘-‘;

                   if(b<0)     

                       display(a,b,z,i,d,e,f);   

                   else    

                       display(a,b,z,i,d,e,f);

              }

              if(c==2)                                                          //乘法

              {   

                     z=‘*‘;    

                     display(a,b,z,i,d,e,f);

              }

             if(c==3)

             {

                        z=‘/‘;

                        if(s4=="Y")  

                                display(a,b,z,i,d,e,f);

                        else

                       { 

                               int k;   

                               k=a%b;     

                               while(k!=0)

                               {

                                        suiji(a,b,c,s1,s2,s3);     

                                        k=a%b;     

                                }

                               display(a,b,z,i,d,e,f);

                           }

                }

         }  //for循环

         int x;

          cout<<"请输入打印张数:"<<endl;

          cin>>x;

          cout<<"已成功提交!"<<endl;

}

 

三、运行结果截图

技术分享技术分享

技术分享技术分享

 

四、编程总结

    这次的四则运算2其实算是对上一次四则运算1延伸,大体框架就是1,在加一些功能进去,就是2。

    编完这个程序我发现,在编程序之前,一定要先有设计思路,在纸上要先写写画画,把大致的过程写出来,之后才能到电脑上编,如果直接上去就编,编着编着就乱套了,就不知道哪是哪了。

    程序中的每一个功能,都可以用很多方法去实现,虽然结果都是一样的,但是在思维方面和借助的东西上就完全不一样,我觉得找对方法这一点就直接决定了程序的效率问题。所以在以后的学习中,一定要尽量找到最简便最有效率的方法去解决编程中出现的问题,避免不必要的麻烦。

    以后我是想试着把这个做成一个小程序,比如手机app之类的东西,先多看一些书,然后慢慢来试试看吧。

 

五、时间记录日志

技术分享

“四则运算2”分析报告

标签:

原文地址:http://www.cnblogs.com/meimiaozi/p/4348975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!