已知C源程序如下: /*Input today’s date,output tomorrow’s date * / /* version 2 * / #include<stdio. h> struct ydate { int

admin2010-06-15  30

问题 已知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,3l,31,30,31,30,31};
   if(1eap(d)&&d. month==2)
   day=29;
   else
   day=daytabEd. 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.%",&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\n",
   tomorrow. year,tomorrow. month,tomorrow. day);
   }
   (1) 画出程序中所有函数的控制流程图;
   (2) 设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句或分支覆盖率无法达到100%,需说明为什么。

选项

答案函数leap的流程图如下: [*] [*] 本题的程序用来打印输入日期的第二天日期,只要根据程序中的判断语句设计出相关的测试用例,就能使得所有函数的语句覆盖率和分支覆盖率均能达到100%。 为了满足leap函数的语句覆盖率和分支覆盖率均能达到100%,应当设置两个测试用例,使得一个是闰年,一个不是,在这里可以取2008年和2007年。 由于numdays函数的判定语句是对leap的函数值进行判定,满足了leap的覆盖率要求,就能够满足numdays的覆盖率要求。 对于main函数中的while语句,根据流程图,先使判断部分为1,然后为0,这样就可以达到覆盖要求。对于while语句之后的if…else if…else语句,只要能够使每个分支都执行一遍,就能达到覆盖要求。 根据以上分析,设计测试用例如下: [*] 注意,这里的第1、2个用例使得leap函数中的retlarn 1和return 0都能执行一遍,同时nutndays函数中的if…else结构两个分支也都能得到执行;第1个用例也能够使while循环体能够得到执行;第2、3、4用例三个测试用例刚好使main中的if…else if…else-三个分支都执行一遍。

解析
转载请注明原文地址:https://kaotiyun.com/show/EwNZ777K
0

相关试题推荐
最新回复(0)