软件创新与开发——结对编程

程序要求:两个运算符,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++的反思。总的来说,本次结对编程实验收获颇丰!

posted @ 2024-04-18 16:09  Aegsis  阅读(6)  评论(0编辑  收藏  举报