第一周软件作业
coding地址:
题目:
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷
3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
4.要求能处理用户输入的真分数, 如 1/2, 5/12 等
5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
需求分析:
1.想要自动生成算数题目
2.要判断答案正确与否
功能设计:
1.自动生成分数或整数(可以由分数约分得到)
2.自动生成运算符号
3.可以对分数进行约分1 4.要将用户输入的数字与正确答案比较
设计实现:
思路:由四个随机生成的数组成两个分数,中间用随机生成的符号连接
代码说明:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
char i;
int a,b,c,d,e,f,g,n,m;
printf("1.开始\n");
printf("2.退出软件\n") ;
printf("请选择:\n");
scanf("%d",&e);
if(e==1){
printf("请选择生成题目的数量:\n");
scanf("%d",&f);
srand((unsigned)time(NULL));
for(int g=0;g<f;g++)
{
n=rand()%4;
if(n==0){i='+';}
if(n==1){i='-';}
if(n==2){i='*';}
if(n==3){i='/';}
a=rand()%10+1;
b=rand()%10+1;
c=rand()%10+1;
d=rand()%10+1;
m=rand()%2;
if(m==0){printf("%d%c%d=\n",a,i,b);}
else if(m==1){
if(a<=b&&c<=d)printf("%d/%d%c%d/%d=\n",a,b,i,c,d);
else if(a>b&&c>d) printf("%d/%d%c%d/%d=\n",b,a,i,d,c);
else if(a<=b&&c>d) printf("%d/%d%c%d/%d=\n",a,b,i,d,c);
else if(a>b&&c<=d) printf("%d/%d%c%d/%d=\n",b,a,i,c,d);
}
}
}
if(e==2){
exit(0);
return 0;
}
}
程序测试:
PSP:
PSP2.1 |
Personal Software Process Stages |
Time (h) Senior Student |
Time (h) |
Planning |
计划 |
3 |
3 |
· Estimate |
估计这个任务需要多少时间 |
80 |
100 |
Development |
开发 |
30 |
40 |
· Analysis |
需求分析 (包括学习新技术) |
6 |
10 |
· Design Spec |
生成设计文档 |
0 |
0 |
· Design Review |
设计复审 |
0 |
0 |
· Coding Standard |
代码规范 |
3 |
3 |
· Design |
具体设计 |
30 |
40 |
· Coding |
具体编码 |
40 |
60 |
· Code Review |
代码复审 |
5 |
10 |
· Test |
测试(自我测试,修改代码,提交修改) |
10 |
10 |
Reporting |
报告 |
5 |
5 |
· |
测试报告 |
3 |
2 |
· |
计算工作量 |
2 |
1 |
· |
并提出过程改进计划 |
1 |
3 |
小结:
动手能力有待加强,对于C++语言还是不熟练,需要大量依靠网络资料。对于软件设计,应该先设计然后在进行代码的书写。