问答题
针对以下C语言程序,请按要求回答问题。
以下是一个用来求解一元二次方程的C语言程序:
1 main()
2 {
3 float a, b, c, x1, x2,
delta;
4 scanf("% f % f % f", &a, &b,
&c);
5 if (a!=0)
6
{
7 delta=b*b-4*a*c;
8 if(delta>0)
9 {
10 x1=(-b+sqrt(delta))/(2*a);
11
x2=(-b-sqrt(delta))/(2*a);
12 printf("x1=% f, x2=%
f/n", x1, x2);
13 }
14
else
15 {
16
if(delta==0)
17 {
18
x1=-b/(2*a);
19 printf("x1=% f/n", x1);
20 }
21 else
22 {
23 printf("no real
solution/n");
24 }
25
}
26 }
27
}
问答题
画出main()函数的控制流图。
【正确答案】根据程序的源代码,容易画出对应的控制流图,如下图所示(其中圈中的数字代表的是语句的行号)。
[*]
控制流图
【答案解析】[解析] 首先根据程序的源代码,画出控制流图。然后通过控制流图可以计算出该程序的复杂度,找出所有的独立路径,根据基本路径测试法设计测试用例。
问答题
采用基本路径测试法设计一组测试用例,保证每个基本独立路径都至少执行一次。
【正确答案】第一步,根据上述控制流图计算该程序的环路复杂性。
由上图可以看出,判定结点数为3,边数为9,结点总数为7,故
V(G)=9-7+2=4
或V(G)=3+1=4
或V(G)=4(图中的区域数)
第二步,根据环路复杂度为4,可确定4条基本独立路径。
Path1:5—27
Path2:5—8—26—27
Path3:5—8—16—18—26—27
Path4:5—8—16—23—26—27
第三步,设计测试用例。
根据上面4条基本独立路径,可以设计测试用例如下:
测试用例1:
输入数据:a=0,b=1,c=1
预期输出结果:程序结束(这时方程不是二元一次方程)
测试用例2:
输入数据:a=1,b=3,c=2
预期输出结果:x1=-1,x2=-2
测试用例3:
输入数据:a=1,b=-2,c=1
预期输出结果:x1=1
测试用例4:
输入数据:a=1,b=1,c=1
预期输出结果:no real solution
【答案解析】