1.测试如下程序段:main(){inti=1;n1=n2=0;floatsum=0;floataverage;floatscore[100];while(score[i]!=-1&&n2<50){n2=n2+1;if(score[i]>0&&score[i]<100){n1=n1+1;sum=sum+score[i];}i=i+1;}if(n1>0)average=sum/n1;elseaverage=-1;printf(“n1=%d,sum=%f,average=%f\n”,n1,sum,average);}要求:①画出这段代码的程序流程图和控制流程图;②计算环路复杂度;③列出独立路径;④设计测试用例
时间: 2023-12-04 12:03:04 浏览: 30
好的,我来依次回答您的问题:
1. 以下是该程序段的程序流程图和控制流程图:
程序流程图:
```
┌───┐
│ i=1 │
└───┘
│
│
▼
┌───────┐
│ n1=n2=0 │
└───────┘
│
│
▼
┌──────────┐
│ sum=0, i=1 │
└──────────┘
│
│
▼
┌──────┐
│ score[i] != -1 && n2 < 50 │
└──────┘
│
│
▼
┌──────────────────┐
│ n2 = n2 + 1, i = i + 1 │
└──────────────────┘
│
│
▼
┌───────────────┐
│ score[i] > 0 && score[i] < 100 │
└───────────────┘
│
│
▼
┌─────────────┐
│ n1 = n1 + 1 │
└─────────────┘
│
│
▼
┌───────────────┐
│ sum = sum + score[i] │
└───────────────┘
│
│
▼
┌─────────────────────┐
│ if (n1 > 0) average = sum / n1; else average = -1; │
└─────────────────────┘
│
│
▼
┌──────────────────────┐
│ printf(“n1=%d,sum=%f,average=%f\n”, n1, sum, average); │
└──────────────────────┘
```
控制流程图:
```
┌───┐
│ i=1 │
└───┘
│
│
▼
┌───────┐
│ n1=n2=0 │
└───────┘
│
│
▼
┌──────────┐
│ sum=0, i=1 │
└──────────┘
│
│
▼
┌──────┐
│ score[i] != -1 && n2 < 50 │
└──────┘
│ │
│ │
│ │
│ │
│ │
│ ▼
│ ┌─────────────────────┐
│ │ score[i] > 0 && score[i] < 100 │
│ └─────────────────────┘
│ │
│ │
│ ▼
│ ┌─────────────┐
│ │ n1 = n1 + 1 │
│ └─────────────┘
│ │
│ │
│ ▼
│ ┌───────────────┐
│ │ sum = sum + score[i] │
│ └───────────────┘
│ │
│ │
│ ▼
│ ┌─────────────────────┐
│ │ if (n1 > 0) average = sum / n1; else average = -1; │
│ └─────────────────────┘
│ │
│ │
│ ▼
│ ┌──────────────────────┐
│ │ printf(“n1=%d,sum=%f,average=%f\n”, n1, sum, average); │
│ └──────────────────────┘
│ │
│ │
│ ▼
│ ┌─────────────────────┐
│ │ n2 = n2 + 1, i = i + 1 │
│ └─────────────────────┘
│ │
│ │
│ ▼
└─────┘
```
2. 环路复杂度为3。
3. 独立路径有以下三条:
- 1 -> 2 -> 3
- 4 -> 7 -> 8 -> 9 -> 4
- 10 -> 11 -> 12 -> 13 -> 14
4. 根据独立路径设计测试用例:
- 输入多个小于0或大于100的分数,以-1结尾,预期输出:n1=0, sum=0, average=-1
- 输入多个大于0且小于等于100的分数,以-1结尾,其中有一些非法分数,预期输出:n1=有效分数个数, sum=有效分数之和, average=有效分数平均值
- 输入多个大于0且小于等于100的分数,以-1结尾,其中所有分数均为合法分数,预期输出:n1=有效分数个数, sum=有效分数之和, average=有效分数平均值