1.需求分析
该程序的存在利用程序随机生成四则运算,目的是增加出题人的效率,简化出题流程。
2. 功能设计
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
(5)是否包含乘法和除法
(6)新增了可以控制计算结果的功能
(7)新增了可判断运算结果是否存在负数的功能
3.设计实现
我使用了多层的FOR语句进行嵌套来实现判断,误操作处理以及输出题目;IF语句进行对各项要求的判断,判断是否存在负数,结果是否超过预期值,以及生成题目是否符合要求。
4. 测试运行
5. 代码片段
下面展示的是程序可控制的参数:1、共有多少道题目。2、运算结果不超过多少。3、有无乘除法。4、运算结果是否为负数。
printf("输入题目总数----");
scanf("%d",&x);
printf("输入结果不超过多少----");
scanf("%d",&result);
for(;y!=1&&y!=2;)
{
printf("有无乘除,有则输入1否则输入2----");
scanf("%d",&y);
}
for(;fushu!=1&&fushu!=2;)
{
printf("计算结果有无负数,有则输入1否则输入2----");
scanf("%d",&fushu);
}
下面是判断是否存在重复算式以及除法的分母是否为0,以及是否超出规定范围。
case 2://生成除法算式 { for(q=0;q<p;q++)//判断是否有重复算式 { if(A[q]==a&&B[q]==b) break; } if(q==p&&b!=0)//成立则代表数组中并未出现重复算式 ,并且分母不为0 { E[p]=a; F[p]=b; p++; if(fushu==1)//判断是否允许运算结果为负 { if(a/b<result)//判断算式结果是否超出规定范围 printf("%d/%d=\n",a,b,i++); } if(fushu==2) { if(a/b<result&&a/b>=0) printf("%d/%d=\n",a,b,i++); } } break; }
下面是控制生成随机数字组成题目
a=rand()%100;//随机生成数字 b=rand()%100; if(y==1)//控制是否带有乘除法 mode=rand()%4; else mode=rand()%2;
6.总结如何使代码模块化
任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序设计主要强调的是程序的易读性。
1、使用语言中的顺序、选择,有限的基本控制结构表示程序逻辑。
2、选用结构中只准许有一个入口和一个出口。
3、程序语句只有一个入口和一个出口。
4、复杂结构应该用基本控制结构进行组合嵌套来实现。
5、语言中没有的控制结构,可用一段等价的程序段实现,但要求该段程序在整个系统中应前后一致。
7.PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 10 | 10 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 10 |
Development | 开发 | 90 | 150 |
·· Analysis | 需求分析 (包括学习新技术) | 5 | 5 |
· Design Spec | · 生成设计文档 | 5 | 5 |
· Design Review | · 设计复审 (和同事审核设计文档) | 5 | 5 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
· Design | 具体设计 | 10 | 10 |
· Coding | 具体编码 | 30 | 20 |
· Code Review | · 代码复审 | 10 | 10 |
· Test | · 测试(自我测试,修改代码,提交修改) | 20 | 90 |
Reporting | 报告 | 40 | 40 |
·· Test Report | · 测试报告 | 10 | 20 |
· Size Measurement | 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 10 | 10 |