问答题 已知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);


问答题 画出程序中所有函数的控制流程图;
【正确答案】函数leap的流程图如下:

函数numdays的流程图如下:

main函数的流程图如下(语句的具体内容已略去):
【答案解析】
问答题 设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句或分支覆盖率无法达到100%.需说明为什么。
【正确答案】根据以上分析,设计测试用例如下:
用例
编号







leap

numdays

while
if…else if
…else

输出结果
1
2008
2
30
1
29
1
error
2
2007
12
31
0
31
0
month=12
2008.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的三个分支都执行一遍。
【答案解析】