、如以下程序流程所示,该程序最多输入50个学生成绩值,以-1作为输入结束标志,计算其中有效的学生分数的个数、总分及平均分。 (1)导出该程序流程图的控制流图。 (2)计算环形复杂度 (3)确定基本路径集合 (4)为每条基本路径设计测试用例 (5)使用任意语言实现该程序并完成测试
时间: 2024-10-20 19:09:14 浏览: 112
(1)控制流图通常包括开始点(Start)、判断节点(如输入是否等于-1)、处理分支(比如读取成绩、计数、累加总分等)、循环结构(用于处理前50次输入)以及结束点(End)。每个步骤之间通过箭头相连,如果遇到条件判断,则会有两条或多条路径。输入-1后的路径会离开主循环。
(2)环形复杂度(Loop Invariant Complexity,简称LICM)是对算法中每个循环体中代码复杂性的评估。在这个程序中,由于只有一个循环,其LICM取决于处理单个成绩值的操作。假设每次操作的时间复杂度为O(1),则环形复杂度就是O(1)。
(3)基本路径集合是指那些不包含任何条件分支的路径。在这种情况下,我们有基本路径:开始 -> 输入一个成绩 -> 计算次数、总分 -> 如果未达到50次,则返回步骤2 -> 否则,跳到结束。每输入一次有效成绩,就增加一条基本路径。
(4)针对每条基本路径设计测试用例:
- 测试用例1:输入第一个学生的正常成绩,检查计数、总分是否正确。
- 测试用例2:连续输入50个正整数的成绩,验证累计总分和计数。
- 测试用例3:输入-1,确认程序能停止,并正确统计有效学生的数量和总分。
- 测试用例4:混合输入正常成绩和-1,确保程序能够正确过滤并计算。
(5)以下是使用Python简单实现的示例:
```python
def calculate_scores():
total_score = 0
valid_count = 0
while True:
score = input("请输入学生的成绩(输入-1结束):")
if score == '-1':
break
try:
score = int(score)
total_score += score
valid_count += 1
except ValueError:
print("无效输入,请输入数字。")
average_score = total_score / valid_count if valid_count > 0 else "无法计算"
print(f"有效学生数量:{valid_count}")
print(f"总分:{total_score}")
print(f"平均分:{average_score}")
calculate_scores()
```
请运行此代码并按照上述测试用例验证程序功能。
阅读全文