一、题目:在原程序的基础之上让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。
二、设计思路
既然能判断对错,和接受用户的输入,那就必须能保存这些题目的结果,和用户输入的结果。因此我用了两个数组,其中一个由前边的运算符控制直接保存结果,另一组数组由用户输入,在将两数组进行比对,对了输出正确且变量加1,错误亦然。但是遇到了余数的问题,后又设置两个数组分别保存正确的余数和用户输入的余数,在后边用户输入中通过判断正确余数是否等于0来判断if函数,将程序的功能实现。
三、源代码
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
int sm; //sm 即题目的数量
char cc; //cc 即算式中有无乘除
char ys; //ys即有无余数
int sz; //sz 即数值取值范围
char zf; //zf即加法运算出不出现正负
char fh; //fh即四则运算中的加减乘除
int ls; //ls即输出的列数
int dui=0;
int cuo=0;
cout<<"请输入您需要的题目数目: ";
cin>>sm;
int ans1[1000]; //ans1存放答案
int ans2[1000]; //ans2存放用户输入的答案
int ans3[1000]={0}; //存放余数
int ans4[1000]; //存放用户输入的余数
cout<<"运算中需要乘除法吗?(y/n)";
cin>>cc;
if(cc=='y')
{
cout<<"除法中需要出现余数吗?(y/n)";
cin>>ys;
}
cout<<"请输入运算数的最大取值范围:";
cin>>sz;
cout<<"减法中出现负数吗?(y/n)";
cin>>zf;
cout<<"您想输出几列?";
cin>>ls;
cout<<"***********************************************"<<endl;
for(int i=0;i<sm;i++) //for循环中用sm来控制循环次数
{
int a=rand()%sz;
int b=rand()%sz;
int c;
if(cc=='y') //此处判断用不用到乘除法
c=rand()%4;
else if(cc=='n')
c=rand()%2;
if(c==0) //此处判断运算符号
{
fh='+';
ans1[i]=a+b;
}
if(c==1)
{
fh='-';
ans1[i]=a-b;
}
if(c==2)
{
fh='*';
ans1[i]=a*b;
}
if(c==3)
{
fh='/';
ans1[i]=a/b;
ans3[i]=a-b*ans1[i];
}
if(c==3&&b==0) //除数不能为0
{
i--;
continue;
}
if(c==1&&zf=='n'&&a<b) //减法结果不为负数
{
i--;
continue;
}
if(c==3&&ys=='n'&&a%b!=0) //除法结果不产生余数
{
i--;
continue;
}
cout<<i+1<<"、"<<a<<fh<<b<<'='<<" ";
if((i+1)%ls==0) //控制输出的列数
{
cout<<endl;
}
}
cout<<"***********************************************"<<endl;
cout<<"请输入答案:"<<endl;
for(int k=0;k<sm;k++)
{
if(ans3[k]==0) //没余数状态下的输入答案即返回结果
{
cout<<k+1<<":";
cin>>ans2[k];
if(ans2[k]==ans1[k])
{
cout<<"正确"<<endl;
dui=dui+1;
}
else
{
cout<<"错误"<<endl;
cuo=cuo+1;
}
}
if(ans3[k]!=0) //有余数状态下的输入答案即返回结果
{
cout<<k+1<<"商为:";
cin>>ans2[k];
cout<<"余数为:";
cin>>ans4[k];
if((ans2[k]==ans1[k])&&(ans3[k]==ans4[k]))
{
cout<<"正确"<<endl;
dui=dui+1;
}
else
{
cout<<"错误"<<endl;
cuo=cuo+1;
}
}
}
cout<<"***********************************************"<<endl;
cout<<"共做对 "<<dui<<" 道题"<<endl;
cout<<"共做错 "<<cuo<<" 道题"<<endl;
return 0;
}
四、运行结果截图
五、经验总结
在这个小程序里我们遇到了好几个困难,比如说除法那里有余数和没余数是来两个情况的判断,同时余数的保存和输入也让我觉得比较棘手,后来一想余数不就是本身减去最大约数吗,同时可以用数组的方式对其进行保存。思路有了,再来写代码,就会变得很轻松。同时编程也要让自己严禁起来,每一种情况和后果都得考虑出来,以后还要常加练习。
结对小组成员:吴论20133047,丁官甲20133088(http://www.cnblogs.com/dgj1314/)