c++四则运算结对编程 2252416 黄子轩

一、实验内容
本次课程内容为结对编程。与我组队的同学学号为2252428.
本次结对编程的题目是小学老师要每周给同学出300道四则运算练习题。
两个运算符,100 以内的数字,不需要写答案。
需要检查答案是否正确,并且保证答案在 0..100 之间
我们使用的是c++代码

二、代码
代码如下:

点击查看代码
#include <iomanip>
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;

int main()
{
    clock_t t0,t1;  //用于计算运行时间
    int sum,num=-1,flag=1,f_right=0;        //sum用来存放正确的结果,num用来存放答题者输入的结果,flag用来记录有效题目数量 ,f_right用来记录正确数量
    double accuracy=0;        //正确率
    for(t0 = clock();flag<=300;){
        srand(time(NULL));
        int a,b;        //生成两个随机数
        a= rand() %100;
        b= rand() %100;
        int e= rand() % 3+ 1;        //判断四则运算符号 生成0+1~3+1的随机数
        if(e==1){            //加法
            sum=a+b;
            if(sum<=1000){
                cout<<"第"<<flag<<"题:" ;
                cout<<a<<"+"<<b<<"=";
                cin>>num;
                flag++;
            }
        }

        else if(e==2){        //减法
            sum=a-b;
            if(sum<=1000&&sum>=0){
                cout<<"第"<<flag<<"题:" ;
                cout<<a<<"-"<<b<<"=";
                cin>>num;
                flag++;
            }
        }

        else if(e==3){        //乘法
            sum=a*b;
            if(sum<=1000&&sum>=0){
                cout<<"第"<<flag<<"题:" ;
                cout<<a<<"*"<<b<<"=";
                cin>>num;
                flag++;
            }
        }

        else if(e==4){        //除法
            if(b!=0&&a%b==0){
                sum=a/b;
                if(sum<=1000&&sum>=0){
                    cout<<"第"<<flag<<"题:" ;
                    cout<<a<<"/"<<b<<"=";
                    cin>>num;
                    flag++;
                }
            }
        }

        if(num==sum){
            cout<<"恭喜你答对了!"<<endl;
            system("pause");
            f_right++;
            num=-1;
        }
        else if(num!=-1){        //&&num!=sum
            cout<<"很遗憾你答错了!"<<endl;

            ofstream ofs;
            ofs.open("file.txt", ios::app);

            if(e==1){
                ofs<<a<<"+"<<b<<"="<<sum<<endl<<"你的答案:"<<num<<endl;
            }
            else if(e==2){
                ofs<<a<<"-"<<b<<"="<<sum<<endl<<"你的答案:"<<num<<endl;
            }
            else if(e==3){
                ofs<<a<<"*"<<b<<"="<<sum<<endl<<"你的答案:"<<num<<endl;
            }
            else if(e==4){
                ofs<<a<<"/"<<b<<"="<<sum<<endl<<"你的答案:"<<num<<endl;
            }


            ofs.close();

            system("pause");
            num=-1;
        }
        if((flag-1)%10==0)
        system("cls");

    }
    t1 = clock();
    int time=(int)(t1-t0)/CLOCKS_PER_SEC;
    flag=flag-1;
    accuracy=(double)f_right/(double)flag;
//    cout<<"恭喜做完本轮试题,您本次的正确率为:"<<accuracy*100<<"%";
    cout<<"恭喜你,做完啦,您本次的正确率为:"<<fixed<<setprecision(2)<<accuracy*100<<"%"<<"本次作答总用时为:"<<time<<"秒"<<endl;
    return 0;
}

三、运行结果
正确

错误

300道做完结果

四、体会
在这次结对编程中,我们在程序的思考中遇到了很多问题,我们使用的并不是由人输入题目手动出题,而是挑战了用随机数来出题。在编程过程中,比如说四则运算的结果不在要求的范围内,我们就设立了另一个参数来记录出题正确的数量,然后如果出题结果不在范围内,那么题目就作废并重新出题,随之而来又出现了新的问题。因为如果重新出题,那么重新随机运算符的话,随机到加减法且题目正确的概率会高于乘法并远高于除法,随机两个数进行除法的结果符合要求的概率太低了。我们又想了许多办法,比如说重新出题不重新随机符号,就是说第一次随机到了除法但是结果不符合要求,那么重新第二次出题出的还是除法,但是随之而来又有了新的问题,那就是每道题出题的时间相差太大,所以最后我们还是采用了之前的办法。
最后对于结对编程,我觉得结对编程可以提高代码的质量,但是个人感觉效率太低了,我觉得两个人的心思总是不能完全相通的,在一个人写代码一个人检查的过程中,要求写代码的人要将意思传达给检查的人,这样效率就下降了,我觉得如果同样是两个人完成一个项目的话,还是两个人进行讨论之后,分工完成代码的效率要更高一点,两个人可以商量讨论这点我觉得还是非常好的。

posted @ 2024-04-18 16:19  Walt·Hansumer  阅读(4)  评论(0编辑  收藏  举报