作业四—个人项目-小学四则运算 “软件”之初版

作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

github地址:https://github.com/huangzhipeng00/-

一、题目要求

像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。

具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:

23 - 3 * 4 = 11

扩展要求:

1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。

2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。


二、设计思路

编程语言:c语言

工具:

设计思路:主函数让用户输入要练习的题目数量;而后随机产生随机数和随即运算符并产生运算式;判别用户输入的结果是否与正确答案一致,提示输入值是否正确,答题继续。答题完毕后,统计错对情况给出判别数据。

类。

三、主要代码

#include<stdio.h>

#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<windows.h>

float algorithm(float x,char op,float y);
float algorithm2(float x,char op2,float y);
char createnumberop();
void test1(int n);

main()
{
int chooce,n;

printf("欢迎来到四则运算练习题\n");
printf("(按回车键开始做题)\n");

 

getchar();

printf("\n请输入四则运算的数目:");
while(1)
{
scanf("%d",&n);
if(n<=0)
printf("【数目有误,请重新输入!】\n");
else
break;
}

test1(n);


}

//第一个运算符计算
float algorithm(float x,char op,float y)
{
float result;
switch(op)
{
case'+':result = x + y;break;
case'-':result = x - y;break;
case'*':result = x * y;break;
case'/':result = x / y;break;
}
return result;
}
//第二个运算符计算
float algorithm2(float x,char op2,float y)
{
float result;
switch(op2)
{
case'+':result = x + y;break;
case'-':result = x - y;break;
case'*':result = x * y;break;
case'/':result = x / y;break;
}
return result;
}

//随机产生运算符
char mark()
{
int op;
op=rand() % 4+1;
switch(op)
{
case 1:return'+';
case 2:return'-';
case 3:return'*';
case 4:return'/';
}
return 0;
}

//100以内四则运算
void test1(int n)
{
int i,rightnum=0,wrongnum=0;//rightnumber正确的个数,wrongnumber错误的个数
float a,b,c,answer,result;
char op,op2;//运算符
srand(time(NULL));
for(i=0;i<n;i++)
{
a=(float)(rand() % 100+1);//获取随机数
b=(float)(rand() % 100+1);
c=(float)(rand() % 100+1);
op=mark();//获取随机运算符
op2=mark();
if((op=='+' || op=='-') && (op2=='*' || op2=='/')){
result=algorithm(a,op,algorithm2(b,op2,c));
}
else{
result=algorithm2(algorithm(a,op,b),op2,c);//根据运算符优先级得出结果
}
if(result< 0)//如果结果为非正数,则重新获取题目
{
i--;
continue;
}
else{
printf("%.f %c %.f %c %.f = ",a,op,b,op2,c);
scanf("%f",&answer);

if((int)(100.0*answer+0.5)/100.0==(int)(100.0*result+0.5)/100.0 && result>=0)//四舍五入精确到小数点后两位
{
printf("【回答正确!】\n\n");
rightnum++;
}
else
{
printf("【回答错误!答案是:%.2f】\n\n",(int)(100.0*result+0.5)/100.0);
wrongnum++;
}
}
}
printf("你总共答对了%d题,准确率为%.2f%!\n",n,rightnum,(float)rightnum/(float)n*100);
system("pause");
system("CLS");
printf("\n\n");
}

 

五、遇到的问题

很多简单的函数都忘记怎么拼了,没有做到以前的笔记,在网上找了和问了同学解决问题


 六、个人软件过程耗时估计与统计表

 

PSP2.1Personal Software Process StagesTime Senior StudentTime
Planning计划515
 Estimate估计这个任务需要多少时间1012
Development开发2530
Analysis需求分析 (包括学习新技术)250
Design Spec生成设计文档45
Design Review设计复审33
Coding Standard代码规范11
 Design具体设计1012
 Coding具体编码1050
Code Review代码复审22
Test测试(自我测试,修改代码,提交修改)11
Reporting报告33
 测试报告11
 计算工作量23
 并提出过程改进计划11

 

 
 
 
好文要顶  关注我  收藏该文   

 

转载于:https://www.cnblogs.com/huangzhipeng/p/9790605.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值