点击查看代码
#include<iostream>
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
int j=0;
char yunsuanfu()
{
char a[]={'+','-','*','/'};
int n=4;
int i;
i=rand()%n;
return a[i];
}
void question()
{
char b,d;
int a=rand()%100+1;
b=yunsuanfu();
int c=rand()%100+1;
d=yunsuanfu();
int e=rand()%100+1;
int con,con1;
if(b=='+')
{
if(d=='+') con=a+c+e;
else if(d=='-') con=a+c-e;
else if(d=='*') con=a+c*e;
else if(d=='/') con=a+c/e;
}
else if(b=='-')
{
if(d=='+') con=a-c+e;
else if(d=='-') con=a-c-e;
else if(d=='*') con=a-c*e;
else if(d=='/') con=a-c/e;
}
else if(b=='*')
{
if(d=='+') con=a*c+e;
else if(d=='-') con=a*c-e;
else if(d=='*') con=a*c*e;
else if(d=='/') con=a*c/e;
}
else if(b=='/')
{
if(d=='+') con=a/c+e;
else if(d=='-') con=a/c-e;
else if(d=='*') con=a/(float)c*e;
else if(d=='/') con=a/(float)c/e;
}
if(con>=0 && con<=1000)
{
cout<<a<<b<<c<<d<<e<<'='<<endl;
cout<<"输入结果:";
cin>>con1;
if(con==con1)
cout<<"Right!"<<endl;
else{
cout<<"Wrong!"<<endl;
cout<<"正确答案是:"<<con<<endl;
j++;
}
}
else if(con>1000 || con<0) {question();}
}
int main()
{
cout<<"欢迎使用小学四则运算练习系统!"<<endl;
cout<<"请根据题目输入答案,按下enter键答题!"<<endl;
srand(time(NULL));
for(int i=0;i<25;i++)
{
cout<<"第"<<i+1<<"题:"<<endl;
question();
if (j >=10) {
cout<<"做错题数已达到10题,本次练习结束,成绩不合格,请多加练习!"<<endl;
break;
}
}
cout<<"做错题数: "<<j<<endl;
cout<<"总分数: "<<250-10*j<<endl;
return 0;
}
运行结果:
博客体会:
本次课题为结对编程,结对编程旨在要我们学会团队合作,在完成作业的基础要求的同时结合两个人的观点与看法,集思广益地在程序上添加附加功能让程序更加完整;结对编程也能让我们在合作过程中学会不同于自己风格的代码编写,学会同一种内容的多种理解、编写方式。
作业内容为编写一个小学四则运算练习题程序。
由于我们小组对于C++语言比较熟悉,所以我们在讨论后一致决定使用C++来编程作业程序。
我们小组的编程思路是,一开始先将随机运算符和随机一百以内的数字生成出来,所以我们先编写了一个随机从“+”、“-”、“”、“/”四个运算符生成一个的函数,而对于随机数的生成我们则考虑使用“rand()%100+1”的形式来直接生成。
首先输出”欢迎使用小学四则运算练习系统!”和"请根据题目输入答案,按下enter键答题!”
的提示,以告诉使用者应该如何完成一次答题。出题方式为每次单独显示单道题而不是全部显示出来,这样可以避免答题者一次阅读多道题,出现答题混乱的情况。
而后在生成四则运算题的函数内,我们将式子通过以上方式拼凑在一块生成出来,在主函数中调用,由于本次作业内容中给的背景是“小学老师要每周给出300道四则运算练习题”,所以我们认为一周大概可以分为十来次布置,根据每天的作业量不同来合理安排,于是我们在主函数中设置的循环出题目的次数为25。所以我们的程序初步决定就是,一次出一题,做完一题按回车键进入下一题,每次总共出25题。
但是考虑到学生做题的时候,做完如果能知道对错并显示答案也许会更好,于是我们考虑在程序里面加上此类功能。但由于我们前面随机生成的运算符其实是以字符串的形式生成,只是简单地在题目中进行显示了,所以程序无法直接利用生成的题目式子计算出答案,在此我们利用了比较笨的方式,利用多个if语句将运算符一一对应得出答案,接着针对学生的答案给出对错判断,错误的话显示正确答案。不过一开始这些代码有些错误,在运行过程中,对于“con=a/ce”以及“con=a/c/e”两个式子无法得出正确答案,后来考虑到也许是因为除号在此处的特殊性,在c之前加上了“(float)”就运行成功了。
由于题目中还要求,答案不能超过1000,所以我又在程序中加了判断答案是否在01000区间内的代码,如果不在的话则舍弃掉本次随机生成,重新调用本身(生成题目的函数)再随机生成一次。一开始这个地方也有些小问题,因为把重新调用本身的这行语句放在了前面,所以每次调用的时候,尽管生成的式子不符合答案在01000的要求,也会不终止地将函数运行完再调用一轮。最后我们使用了if和else if语句。
考虑到小学的作业一般老师都会评分或者评级,于是我们在主函数中加上了最终评分的代码,在开头初始化了一个“j=0”来记录学生的错题数目,在最终以满分一百分,错一题扣4分的评分制来计算学生的得分并显示。
考虑到小学生四则运算练习也有一定的正确率要求,因此如果某次练习错误题数>=10,即本次练习不及格,会自动结束本次答题,并且提醒答题者多加练习,这样设计的目的主要是起到督促练习、提高正确率的作用。