c++四則運算結對程式設計 2252416 黃子軒

Walt·Hansumer發表於2024-04-18

一、實驗內容
本次課程內容為結對程式設計。與我組隊的同學學號為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道做完結果

四、體會
在這次結對程式設計中,我們在程式的思考中遇到了很多問題,我們使用的並不是由人輸入題目手動出題,而是挑戰了用隨機數來出題。在程式設計過程中,比如說四則運算的結果不在要求的範圍內,我們就設立了另一個引數來記錄出題正確的數量,然後如果出題結果不在範圍內,那麼題目就作廢並重新出題,隨之而來又出現了新的問題。因為如果重新出題,那麼重新隨機運算子的話,隨機到加減法且題目正確的機率會高於乘法並遠高於除法,隨機兩個數進行除法的結果符合要求的機率太低了。我們又想了許多辦法,比如說重新出題不重新隨機符號,就是說第一次隨機到了除法但是結果不符合要求,那麼重新第二次出題出的還是除法,但是隨之而來又有了新的問題,那就是每道題出題的時間相差太大,所以最後我們還是採用了之前的辦法。
最後對於結對程式設計,我覺得結對程式設計可以提高程式碼的質量,但是個人感覺效率太低了,我覺得兩個人的心思總是不能完全相通的,在一個人寫程式碼一個人檢查的過程中,要求寫程式碼的人要將意思傳達給檢查的人,這樣效率就下降了,我覺得如果同樣是兩個人完成一個專案的話,還是兩個人進行討論之後,分工完成程式碼的效率要更高一點,兩個人可以商量討論這點我覺得還是非常好的。

相關文章