软件工程个人作业2

Posted 那年夏天123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程个人作业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》运行结果截图:

技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享

以上是关于软件工程个人作业2的主要内容,如果未能解决你的问题,请参考以下文章

个人作业——软件工程实践总结作业

软件工程个人作业01

软件工程个人作业07

软件工程概论个人作业2

软件工程网络15个人阅读作业2(201521123082 黄华林)

软件工程个人作业03