C++课程设计报告Word格式文档下载.docx
《C++课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
usingnamespacestd;
//计算式数量
intconstNum=20;
//计算式中最大数
intconstMaxNum=100;
//每题分数
intconstPerMark=5;
//计算结果最大值
intconstMaxResult=100;
//计算结果最小值
intconstMinResult=0;
enumenum_1{Add,Subtract,Multiply,Divide};
classenump{
public:
charenum_2(enum_1op);
intResult(intleft,intright,enum_1op);
boolcheck(intleft,intright,enum_1op);
voidgetFormula(int*left,int*right,enum_1op);
enum_1op;
//操作符左值
intleft[Num];
//操作符右值
intright[Num];
//用户输入计算结果
intresult[Num],result_error[Num][4];
//操作符+-*/
enum_1oper[Num];
//正确答案个数
floatanswerRight;
};
//将枚举类型转换为字符类型,以便输出。
charenump:
:
enum_2(enum_1op)
{
switch(op)
{
caseAdd:
return'
+'
;
caseSubtract:
-'
caseMultiply:
x'
caseDivide:
/'
}
'
}
//计算生成表达式的正确结果。
intenump:
Result(intleft,intright,enum_1op)
returnleft+right;
returnleft-right;
returnleft*right;
returnleft/right;
return0;
//检查生成计算式的正确与否。
其中减法结果不能为负数,除法结果不能为小数。
boolenump:
check(intleft,intright,enum_1op)
returntrue;
if(left<
right)
returnfalse;
if(right==0)
if(double(left/right)!
=double(double(left)/double(right)))
//依据给定操作符,生成符合条件的表达式。
voidenump:
getFormula(int*left,int*right,enum_1op)
//srand(time(NULL));
for(;
)
*left=1+rand()%MaxNum;
//得出1到100其中的一个整数
*right=1+rand()%MaxNum;
if(check(*left,*right,op)&
&
Result(*left,*right,op)<
=MaxResult&
Result(*left,*right,op)>
=MinResult)
break;
intmain()
enumpp;
p.answerRight=0;
intk=0,h=0;
cout<
<
"
100以内的算术题"
endl<
endl;
//随机种子
srand(time(NULL));
//根据系统时间设置随机数种子
//开始生成计算表达式。
for(inti=0;
i<
Num;
i++)
//操作符
p.oper[i]=enum_1(rand()%4);
//取得区间[0,4)的整数,从而得到不同符号
p.getFormula(&
p.left[i],&
p.right[i],p.oper[i]);
生成计算式完成,开始答题!
//输出表达式,让用户答题
for(intj=0;
j<
j++)
//输出表达式
第"
j+1<
题:
\n"
p.left[j]<
'
p.enum_2(p.oper[j])<
p.right[j]<
"
="
//获取用户答案
cin>
>
p.result[j];
//比对用户答案是否正确,正确输出right,answerRigth加一,否则输出notcorrect。
if(p.result[j]==p.Result(p.left[j],p.right[j],p.oper[j]))
答案正确。
。
p.answerRight++;
cout<
当前得分"
p.answerRight*PerMark<
else
{p.result_error[k][0]=p.left[j];
p.result_error[k][1]=p.enum_2(p.oper[j]);
p.result_error[k][2]=p.right[j];
p.result_error[k][3]=p.result[j];
k++;
h++;
答案错误。
//全部答题完毕,输出正确答案个数及得分。
---------------------------------------------------------------------"
终止答题,共"
Num<
题,每题"
PerMark<
分,答对"
p.answerRight<
题,得分:
<
分。
正确率"
p.answerRight/Num*100<
%"
错误的题目:
for(intm=0;
m<
h;
m++)
{if(p.result_error[m][1]==47)
cout<
p.result_error[m][0]<
/"
p.result_error[m][2]<
p.result_error[m][3]<
(错误)"
elseif(p.result_error[m][1]==120)
x"
elseif(p.result_error[m][1]==43)
+"
else
-"
//屏幕停止。
getch();