源代码地址:http://git.oschina.net/junge212/25eubiqm170p3nzgj4yrh36.code.git
a.需求分析:
自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.功能设计:
能随机生成整数0~10的四则运算和真分数的四则运算,并统计正确率
c.设计实现:
本程序分为主函数和三个分函数,主函数main()主要实现随机调用两个分函数zhengshu()和fenshu()并统计正确率,三个分函数分别为处理0~10的整数四则运算和处理真分数的分数四则运算函数;整数函数zhengshu()主要随机产生两个随机数和随机运算符并计算;分数函数fenshu()主要随机产生两个随机数和随机运算符并调用第三个分函数gcd()进行计算。
d.代码说明:
具体代码:
#include "stdio.h" #include "stdlib.h" #include "time.h" #include "string.h" int score=0; int gcd(int x,int y) //求最大公约数函数 { int r; r=x%y; while(r!=0) { x=y; y=r; r=x%y; } return y; } int zhengshu(){//求整数的四则运算 int left,mid,right,result,int_number; srand((unsigned)time(NULL)); left=rand()%10; mid=rand()%4; right=rand()%10; printf("%d",left); switch(mid) { case(0):result=left+right; printf(" + ");break; case(1):result=left-right; printf(" - ");break; case(2):result=left*right; printf(" ×");break; case(3):result=left/right; printf(" ÷");break; } printf("%d =",right); scanf("%d",&int_number); if(int_number == result) { printf("回答正确! 下一题: "); score=score+1; } else{ printf("回答错误! 下一题: "); } } int fenshu(){//求分数的四则运算 int left_x,left_y,mid,right_x,right_y,x,y,GYS,int_number1,int_number2; srand((unsigned)time(NULL)); do{ left_x=rand()%10+1; left_y=rand()%10+1; mid=rand()%4; right_x=rand()%10+1; right_y=rand()%10+1; }while(!(left_x<left_y&&right_x<right_y)); printf("%d/%d",left_x,left_y); switch(mid) { case(0):x=left_x*right_y+left_y*right_x; y=left_y*right_y; printf(" + ");break; case(1):x=left_x*right_y-left_y*right_x; y=left_y*right_y; printf(" - ");break; case(2):x=left_x*right_x; y=left_y*right_y; printf(" ×");break; case(3):x=left_x*right_y; y=left_y*right_x; printf(" ÷");break; } printf("%d/%d =",right_x,right_y); GYS=gcd(x,y); x=x/GYS; y=y/GYS; scanf("%d/%d",&int_number1,&int_number2); if(int_number1==x&&int_number2==y) { printf("回答正确! 下一题: "); score=score+1; } else{ printf("回答错误! 下一题: "); } } int main(){//主函数——随机调用整数函数和分数函数 int h,count; printf("请输入题目数?"); scanf("%d",&count); for(int i=0;i<count;i++) { h=rand()%2; if(h==0) {zhengshu();} else {fenshu();} } printf("正确率为:%lf",score*1.0/count); }
实验截图:
psp:
PSP2.1 | Personal Software Process Stages | Time (m) Senior Student | Time (m) |
Planning | 计划 | 8 | 10 |
· Estimate | 估计这个任务需要多少时间 | 8 | 10 |
Development | 开发 | 82 | 100 |
· Analysis | 需求分析 (包括学习新技术) | 6 | 6 |
· Design Spec | 生成设计文档 | 5 | 7 |
· Design Review | 设计复审 | 4 | 6 |
· Coding Standard | 代码规范 | 3 | 2 |
· Design | 具体设计 | 10 | 20 |
· Coding | 具体编码 | 36 | 20 |
· Code Review | 代码复审 | 7 | 7 |
· Test | 测试(自我测试,修改代码,提交修改) | 13 | 30 |
Reporting | 报告 | 9 | 5 |
· | 测试报告 | 3 | 3 |
· | 计算工作量 | 2 | 2 |
· | 并提出过程改进计划 | 3 | 1 |
e.小结
这次实验真是历经千辛万苦:(不过也总算基本成功了,感谢编写代码时多位同学的耐心指导;该程序还是有缺陷,没能实现显示正确答案,程序存在异常错误,可能存在程序崩溃:)