四测运算升级版

作业要求来自于https://github.com/LLjiajie/Git/projects

GitHub远程仓库的地址:https://github.com/201606120064

 

一、从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

        1.生成题目,单个题目最多不能超过4个运算符,操作数小于100。

        2.用户可以输入答案

        3.若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。


二、下面附有 8 个相互独立的可以扩展的方向。

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

三、同学 两两结对,每对学生选取 8 个可扩展方向上面的 4个加以实现。

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

四、估计实现所需时间,记录结对编程时间,并写在博客中。

 

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);
}*/

 

 

运行截图

 

posted @ 2018-10-29 13:55  李嘉杰  阅读(403)  评论(1编辑  收藏  举报