軟體創新與開發——結對程式設計

Aegsis發表於2024-04-18

程式要求:兩個運算子,100以內的數字,不需要寫答案。
需要檢查答案是否正確,並且保證答案在0-100之間。

本次作業由2252312和2252413共同完成
由2252312釋出部落格園

執行環境:Windows10教育版
開發環境:devc++
語言:C++
處理器:11th Gen Intel(R) Core(TM) i7-11700@2.5GHz 2.50GHz

以下是原始碼

點選檢視程式碼
#include <iomanip>
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;
int main()
{
    clock_t T1,T2; 
    int S,N=-1,Answer=1,Answer_right=0;       
    double accuracy=0;        
    for(T2 = clock();Answer<=300;){
        srand(time(NULL));
        int a,b;        
        a= rand() %100;
        b= rand() %100;
        int e= rand() % 3+ 1;        
        if(e==1){            
            S=a+b;
            if(S<=100){
                cout<<"第"<<Answer<<"題:" ;
                cout<<a<<"+"<<b<<"=";
                cin>>N;
                Answer++;
            }
        }

        else if(e==2){        //減法
            S=a-b;
            if(S<=100&&S>=0){
                cout<<"第"<<Answer<<"題:" ;
                cout<<a<<"-"<<b<<"=";
                cin>>N;
                Answer++;
            }
        }

        else if(e==3){        //乘法
            S=a*b;
            if(S<=100&&S>=0){
                cout<<"第"<<Answer<<"題:" ;
                cout<<a<<"*"<<b<<"=";
                cin>>N;
                Answer++;
            }
        }

        else if(e==4){        //除法
            if(b!=0&&a%b==0){
                S=a/b;
                if(S<=100&&S>=0){
                    cout<<"第"<<Answer<<"題:" ;
                    cout<<a<<"/"<<b<<"=";
                    cin>>N;
                    Answer++;
                }
            }
        }

        if(N==S){
            cout<<"再獎勵你一題!"<<endl;
            system("pause");
            Answer_right++;
            N=-1;
        }
        else if(N!=-1){        
            cout<<"這都能算錯?菜!你就多練!"<<endl;

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

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


            ofs.close();

            system("pause");
            N=-1;
        }
        if((Answer-1)%10==0)
        system("cls");

    }
    T2 = clock();
    int time=(int)(T2-T2)/CLOCKS_PER_SEC;
    Answer=Answer-1;
    accuracy=(double)Answer_right/(double)Answer;
    cout<<"恭喜做完本輪300試題,您本次的正確率為:"<<fixed<<setprecision(2)<<accuracy*100<<"%"<<endl;
    return 0;
}

遇到的問題以及解決方案:
透過記事本批次修改定義不明確的定義時,將大量資料修改,使得程式碼不能夠正常使用。

解決方案:使用事先存檔的程式碼進行讀檔,再逐行程式碼進行修改。
程式碼編譯過於繁亂,除了編譯者以外的人看不懂。

點選檢視程式碼
 if(N==S){
            cout<<"再獎勵你一題!"<<endl;
            system("pause");
            Answer_right++;
            N=-1;}
        else if(N!=-1){        cout<<"這都能算錯?菜!你就多練!"<<endl;
            ofstream ofs;
            ofs.open("file.txt", ios::app);
            if(e==1){   ofs<<a<<"+"<<b<<"="<<S<<endl<<"你的答案:"<<N<<endl;
            }
            else if(e==2){ofs<<a<<"-"<<b<<"="<<S<<endl<<"你的答案:"<<N<<endl;
            }
            else if(e==3){ofs<<a<<"*"<<b<<"="<<S<<endl<<"你的答案:"<<N<<endl;}
            else if(e==4){
                ofs<<a<<"/"<<b<<"="<<S<<endl<<"你的答案:"<<N<<endl;
            }
            ofs.close();
            system("pause");
            N=-1;}
解決方案:將程式碼整理,使得程式碼條理清晰。
點選檢視程式碼
else if(N!=-1){        
            cout<<"這都能算錯?菜!你就多練!"<<endl;

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

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


            ofs.close();

            system("pause");
            N=-1;
        }
在程式設計程式中發現每次隨機的數是相同的,在C++中,如果每次生成的隨機數相同,經過搜尋發現是因為沒有設定種子(seed)。在使用rand()函式之前,需要先呼叫srand()函式設定一個種子,通常使用當前時間作為種子。

執行截圖:

心得與體會:
經過本次結對程式設計實驗,我們對結對程式設計有了更深刻的體會。一是感覺結對程式設計效率比較高,在程式設計的過程中雙方就能實時交流,能及時提出建議或是改正錯誤,並且由於隨時準備交流,所以專注度高。二是結對程式設計能實現相對更完整的程式,兩個人的頭腦風暴更能夠讓程式完整的呈現。三是結對程式設計有助於雙方能力的提升,每個人的程式碼風格不同,透過與不同人的程式碼交流,會發現自己的程式碼有許多不足的地方,也會幫助他人進行c++的反思。總的來說,本次結對程式設計實驗收穫頗豐!

相關文章