合作伙伴:2252807
1.项目要求
要求实现四则运算练习题。
这个程序有很多种实现方式:
· C/C++
· C#/VB.net/Java
. Excel
· Unix Shell
. Emacs/Powershell/Vbscript
. Perl
· Python
·两个运算符,100以内的数字,不需要写答案。
·需要检查答案是否正确,并且保证答案在0……100之间
·尽可能地多设置一些条件
我们讨论之后最终决定使用C++作为编程语言,因为C++语法简洁、易于理解,并添加以下条件:
对回答结果正确与否给予反馈;可选择结束答题或继续答题。

2.功能介绍
随机生成一百以内的四则运算,不显示结果,我们需要手动输入结果,系统识别答案是否正确。如果答案正确会显示“回答正确!正确答案为:”,如果答案错误会显示“回答错误!正确答案为:”,并选择继续答题或结束答题。

3.设计思路
分工过程:由我负责编写程序和调试,另外一个同学负责测试和提供反馈。
制定计划:我们首先讨论确定了要实现的大致功能以及实现方法。然后,我们开始编程阶段。
实施编程:
(1)我们加入了srand(time(NULL))和rand函数来生成随机数,srand(time(NULL))可以为rand函数提供不同的种子值, r1 = rand() % 100 和 r2 = rand() % 100 来生成1-99的随机整数。用 note = rand() % 3 + 1 来表示1-4的随机整数,用于表示加减乘除。
(2)然后加入了clock_t tstart,tfinish 用于计算运行时间。tstart = clock() 表示开始时的时间。tfinish = clock() 表示结束时的时间。int time = (int) (tfinish - tstart) / CLOCKS_PER_SEC 其中CLOCKS_PER_SEC表示一秒CPU运行的时钟周期数为1000个,time表示计算的总时间。
(3)除此之外,还有sum表示输入的结果,num表示目前到第几题,doright表示正确题数,doerror表示错误题数,correctness表示正确率,errorrate表示错误率,finish表示是否直接结束。
(4)system("pause")可以输入任意键来进行下一步
(5)system("cls")可以在每做完一题清除界面

4.遇到问题
(1)有时候程序会卡,直接运行会直接显示结果。一开始以为是代码的问题,后来发现多次运行之后不会出现这个问题。
(2)还有一些小问题,比如输入输出格式、运算符优先级等,经过讨论和协作,我们都逐一解决了这些问题。

5.完整代码

#include <iomanip>
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;
//小学老师要每周给同学出300道四则运算练习题。
//–两个运算符,100 以内的数字,不需要写答案。
//–需要检查答案是否正确,并且保证答案在 0..100 之间
//–尽可能地多设置一些条件
int right1;//right正确的结果
int sum = -1;//sum输入的结果
int num = 1;//num目前到第几题
int doright = 0;//正确题数
int doerror = 0;//错误题数
double correctness;//正确率
double errorrate;//错误率
int finish = 0;//是否直接结束
int r1,r2;//随机数
int note;//符号
void ran ();
void add ();
void minus1 ();
void multiplication ();
void division ();
int main(){
    clock_t tstart,tfinish;//用于计算运行时间
    tstart = clock();//tstart = clock()表示开始时的时间
    for (int i = 1;i <= 300;i++) {
	    if (finish == 1) {
	    	break;
		}
        ran();
        if (note == 1) {//加法
            add();
        }
        else if (note == 2) {//减法
            minus1();
        }
        else if (note == 3) {//乘法
            multiplication ();
        }
        else if (note == 4) {//除法
            division ();
        }
    }
    tfinish = clock();//tfinish = clock()表示结束时的时间
    int time = (int) (tfinish - tstart) / CLOCKS_PER_SEC;//表示一秒CPU运行的时钟周期数为1000个
    num = num - 1;
    correctness = (double)doright / (double)num;
    errorrate = (double)doerror / (double)num;
    cout << "本次一共完成" << num << "题" << endl;
    cout << "一共做对" << doright << "题" << endl;
	cout << "正确率为:" << fixed << setprecision(2) << correctness * 100  << "%" << endl;
    cout << "一共做错" << doerror << "题" << endl;
	cout << "错误率为:" << fixed << setprecision(2) << errorrate * 100  << "%" << endl;
	cout << "本次作答总用时为:" << time << "秒" << endl;
    return 0;
}
void ran() {
	srand(time(NULL));//srand(time(NULL))可以为rand函数提供不同的种子值
    r1 = rand() % 100;//随机生成整数
    r2 = rand() % 100;
    note = rand() % 3 + 1;//1表示加,2表示减,3表示乘,4表示除
}
void add () {
	right1 = r1 + r2;
    if (right1 <= 100) {
        cout << "第 " << num << " 题:" << endl;
        cout << r1 << " + " << r2 << " = ";
        cin >> sum;
        num = num + 1;
    }
    if (right1 == sum) {
        cout << "回答正确!正确答案为:" << r1 << " + " << r2 << " = " << right1 << endl;
        doright = doright + 1;
        system("pause");//
        sum = -1;
    }
    else {
        cout<<"回答错误!正确答案为:" << r1 << " + " << r2 << " = " << right1 <<endl;
        doerror = doerror + 1;
        system("pause");
        right1 = -1;
    }
    cout << "输入1退出,输入0继续:";
	cin >> finish;
    system("cls");//每做完一题清除界面
}
void minus1 () {
	right1 = r1 - r2;
    if (right1 <= 100 && right >= 0) {//结果要在0-100之间
        cout << "第 " << num << " 题:" << endl;
        cout << r1 << " - " << r2 << " = ";
        cin >> sum;
        num = num + 1;
    }
    if (right1 == sum) {
        cout << "回答正确!正确答案为:" << r1 << " - " << r2 << " = " << right1 << endl;
        doright = doright + 1;
        system("pause");//
        sum = -1;
    }
    else {
        cout<<"回答错误!正确答案为:" << r1 << " - " << r2 << " = " << right1 <<endl;
        doerror = doerror + 1;
        system("pause");
        right1 = -1;
    }
    cout << "输入1退出,输入0继续:";
	cin >> finish;
    system("cls");//每做完一题清除界面
}
void multiplication () {
	right1 = r1 * r2;
    if (right1 <= 100 && right1 >= 0) {//结果要在0-100之间
        cout << "第 " << num << " 题:" << endl;
        cout << r1 << " * " << r2 << " = ";
        cin >> sum;
        num = num + 1;
    }
    if (right1 == sum) {
        cout << "回答正确!正确答案为:" << r1 << " * " << r2 << " = " << right1 << endl;
        doright = doright + 1;
        system("pause");//
        sum = -1;
    }
    else {
        cout<<"回答错误!正确答案为:" << r1 << " * " << r2 << " = " << right1 <<endl;
        doerror = doerror + 1;
        system("pause");
        right1 = -1;
    }
    cout << "输入1退出,输入0继续:";
	cin >> finish;
    system("cls");//每做完一题清除界面
}
void division () {
	if (r2 != 0 && r1 % r2 == 0) {
	    right1 = r1 / r2;
		if (right1 <= 100 && right1 >= 0) {//结果要在0-100之间
            cout << "第 " << num << " 题:" << endl;
            cout << r1 << " / " << r2 << " = ";
            cin >> sum;
            num = num + 1;
        }
    }
    if (right1 == sum) {
        cout << "回答正确!正确答案为:" << r1 << " / " << r2 << " = " << right1 << endl;
        doright = doright + 1;
        system("pause");//
        sum = -1;
    }
    else {
        cout<<"回答错误!正确答案为:" << r1 << " / " << r2 << " = " << right1 <<endl;
        doerror = doerror + 1;
        system("pause");
        right1 = -1;
    }
    cout << "输入1退出,输入0继续:";
	cin >> finish;
    system("cls");//每做完一题清除界面
}

6.结果展示



7.总结
通过这次结对编程,发现自己某些考虑不全面或者粗心,有时候同伴可以及时发现并改正,由于代码在编写过程中不断被审查,因此可以立即发现和修复错误。整个过程中我们互相帮助,互相教对方,可以得到能力上的互补。增强代码和产品质量,并有效的减少BUG。降低学习成本。一边编程,一边共享知识和经验,这有助于我们之间的技能提升,对代码有深入的了解,有效地在实践中进行学习。在编程中,相互讨论,可能更快更有效地解决问题。但是这也可能会带来一些挑战。比如在选择实现方式的时候,可能有不同的建议,对方会比较倾向于用Python,而我比较倾向于使用C++或者Java。最后我们折中选择了两个人都比较熟悉的C++语言来实现。同时,当我们在面对沟通不及时的问题时,结对编程可能不会那么有效。结对编程对于我来说是一种非常新奇的体验,我可以和我的伙伴一起解决问题,这一般会更加高效,出现问题也能更快解决,同时,我还可以从我的伙伴那里学习到知识,得到经验。虽然也会遇到分歧,但这让我提高了团队合作能力。

posted on 2024-04-15 22:08  xymmm  阅读(19)  评论(0编辑  收藏  举报