2023年软件工程第三次作业-结对项目第二阶段

扩展要求:题目含有可嵌套绝对值符号

作业完成人:熊丰(D23382405),周帆(D23382401)

目录:

1.代码仓库地址 

SZYS: 四则运算 (gitee.com)

2.成员分工

熊丰最主要完成四则运算结对项目的代码编程,周帆编制PSP表格,并对表格进行分析,同时完成相对应的学习日志。

3.PSP表格与分析

PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

80

60

· Estimate

· 估计这个任务需要多少时间

 80

 60

Development

开发

 240

 210

· Analysis

· 需求分析 (包括学习新技术)

 40

 30

· Design Spec

· 生成设计文档

 30

 30

· Design Review

· 设计复审

 30

 30

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 30

 20

· Design

· 具体设计

 40

 40

· Coding

· 具体编码

 40

 30

· Code Review

· 代码复审

 20

 20

· Test

· 测试(自我测试,修改代码,提交修改)

 10

 10

Reporting

报告

 100

 90

· Test Repor

· 测试报告

 40

 30

· Size Measurement

· 计算工作量

 20

 20

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 40

 40

合计

 420

 360

分析:在Planning阶段,估计耗时为80分钟,实际耗时为60分钟。估计值与真实值之间存在20分钟的差异。因为在实际执行过程中,一些计划中的任务完成得更加高效,在估计时未考虑到某些影响因素。

在Development阶段,估计耗时为240分钟,实际耗时为210分钟。估计值与真实值之间存在30分钟的差异。因为在开发过程中,某些任务完成得更加高效,或者在估计时未考虑到某些复杂性。

在Reporting阶段,估计耗时为100分钟,实际耗时为90分钟。估计值与真实值之间存在10分钟的差异。这个差异可能是由于在实际执行过程中,一些报告任务完成得更加高效。

总体来说,根据给定的PSP表格,估计值与真实值之间存在一些差异。这些差异可能是由于估计时未考虑到某些因素,或者在实际执行过程中出现了一些意外情况。为了提高估计的准确性,可以在以后的项目中进行经验总结,并根据实际情况进行调整和改进。

4.设计实现过程

 这段代码实现了一个随机生成带有绝对值运算的数学题目的程序,即可以实现单绝对值运算,也可以实现双绝对值运算,下面是代码的设计实现过程说明:

  1. 引入必要的头文件:代码中使用了stdio.h、stdlib.h、time.h和math.h头文件。
  2. 定义随机生成一个-100到100之间的整数的函数randomInt():该函数使用rand()函数生成一个0到200之间的随机整数,然后通过取余并减去100的方式将其范围限制在-100到100之间。
  3. 定义随机生成运算符的函数randomOperator():该函数定义了一个包含四个运算符的字符数组operators[],然后使用rand()函数生成0到3之间的随机整数作为索引,从运算符数组中取出对应的运算符返回。
  4. 定义计算表达式值的函数calculate():该函数接受两个操作数和一个运算符作为参数,根据运算符的类型进行相应的运算并返回结果。
  5. 定义随机生成绝对值表达式的函数randomAbsoluteValue():该函数接受一个整数作为参数,并使用sprintf()函数将该整数插入到一个包含绝对值符号的字符串中,然后返回该字符串。
  6. 定义计算绝对值表达式值的函数calculateAbsoluteValue():该函数接受一个绝对值表达式字符串作为参数,使用sscanf()函数从字符串中提取出整数,并使用fabs()函数计算该整数的绝对值并返回。
  7. 在main()函数中,首先使用srand()函数设置随机数种子为当前时间,以确保每次运行程序时生成的随机数序列不同。
  8. 接着,程序要求用户输入题目数量,并使用scanf()函数读取用户输入的整数。如果输入无效(即不是一个整数),则输出错误信息并返回1。
  9. 使用while循环生成题目,循环条件是生成的题目数量小于用户输入的题目数量。
  10. 在循环中,首先使用randomInt()函数生成两个随机整数num1和num2,然后使用randomOperator()函数分别生成两个随机运算符op1和op2。
  11. 调用calculate()函数计算表达式num1 op1 num2的结果,并将结果保存在result变量中。
  12. 判断结果是否在0到100之间,并且计算表达式num1 op1 num2和num1 op2 num2的结果是否相等。如果满足这两个条件,则继续执行下面的代码,否则重新生成题目。
  13. 使用randomAbsoluteValue()函数分别生成两个随机的绝对值表达式absValue1和absValue2。
  14. 调用calculateAbsoluteValue()函数计算绝对值表达式的值,并将结果保存在absResult1和absResult2变量中。
  15. 使用printf()函数输出带有独立的绝对值运算的题目,题目格式为"|num1 op1 absValue1| op2 |num2 op2 absValue2| = ?"。
  16. 生成的题目数量加1。
  17. 循环继续,直到生成的题目数量达到用户输入的题目数量。
  18. main()函数返回0,表示程序成功执行完毕。

5.单元测试

 在本程序中,可以进行以下单元测试:

  1. 编译代码:将代码保存为一个名为absolute_value_calculator.c的文件,然后使用C编译器(如gcc)编译代码。
  2. 运行程序:执行编译后生成的可执行文件。
  3. 输入题目数量:根据程序提示,输入一个整数作为题目数量。
  4. 观察输出:程序会生成指定数量的带有独立绝对值运算的数学题目,并输出到控制台。
  5. 检查结果:检查输出的题目是否符合预期,并验证答案是否正确。

编译代码及运行程序:

测试程序及检查输出

6.学习日志与体会

学习日志 10.25– 10.28

学习时段:19:00 - 21:30

学习内容:

(1)确定代码实现要求;

(2)学习了如何在代码中加入题目含有可嵌套绝对值符号;

(3)对程序的性能进行分析

通过上述代码的编写与测试,收获了以下几点:

  1. 随机数生成:通过使用rand()函数和srand()函数结合时间作为随机数种子,可以生成不同的随机数序列。
  2. 字符串处理:使用sprintf()函数将整数转换为字符串,并使用sscanf()函数从字符串中提取整数。
  3. 条件判断和循环控制:通过使用if语句和while循环,可以根据条件判断来控制程序的流程。
  4. 函数的使用:将代码模块化,将一些功能相似的代码封装成函数,提高代码的可读性和复用性。
  5. 错误处理:通过检查用户输入的有效性,可以避免程序崩溃或产生错误的结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值