软件过程第二次结对编程作业

四则运算自动生成程序

1.题目要求

我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:

  • 能够自动生成四则运算练习题
  • 可以定制题目数量
  • 用户可以选择运算符
  • 用户设置最大数(如十以内、百以内等)
  • 用户选择是否有括号、是否有小数
  • 用户选择输出方式(如输出到文件、打印机等)
  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

    2.人员分工

    驾驶员:谢旭军
  • 能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中
  • 能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结,并且上传和队友工作时的照片
    领航员:付志峰 小付同学的博客
  • 能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试
  • 能够根据上次作业的代码检查表对驾驶员的本次工作进行评价
  • 能够对本次工作完成500字以上的总结

    3.代码地址

    四则运算自动生成程序

    4.程序功能

  • 在C语言中,rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,它是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值。因此,C提供了srand()函数,它的原型是 void srand( int a)。用来改变这个种子值。srand( (time(NULL) )中time(NULL)函数是得到一个从1900年1月1日到现在的时间秒数,这样每一次运行程序的时间的不同就可以保证得到不同的随机数了。
srand(time(NULL));//设置一个随机种子,每次运行都能保证随机种子不同
  • 通过rand()函数产生随机数,得到一个1到imax的随机整数a
a=(rand()%imax)+1;
  • 通过rand()函数产生随机数,得到一个1到imax的随机小数a
a=(double)rand()/RAND_MAX*imax+1.0;
  • 通过rand()函数随机产生4个运算符中的其中一个
char op[4]={'+','-','*','/'};   
op1=rand()%4;
  • 括号生成程序
int k;
        k=rand()%2;//随机生成"0"或"1"
        if(k==0)//括号位置在前
        {
            if(ope==1)
            {
                cout<<"("<<a<<"+"<<b<<")"<<"+"<<c<<"="<<endl;
                outfile<<"("<<a<<"+"<<b<<")"<<"+"<<c<<"="<<endl;
            }
            else if(ope==2)
            {
                cout<<"("<<a<<"-"<<b<<")"<<"-"<<c<<"="<<endl;
                outfile<<"("<<a<<"-"<<b<<")"<<"-"<<c<<"="<<endl;
            }
            else if(ope==3)
            {
                cout<<"("<<a<<"*"<<b<<")"<<"*"<<c<<"="<<endl;
                outfile<<"("<<a<<"*"<<b<<")"<<"*"<<c<<"="<<endl;
            }
            else if(ope==4)
            {
                cout<<"("<<a<<"/"<<b<<")"<<"/"<<c<<"="<<endl;
                outfile<<"("<<a<<"/"<<b<<")"<<"/"<<c<<"="<<endl;
            }
            else
            {
                cout<<"("<<a<<op[op1]<<b<<")"<<op[op2]<<c<<"="<<endl;
                outfile<<"("<<a<<op[op1]<<b<<")"<<op[op2]<<c<<"="<<endl;
            }
        }
        else//括号位置在后
        {
            if(ope==1)
            {
                cout<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
                outfile<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
            }
            else if(ope==2)
            {
                cout<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
                outfile<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
            }
            else if(ope==3)
            {
                cout<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
                outfile<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
            }
            else if(ope==4)
            {
                cout<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
                outfile<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
            }
            else
            {
                cout<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
                outfile<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
            }
        }

4.程序运行界面

(1)10道整数带括号输出到文件混合运算

1647651-20190505190921005-1515606021.png

文档界面

1647651-20190505191116351-1879708099.png

(2)20道小数带括号输出到文件混合运算

1647651-20190505191426480-1866129552.png

文档界面

1647651-20190505191608601-1972044175.png

5.总结

  本次是我和小付同学第二次合作了,默契感上升了好多,虽然本次是由我担任驾驶员写代码的角色,但小付同学在我写代码的过程中提出了很多宝贵的意见,做出了巨大的贡献,比如在我写代码的过程中对随机数函数的运用不太懂,小付同学于是马上查资料,他的编程能力其实是强于我的,但他还是义无反顾的把本次练习写代码的机会让给了我,让我很是感动。虽然本次结对编程作业比上次稍难些许,因为五一的快乐让我们在最开始也莫得头绪,但在五一的末尾忽感时光飞逝,一寸光阴一寸金,于是我俩马上着手开始了思考程序怎么写,并在查阅了一些资料之后终于开始了编程之路,在这次结对作业中也让我们感到了合作的快乐,在最后运行界面出来之后我俩脸上都露出了久违的笑容。总的来说这次作业还是很成功的,结对作业也就此告一段落,希望在接下来的团队作业中能吸取更多队员的经验,队员们共同进步!

转载于:https://www.cnblogs.com/-xxj/p/10815353.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值