结对第二次作业

一、题目要求
本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。我们选择的是题目一

题目1:

  • 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
  • 能够自动生成四则运算练习题
  • 可以定制题目数量
  • 用户可以选择运算符
  • 用户设置最大数(如十以内、百以内等)
  • 用户选择是否有括号、是否有小数
  • 用户选择输出方式(如输出到文件、打印机等)
  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二、角色分配

驾驶员:吕家尧(代码在这里

领航员:孔令宇


三、功能实现

符号生成

char create_symbol(int n)
{
    int n1,j;
    char symbol[1];
    if(n==0)
    {
        n1=2;
    }
    else if(n=1)
    {
        n1=4;
    }
    j=random()%n1;
    if(j==0) symbol[0]='+';
    else if(j==1) symbol[0]='-';
    else if(j==2) symbol[0]='*';
    else symbol[0]='/';
    return symbol[0];
 }

数字转化字符串

string int_string(int number)
 {
     int temp=abs(number);
    char str[200];
    itoa(temp,str,10);
    string str_=str;
    return str_;
  }

运算式转换成一个字符串

string combination(string str1,string str2,char k)
 {
     string equation;
     equation=str1+k+str2;
     return equation;
 }

主函数

int main()
{
    srand((int)time(NULL));  //设置时间种子 ,使得程序每次运行的结果都不同
    int num1,num2,count,n,change,amount,shuchu,range,j,repeat=0,bracket;
    string str_num1,str_num2,temp;
    cout<<"有无乘除法?1有,0没有:"<<endl;
    cin>>n;
    cout<<"是否有括号?1有,0没有:"<<endl;
    cin>>bracket;
    cout<<"题目是否在文件中输出?1是,0不是:"<<endl;
    cin>>shuchu;
    cout<<"请输入数字范围:"<<endl;
    cin>>range;
    cout<<"请输入出题数量:"<<endl;
    cin>>amount;
    string Equation[amount];
    char symbol;
    ofstream fout;
    if(shuchu==1)
    {
        fout.open("fl.txt");
        fout<<amount<<"道四则运算题如下:"<<endl;
    }
    else
    {
        cout<<amount<<"道四则运算题如下:"<<endl;
    }
    for(int i=0;i<amount;i++)
    {
        num1=random()%range+1;
        num2=random()%range+1;
        count=random()%9+2;
        symbol=create_symbol(n);
        str_num1=int_string(num1);
        str_num2=int_string(num2);
        Equation[i]=combination(str_num1,str_num2,symbol);
        if(count>2)
        {
            for(count;count>2;count--)
            {
                symbol=create_symbol(n);
                str_num1=Equation[i];
                if(bracket==1)
                {
                    change=random()%2;
                    if(change==0)
                    {
                       str_num1='('+str_num1+')';
                     }
                }
                symbol=create_symbol(n);
                num2=random()%range+1;
                str_num2=int_string(num2);
                change=random()%2;
                if(change==0)
                {
                    temp=str_num1;
                    str_num1=str_num2;
                    str_num2=temp;
                }
                Equation[i]=combination(str_num1,str_num2,symbol);
            }
        }
        //判断是否重复
         for(j=0;j<i;j++)
         {
             if(Equation[j]==Equation[i])
             {
                i=i-1;
                repeat=1;
                break;
             }
         }
         if(repeat!=1)//若不重复,则输出
         {
             if(shuchu==1)
            {
                fout<<Equation[i]<<"="<<endl;
            }
            else
            {
                cout<<Equation[i]<<"="<<endl;
            }
         }

    }
    if(shuchu==1)
    {
        fout.close();
    }
}

四、实例测试

  • 在这里给出一组测试数据,具体测试请戳我的领航员。。。


五、体会

  以往编程都是一个人的事情,自己写代码自己测试,这次首次尝试两个人一起编程,感觉很新鲜!
  有了领航员在一旁一起编程,相当于多了一条思路,当我有问题时,他可以说出他的想法,如果可行的话,能够大大减少编程的时间。同时出现error时,两个人也能够更好的改正,虽然是两个腊鸡,,但是还是比一个腊鸡编程效果更好。
  由于能力问题和时间问题,并没有能够实现图形化界面,以后会自己学习有关方面,完善这次作业

六、照片

posted @ 2018-04-17 20:20  佳肴  阅读(115)  评论(0)    收藏  举报