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