四测运算升级版
作业要求来自于https://github.com/LLjiajie/Git/projects
GitHub远程仓库的地址:https://github.com/201606120064
一、从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:
1.生成题目,单个题目最多不能超过4个运算符,操作数小于100。
2.用户可以输入答案
3.若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
二、下面附有 8 个相互独立的可以扩展的方向。
- 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 用户答题结束以后,程序可以显示用户答题所用的时间
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名
- 程序可以出单个整数阶乘的题目:如:4!=24
- 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
三、同学 两两结对,每对学生选取 8 个可扩展方向上面的 4个加以实现。
- 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 用户答题结束以后,程序可以显示用户答题所用的时间
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名
- 程序可以出单个整数阶乘的题目:如:4!=24
- 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
四、估计实现所需时间,记录结对编程时间,并写在博客中。
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
309 |
606 |
· Estimate |
估计这个任务需要多少时间 |
301 |
902 |
Development |
开发 |
100 |
203 |
· Analysis |
需求分析 (包括学习新技术) |
41 |
25 |
· Design Spec |
生成设计文档 |
0 |
0 |
· Design Review |
设计复审 |
20 |
35 |
· Coding Standard |
代码规范 |
83 |
74 |
· Design |
具体设计 |
39 |
49 |
· Coding |
具体编码 |
40 |
50 |
· Code Review |
代码复审 |
10 |
60 |
· Test |
测试(自我测试,修改代码,提交修改) |
181 |
185 |
Reporting |
报告 |
200 |
252 |
Test Report |
测试报告 |
0 |
0 |
·workload |
计算工作量 |
422 |
405 |
·correction |
并提出过程改进计划 |
0 |
0 |
部分代码:
int main()
{
int core,n,yes,c,d,x_chose;
int a;
float por;
char word,pr[20],ch;
printf("\t\t| |\n");
printf("\t\t| 欢迎使用四则运算系统 |\n");
printf("\t\t| |\n");
printf("请修改背景颜色(1-蓝色、2-绿色、3-红色)");
scanf("%d",&a);
switch(a){
case 1:
system("color 1c");
break;
case 2:
system("color 2c");
break;
case 3:
system("color 4c");
break;
}
lab1:yes=0;
printf("请输入题目数量: \n");
scanf("%d",&n);
//printf("\n\n");
for(core=0;core<n;core++)
{
d=Judge();
if(d==1)
yes++;
}
por=(float)yes/(float)n*100;
printf("总共答对了%d题!\t\t答题的准确率为:%f%\n\n",yes,por);
do
{
printf("需要继续进行四则运算吗?<y/n>: ");
getchar();
scanf("%c",&ch);
printf("\n");
if(ch=='y' || ch=='Y')
goto lab1;
else if(ch=='n' || ch=='N')
return 0;
else
printf("您的输入有误!请重新输入!\n");
}while(ch!='y' || ch!='Y' || ch!='n' || ch!='N');
return 0;
}
float Calculate(int c,float num1,float num2)
{
float result;
switch(c)
{
case 1:
result=num1+num2;
break;
case 2:
result=num1-num2;
break;
case 3:
result=num1*num2;
break;
case 4:
result=num1/num2;
break;
}
return result;
}
char Operator(int c)
{
char sign;
switch(c)
{
case 1:
sign='+';
break;
case 2:
sign='-';
break;
case 3:
sign='*';
break;
case 4:
sign='/';
break;
default:
return 0;
}
return sign;
}
int Judge()
{
int num1,num2,num3,m,n,d=0;
float a,b, res,core2;
char op1,op2;
do{
srand(time(NULL));
num1=rand()%100+1;
num2=rand()%100+1;
num3=rand()%100+1;
m=rand()%4+1;
n=rand()%4+1;
if(m>2)
{
a=(float)num1;
b=(float)num2;
core2=Calculate(m,a,b);
a=core2;
b=(float)num3;
core2=Calculate(n,a,b);
}
else
{
if(n>2)
{
a=(float)num2;
b=(float)num3;
core2=Calculate(n,a,b);
a=(float)num1;
b=core2;
core2=Calculate(m,a,b);
}
else
{
a=(float)num1;
b=(float)num2;
core2=Calculate(m,a,b);
a=core2;
b=(float)num3;
core2=Calculate(n,a,b);
}
}
}while(core2<0);
op1=Operator(m);
op2=Operator(n);
printf("%d %c %d %c %d = ",num1,op1,num2,op2,num3);
scanf("%f",&res);
if(((int)(10.0*res+0.5)/10.0)==((int)(10.0*core2+0.5)/10.0))
{
d=1;
printf("答对了!\n\n",d);
}
else
{
printf("答错了!\n");
}
return d;
}
/*int fac(int n)
{
int f;
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return(f);
}*/
运行截图