问答题
已知检查括号匹配及注释、字符串处理的C源程序如下:
#include<stdio.h>
int brace,brack,paren;
void in_quote(int c);
void in_comment(void);
void search(int c);
/*rudimentary syntax checKer for C program*/
int main()
{
int c;
extern int brace,brack,paren;
while((c=getchar())!=EOF){
if(c=='/'){
if((c=getchar())=='*')
in_comment(); /*inside comment*/
else
search(C) ;
}else if(c=='/"||c=="")
in_quote(c); /*inside quote*/
else
search(c);
if(brace<0){ /*output errors*/
printf("Unbalanced braces/n");
brace=0;
}else if(brack<0){
printf("Unbalanced brackets/n");
brack=0;
}else if(paren<0){
printf("Unbalanced parentheses/n");
paren=0;
}
}
if(brace>0) /*output errors*/
printf("Unbalanced braces/n");
if(brack>0)
printf("Unbalanced brackets/n");
if(paren>0)
printf("Unbalanced parentheses/n");
return 0;
}
/*search:search for rudimentary syntax errors*/
void search(int c)
{
extern int brace,brack,paren;
if(c=='{')
++brace;
else if(c=='}')
--brace;
else if(c=='[')
++brack;
else if(c==']')
--brack;
else if(c=='(')
++paren;
else if(c==')')
--paren;
}
/*in_comment:inside of a valid comment*/
void in_comment(void)
{
int c,d;
c=getchar();
d=getchar(); /*curr character*/
while(c!='*'||d!='/'){ /*search for end*/
c=d;
d=getchar();
}
}
/*in_quote:inside quote*/
void in_quote(int c)
{
int d;
while((d=getchar())! =c) /*search end quote*/
if(d=='//')
getchar(); /*ignore escape seq*/
}
问答题
画出程序中main函数的控制流程图;
【正确答案】
【答案解析】
问答题
设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句覆盖率或分支覆盖率无法达到100%,需说明为什么。
【正确答案】测试用例:
①依次输入:c==EOF
②依次输入:c=='/',c=='*',c=='*',d=='/'
③依次输入:c=='/',c=='*',c=='*',d=='{',d=='/'
④依次输入:c=='/',c=='*',c=='/',d=='/',d=='/'
⑤依次输入:c=='/',c=='/'
⑥依次输入:c=='/',c=='{'
⑦依次输入:c=='/',c=='}'
⑧依次输入:c=='/',c=='['
⑨依次输入:c=='/',c==']'
⑩依次输入:c=='/',c=='('
(11)依次输入:c=='/',c==')'
(12)依次输入:c=='/',d=='/'
(13)依次输入:c=='/',d=='*'
(14)依次输入:c=='/',d=='//'
(15)依次输入:c=="",d=='/'
(16)依次输入:c=="",d=='*'
(17)依次输入:c=="",d=='//'
(18)依次输入:c=='{'
(19)依次输入:c=='}'
(20)依次输入:c=='['
(21)依次输入:c==']'
(22)依次输入:c=='('
(23)依次输入:c=='//'
该程序的语句覆盖率和分支覆盖率无法达到100%。
因为该程序中有好几个判断语句,对于有的判断语句,若取真,则取假无法执行;若取假,则取真无法执行。所以,语句覆盖率和分支覆盖率无法达到100%。
【答案解析】