源代码地址: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("回答正确! 下一题:\n");
score=score+1;
}
else{
printf("回答错误! 下一题:\n");
}
}
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("回答正确! 下一题:\n");
score=score+1;
}
else{
printf("回答错误! 下一题:\n");
}
}
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.小结
这次实验真是历经千辛万苦:(不过也总算基本成功了,感谢编写代码时多位同学的耐心指导;该程序还是有缺陷,没能实现显示正确答案,程序存在异常错误,可能存在程序崩溃:)