• 软件工程个人作业2


    1》题目要求:

    可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:

    1、题目避免重复;
    2、可定制(数量/打印方式);
    3、可以控制下列参数:

    *是否有乘除法;
    *是否有括号(最多可以支持十个数参与计算);
    *数值范围;
    *加减有无负数;
    *除法有无余数!
     
    2》设计思想:
    这次编程主要是在上一次的基础之上,作进一步的要求,然后实现不同方式的输出。
    1)题目避免重复的实现:先定义三个数组,然后再循环时将产生的运算符和两个运算数(随机产生的三个数)存入数组,每进行一次循环,就将数组中的数和前面的相比,如果两个运算符和运算数都和前面某一组数相等,那么重新产生一组随机数,实现避免重复。
    2)可定制的实现:打印数量,就是输入一个数,然后进行该数次循环,然后输出。打印方式主要是可以在屏幕上输出,也可以实现输出到一个记事本文件中,这用到了输入输出流 的知识。
    3)1.是否有乘除法,用if语句实现,如果有乘除法,则进一步选择是否有余数,我的程序是对有余数的选择直接输出,如果没有余数,就是被除数减去余数在输出。
    2.数值范围:可以定义一个数s,用随机数rand()%s 就是产生1~s的随机数。
    3.加减法无负数,就是保证后一个数比前一个数大,有负数,在其中加入负号。
     
    ps:是否括号功能较难,暂时还未实现
     
    源代码:
     

    //四则运算2
    //2016 3 14 Sunzhe
    #include<fstream>
    #include<iostream>
    using namespace std;


    void chengchufa(int m,int s)
    {
      int v;
      int j[100],k[100],l[100];//用于检查重复的数组
      cout<<"请输入选择:1.有余数 2.无余数:"<<endl;
      cin>>v;
      for(int i=0;i<m;i++)
      {
        int n=rand()%4; //产生随机数,运算符
        int a=rand()%s;//产生1~s随机数
        int b=rand()%s;//产生1~s随机数
        j[i]=n;
        k[i]=a;
        l[i]=b;
        for(int r=i-1;r>=0;r--)//向前检查重复,如果重复则重新生成
        {
          if(j[r]==j[i]&&k[r]==k[i]&&l[r]==l[i])
          {
              int n=rand()%4; //产生随机数,运算符
              int a=rand()%s;//产生1~s随机数
              int b=rand()%s;//产生1~s随机数
           }
        }


        if(n==0)

        {
          cout<<a<<"+"<<b<<"="<<endl;
        }
        else if(n==1){
          cout<<a<<"-"<<b<<"="<<endl;
        }
        else if(n==2){
          cout<<a<<"*"<<b<<"="<<endl;
        }
        else{
          if(a<b)//实现被除数比除数大
          {
            int w;
            w=a;
            a=b;
            b=w;
          }
          if(b==0)
          {
            b++;
          }
          if(v==1)//有余数
          {
            cout<<a<<"/"<<b<<"="<<endl;
          }
          if(v==2)
          {
            a=a-a%b;
            cout<<a<<"/"<<b<<"="<<endl;
          }
        }
      }
    }

    void jiajianfa(int m,int s){

        int u;
        int j[100],k[100],l[100];//用于检查重复的数组
        cout<<"请输入选择:1有负数 2无负数"<<endl;
        cin>>u;
        for(int i=0;i<m;i++)
        {
          int n=rand() %2;//产生随机数,运算符的

          int a=rand()%s;//产生1~s随机数
          int b=rand()%s;//产生1~s随机数
          j[i]=n;
          k[i]=a;
          l[i]=b;
          for(int r=i-1;r>=0;r--)
          {
            if(j[r]==j[i]&&k[r]==k[i]&&l[r]==l[i])
            {
                int n=rand()%4; //产生随机数,运算符
                int a=rand()%s;//产生1~s随机数
                int b=rand()%s;//产生1~s随机数
            }
          }

          if(u==1) //有负数
          {
            if(n==0)
            {
                cout<<"(-"<<a<<")+"<<b<<"="<<endl;
            }
            else
            {
                cout<<a<<"-"<<b<<"="<<endl;
            }
          }
          if(u==2)//无负数
          {
              if(a<b)//实现减法无负数
              {
                int w;
                w=a;
                a=b;
                b=w;
              }
              if(n==0)
              {
                  cout<<a<<"+"<<b<<"="<<endl;
              }
              else
              {
                  cout<<a<<"-"<<b<<"="<<endl;
              }
          }
        }

    }
    void dayinfangshi(int m,int s){
        int t;
        cout<<"请输入选择1.在屏幕输出2.在文件输出"<<endl;
        cin>>t;
        if(t==1)
        {
          for(int i=0;i<m;i++)
          {
            int n=rand()%4; //产生随机数,运算符
            int a=rand()%s;//产生1~s随机数
            int b=rand()%s;//产生1~s随机数

            if(n==0){
              cout<<a<<"+"<<b<<"="<<endl;
            }
            else if(n==1){
              cout<<a<<"-"<<b<<"="<<endl;
            }
            else if(n==2){
              cout<<a<<"*"<<b<<"="<<endl;
            }
            else{
              if(a<b)//实现被除数比除数大
              {
                int w;
                w=a;
                a=b;
                b=w;
              }
              if(b==0)
              {
                b++;
              }
              cout<<a<<"/"<<b<<"="<<endl;
            }
          }
         }
         if(t==2)
        {
            ofstream outfile("f1.dat",ios::out);//定义文件流对象,打开磁盘文件f1.dat
            if(! outfile) //如果打开失败返回0值
            {
                cerr<<"open error!"<<endl;
                exit(1);
            }
            for(int i=0;i<m;i++)
            {
                int n=rand()%4; //产生随机数,运算符
                int a=rand()%s;//产生1~s随机数
                int b=rand()%s;//产生1~s随机数

                if(n==0){
                  outfile<<a<<"+"<<b<<"="<<endl;
                }
                else if(n==1){
                  outfile<<a<<"-"<<b<<"="<<endl;
                }
                else if(n==2){
                  outfile<<a<<"*"<<b<<"="<<endl;
                }
                else{
                  if(a<b)//实现被除数比除数大
                  {
                    int w;
                    w=a;
                    a=b;
                    b=w;
                  }
                  if(b==0)
                  {
                    b++;
                  }
                  outfile<<a<<"/"<<b<<"="<<endl;
                }
            }
            outfile.close();
        }
    }

    void main()
    {
      int x;//进行选择的数
      q:cout<<"请选择要进行的运算:1.整数运算 2.真分数运算 3.退出程序"<<endl;
      cin>>x;
      switch(x)
      {
        case 1://进行整数的运算
        {
          int m;//题目的数量
          cout<<"请输入想打印的数量:"<<endl;
          cin>>m;


          int s;//数值范围
          cout<<"请输入想要计算的数值范围(1~ 你输入的数):"<<endl;
          cin>>s;
          int t;
          cout<<"请输入选择:"<<endl;
          cout<<"1.有乘除法"<<endl;
          cout<<"2.无乘除法"<<endl;
          cout<<"3.打印方式"<<endl;
          cin>>t;
          if(t==1){//有乘除法
            chengchufa(m,s);

          }
          if(t==2)//无乘除法
          {
            jiajianfa(m,s);
          }
          if(t==3)
          {
            dayinfangshi(m,s);
          }
        goto q;
        }
        case 2:
        {
          for(int i=0;i<30;i++)
          {
              int c=rand()%100;//产生1~100随机数
              int d=rand()%100;//产生1~100随机数
              int e=rand()%100;//产生1~100随机数
              int f=rand()%100;//产生1~100随机数


              //保证为真分数
              if(c>d)
              {
                int t;
                t=d;
                d=c;
                c=t;
              }
              if(e>f)
              {
                int s;
                s=f;
                f=e;
                e=s;
              }
              if(d==0){d++;} //分母不为零
              if(f==0){f++;} //分母不为零
              //约分化为最简
              for(int a=c;a>0;a-- )
              {
                if(c%a==0&&d%a==0)
                {
                  c=c/a;
                  d=d/a;
                  break;
                }
              }
              for(int b=e;b>0;b-- )
              {
                if(e%b==0&&f%b==0)
                {
                  e=e/b;
                  f=f/b;
                  break;
                }
              }

              int n=rand() %4; //产生运算符的随机数

            if(n==0){
              cout<<c<<"/"<<d<<"+"<<e<<"/"<<f<<"="<<endl;
            }
            else if(n==1){
              cout<<c<<"/"<<d<<"-"<<e<<"/"<<f<<"="<<endl;
            }
            else if(n==2){
              cout<<c<<"/"<<d<<"*("<<e<<"/"<<f<<")="<<endl;
            }
            else
            {
              cout<<c<<"/"<<d<<"/("<<e<<"/"<<f<<")="<<endl;
            }
        }
        goto q;
      }
      case 3:
      {
        exit(0);
      }

     }
    }

    3》运行结果截图:

  • 相关阅读:
    线程池:
    C#:实现托盘
    Linux内核 TCP/IP、Socket参数调优
    redis配置文件redis.conf参数说明
    redis安装与参数说明
    巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。
    mkdir:批量创建文件夹
    linux下的shell运算(加、减、乘、除)
    Linux查看文件编码格式及文件编码转换
    解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  • 原文地址:https://www.cnblogs.com/sz20142898/p/5295782.html
Copyright © 2020-2023  润新知