试题与答案

已知C源程序如下: /*Input today’s date,output tomo

题型:问答题

题目:


已知C源程序如下:
/*Input today’s date,output tomorrow’s date*/
/*version 2*/
#include<stdio.h>
struct ydate
{ int day;int month;int year;};
int leap(struct ydate d)
{ if((d.year%4==0&&d.year%100!=0)||(d.year%400==0))
    return 1;
   else
    return 0;
}
int numdays(struct ydate d)
{ int day;
   static int daytab[]=
    {31,28,31,30,31,30,31,31,30,31,30,31);
   if(leap(d)&&d.month==2)
    day=29;
   else
    day=daytab[d.month-1];
   return day;
}
int main(void)
{ struct ydate today,tomorrow;
   printf("format of date is:year,month,day 输入的年、月、日之间应用逗号隔开\n");
   printf("today is:");
   scanf("%d,%d,%d",&today.year,&today.month,&today.day);
   while(0>=today.year
|| today.year>65535 || 0>=today.month || today.month>12) ||
0>=today.day || today.day>numdays(today))
   {  printf("input date error!reenter the day!\n");
printf("today is:");
scanf("%d,%d,%d",&today.year,&today.month,&today.day);
}
if(today.day!=numdays(today))
{ tomorrow.year=today.year;
tomorrow.month=today.month;
tomorrow.day=today.day+1;
}
else if(today.month==12)
{ tomorrow.year=today.year+1;
tomorrow.month=1;
tomorrow.day=1;
}
else
{ tomorrow.year=today.year;
tomorrow.month=today.month+1;
tomorrow.day=1;
}
printf("tomorrow is:%d,%d,%d\n\",
tomorrow.year,tomorrow.month,tomorrow.day);
}

设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句或分支覆盖率无法达到100%.需说明为什么。

答案:

参考答案:

解析:根据以上分析,设计测试用例如下:

用例
编号







leap

numdays

while
if…else if
…else

输出结果
120082301291error
2200712310310month=122008.1.1

3

6

10

31

0

31

0
today=
numdays

6.11.1

4

804

4

17

1

30

0
today!=
numdays

804.4.18
注意,这里的第1、2个用例使得leap函数中的return 1和return 0都能执行一遍,同时numdays函数中的if…else结构两个分支也都能得到执行;第1个用例也能够使while循环体得到执行;第2、3、4用例三个测试用例刚好使main中的if…else if…else的三个分支都执行一遍。

试题推荐
题型:单项选择题

下列有关国有独资公司的表述,不符合法律规定的是( )。

A.国有独资公司章程可以由公司董事会依法制定,并报国有资产监督管理机构批准
B.国有独资公司设立董事会,董事会成员全部由国家授权投资的机构或者国家授权的部门委派
C.国有独资公司不设股东会,由国有资产监督管理机构行使股东会职权
D.国有独资公司监事会成员不得少于5人,其中职工代表的比例不得低于1/3

查看答案
微信公众账号搜索答案