阅读下列C程序,回答下列问题。 [C程序] int GetMaxDay( int year, int month ) { int maxday = 0; //1 if ( month >= 1 //8 else //9 maxday = 28;} else //10 maxday = 29; } else //11 maxday = 28; } else{ //12 if (month==4||month==6||month==9||month==11) //13, 14, 15, 16 maxday = 30; //17 else //18 maxday = 31; } } return maxday; //19 }3.1、请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。(6分)3.2、请画出上述程序的控制流图,并计算其环路复杂度V(G)。(9分)3.3、请给出问题2中控制流图的线性无关路径。(5分)
阅读下列C程序,回答下列问题。 [C程序] int GetMaxDay( int year, int month ) { int maxday = 0; //1 if ( month >= 1 && month <= 12 ) { //2, 3 if ( month == 2 ) { //4 if ( year % 4 == 0 ) { //5 if ( year % 100 == 0 ) { //6 if ( year % 400 == 0 ) //7 maxday=29; //8 else //9 maxday = 28;} else //10 maxday = 29; } else //11 maxday = 28; } else{ //12 if (month==4||month==6||month==9||month==11) //13, 14, 15, 16 maxday = 30; //17 else //18 maxday = 31; } } return maxday; //19 }3.1、请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。(6分)3.2、请画出上述程序的控制流图,并计算其环路复杂度V(G)。(9分)3.3、请给出问题2中控制流图的线性无关路径。(5分)
参考解析
解析:3.1
3.2、控制流图
环路复杂度V(G)=11 3.3、线性无关路径: 1.1-2-19 2.1-2-3-19 3.1-2-3-4-12-13-14-15-16-18-19 4.1-2-3-4-12-13-14-15-16-17-19 5.1-2-3-4-12-13-14-15-17-19 6.1-2-3-4-12-13-14-17-19 7.1-2-3-4-12-13-17-19 8.1-2-3-4-5-11-19 9.1-2-3-4-5-6-10-19 10.1-2-3-4-5-6-7-9-19 11.1-2-3-4-5-6-7-8-19
【解析】
本题考查白盒测试方法及应用。 第一小题考查白盒测试用例设计方法之判定覆盖法。 判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有6个判定,所以满足判定覆盖一共需要12个逻辑条件。 第二小题考查白盒测试用例设计方法之基本路径法。 涉及到的知识点包括根据代码绘制控制流图、计算环路复杂度。 控制流图是描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套判断。本题程序中,if(month>=1 && month<=12)这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。同理,if(month==4||month=6||month==9||month=11)这条判断语句中的判定由4个条件组成,因此在画控制流图的时候需要拆开成4条判断语句。这里需要注意的是,如果复合条件之间是“&&”的关系,则拆开后反应在控制流图上是沿左子树往下,反之如果条件之间是“||”的关系,则在控制流图上是沿右子树往下。 程序的环路复杂度等于控制流图中判定节点的个数加1,本题控制流图中判定节点个数为10,所以V(G)=11。 第三小题考查白盒测试用例设计方法中的基本路径法。 涉及到的知识点是根据控制流图和环路复杂度给出线性无关路径。 线性无关路径是指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数,所以本题中应该有11条线性无关路径。
3.2、控制流图
环路复杂度V(G)=11 3.3、线性无关路径: 1.1-2-19 2.1-2-3-19 3.1-2-3-4-12-13-14-15-16-18-19 4.1-2-3-4-12-13-14-15-16-17-19 5.1-2-3-4-12-13-14-15-17-19 6.1-2-3-4-12-13-14-17-19 7.1-2-3-4-12-13-17-19 8.1-2-3-4-5-11-19 9.1-2-3-4-5-6-10-19 10.1-2-3-4-5-6-7-9-19 11.1-2-3-4-5-6-7-8-19
【解析】
本题考查白盒测试方法及应用。 第一小题考查白盒测试用例设计方法之判定覆盖法。 判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有6个判定,所以满足判定覆盖一共需要12个逻辑条件。 第二小题考查白盒测试用例设计方法之基本路径法。 涉及到的知识点包括根据代码绘制控制流图、计算环路复杂度。 控制流图是描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套判断。本题程序中,if(month>=1 && month<=12)这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。同理,if(month==4||month=6||month==9||month=11)这条判断语句中的判定由4个条件组成,因此在画控制流图的时候需要拆开成4条判断语句。这里需要注意的是,如果复合条件之间是“&&”的关系,则拆开后反应在控制流图上是沿左子树往下,反之如果条件之间是“||”的关系,则在控制流图上是沿右子树往下。 程序的环路复杂度等于控制流图中判定节点的个数加1,本题控制流图中判定节点个数为10,所以V(G)=11。 第三小题考查白盒测试用例设计方法中的基本路径法。 涉及到的知识点是根据控制流图和环路复杂度给出线性无关路径。 线性无关路径是指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数,所以本题中应该有11条线性无关路径。
相关考题:
有以下程序: Class Date { public: Date(int y,int m,mt d); { year=y; month=m; day=d; } Date(int y=2000) { year=y; month=10; day=1; } Date(Date D) { year=d.year; month=d.month; day=d.day; } Void prinA.2B.3C.4D.5
在下面程序的横线处填上______,使程序执行后的输出结果为1/2005。 include using nam 在下面程序的横线处填上______,使程序执行后的输出结果为1/2005。include<iostream.h>using namespace std;class Date{Public:Date(int m=1,int y=0): month(m),year(y){}void Print(){cout<<month<<"/"<<year<<end1;}______operator+(const Dated1,const Dated2);private:int month, year;};Date operator+(const Dated1,const Dated2){int year,month;year=d1.year+d2.year;month=d1.month+d2.month;year+=(month-1)/12;month=(month-1)%12+1;return Date(month,year);}void main(){Date d1(3,2004),d2,d3(10);d2=d3+d1;d2.Print();}
下列程序的运行结果是()。 include main() {stmct date {int year,month,day; }today; 下列程序的运行结果是( )。#include<stdio.h>main(){stmct date{int year,month,day;}today;primf("%d\n",sizeof(struct date));}A.8B.6C.10D.12
下列程序的运行结果为() include main() {struc tdate {int year,month,day; )today; 下列程序的运行结果为( )#include<stdio.h>main(){ struc tdate{int year,month,day;)today;printf("%d\n",sizeof(struct date));}A.8B.6C.10D.12
有以下程序:class Date{public:Date(int y,int m,int d);{year=y;month=mday=d;}Date(int y=2000){year=y;month=10;day=1;}Date(Date d){year=d.year;month=d.month;day=d.day;}void print( ){cout<<year<<"."<<month<<"."<<day<<endl;}private:int year,month,day;};Date fun(Date d){Date temp;temp=d;return temp;}int main( ){Date datel(2000,1,1),date2(0,0,0);Date date3(datel);date2=fun(date3);return 0;}程序执行时,Date类的拷贝构造函数被调用的次数是A.2B.3C.4D.5
阅读下列说明,回答问题1至问题3。【说明】以下代码由C语言书写,能根据指定的年、月计算当月所含天数。int GetMaxDay( int year, int month ){int maxday = 0;if ( month >= 1 month <= 12 ){if ( month == 2 ){if ( year % 4 == 0 ){if ( year % 100 == 0 ){if ( year % 400 == 0 )maxday = 29;elsemaxday = 28;}elsemaxday = 29;}elsemaxday = 28;}else{if ( month == 4 || month == 6 || month == 9 || month == || )maxday = 30;elsemaxday = 31;}}return maxday; }请画出以上代码的控制流图。请计算上述控制流图的环路复杂度V(G)。假设year的取值范围是1000<year<2001,请使用基本路径测试法为变量year、 month设计测试用例(写出year取值、month取值、maxday预期结果),使之满足基本路径覆盖要求。请帮忙给出每个问题的正确答案和分析,谢谢!
阅读下面程序: include int fun2(int m) { if(m%3==0) return 1; else return 0; } 阅读下面程序:include <iostream.h>int fun2(int m){if(m%3==0)return 1;elsereturn 0;}void fun1(int m, int s){int i;for (i=1; i<m; i++)if(fun2(i))S=S*i;}void main(){int n=9, s=2;fun1(n, s);cout<<s<<end1;}该程序的运行结果是【 】。
阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。【说明】设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。在Date类中设计如下重载运算符函数:Date operator + (int days) : 返回某日期加上天数得到的日期。Date operator - (int days) : 返回某日期减去天数得到的日期。int operator - (Dateb): 返回两日期相差的天数。【程序】include<iostream.h>int day tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};//day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date{int year, month, day //年,月,日int leap(int); //判断是否闰年int dton(Date)Date ntod(int)public:Date() { }Date (int y, int mint d) I year = y; month = m; day = d;}void setday(intd){day = d;}void setmonth(int m) {month = m;}void setyear(int y) {year =y;}int getday() {return day;}int getmonth() {return month:}int getyear() {return yea;}Date operator + (int days) //+运算符重载函数{static Date date;int number =(1)date = ntod(number)return date}Date operator - (int days) //-运算符重载函数{staffs Date date;int number=(2);number - = days;date = ntod(number)return date;}int operator - (Date b) //-运算符重载函数{int days=(3);return days;}void disp(){cout<<year<<"."<<month<<". "<<day<<endl;}};int Date: :leap( int year)if((4)) //是闰年return 1; //不是闰年elsereturn0:}int Date:: dton( Date d) //求从公元0年0月0日到d日期的天数{inty,m,days =0;for(y=1;y<=d. year;y++)if((5))days+ =366; //闰年时加366天else days + = 365; //非闰年时加365天for(m =0;m<d. month-1;m++)if((6))days += day_tab[1] [m];elsedays +=day_tab[0] [m];days + = d. day;return days;}Date Date::ntod(intn) //将从元0年0月0日的天数转换成日期{int y=1,m = 1,d,rest = n,lp;while(1){ if(leap(y))if(rest<= 366) break;else rest - = 366;else //非闰年if(rest = 365 ) break;else rest-=365;
在下面程序的画线处填上适当的内容,使程序执行后的输出结果为1/2005。 include usin 在下面程序的画线处填上适当的内容,使程序执行后的输出结果为1/2005。include <iostream>using namespace std;class Date{public:Date(int m=1,int y=0):month(m),year(y){}void Print( ){cout<<month<<"/"<<year<<endl;}(9) operator+(const Datedl,const Date d2);private:int month,year;};(10) operator+(const Date dl,const Date d2){int year,month;year=d1.year+d2.year;month=d1.month+d2.month;year+=(month-1)/12;month=(month-1)%12+1;return Date(month,year);}void main( ){Date dl(3,2004),d2,d3(10);d2=d3+dl;d2.Print( );}
在下面程序的横线处填上适当的内容,使程序执行后的输出结果果为1/2005。 include using 在下面程序的横线处填上适当的内容,使程序执行后的输出结果果为1/2005。include<iostmam>using namespace std;class Date{public:Date(int m=1,int y=0):month(m),year(y){}void Print(){cout<<month<<"/"<<year<<endl;}operator+(const Dated1.const Date d2);private:int month,year;};operator+(const Dated1,const Date d2){int year,month;year=d1.year+d2.year;month=d1.month+d2.month;year+=(month-1)/12;month=(month-1)%12+1;return Date(month,year);}void main(){Date d1(3,2004),d2,d3(10);d2=d3+d1;d2.Print();}
有以下程序: class Date { public: Date(int y,int m,int D) ; { year =y; month=m; day=d; } Date(int y=2000) { year=y; month=10; day=1; } Date(Date D) { year=d.year; month=d.month; day=d.day; } void print () { cout<<year<<"."<<month<<"."<<day<<end1; } private: int year,month,day; }; Date fun(Date D) { Date temp; temp=d; return temp; } int main() { Date date1(2000,1,1),date2(0,0,0); Date date3(date1); date2=fun(date3); return 0; } 程序执行时,Date类的拷贝构造函数被调用的次数是A.2B.3C.4D.5
下面结构体的定义语句中,不正确的是______。A.structdate { int month; int day; int year; } Struct date datel;B.stmctdate { intmonth; int day; int year; } datel;C.struct { int month; int day; int year; } date 1;D.#define DATE stmct date DATE { int month; int day; int year; }datel;
有以下程序include using namespace std;static int days[]= { 31,28,31,30,31,30,31 有以下程序 #include <iostream> using namespace std; static int days[]= { 31,28,31,30,31,30,31,31,30,31,30,31 }; class date { private: int month, day, year; public: date( int m, int d, int y ) { month = m; day = d; year = y; } date() {} void disp() { cout<<year<<"-"<<month<<"-"<<day<<end1; } date operator+( int day ) { date dt = *this; day+= dt.day; while ( day > days[dt.month - 1 ] ) { day -= days[ dt.month - 1 ]; if ( ++dt.month == 13 ) { dt.month = 1; dt.year++; } } dt.day = day; return dt; }; int main() { date d1( 6, 20, 2004 ), d2; d2: d1 + 20; d2.disp(); return 0; } 执行后的输出结果是A.2004-7-10B.2004-6-20C.2004-7-20D.程序编译时出错
下列程序的输出结果是()。 include int fun(int x) {int a;if(x==0‖x==1) return 3;els 下列程序的输出结果是( )。 #include<stdio.h> int fun(int x) { int a; if(x==0‖x==1) return 3; else a=x-fun(x-2); return a; } void main() { printf("%d",fun(7)); }A.2B.8C.9D.5
有以下程序include usingnamespacestd;static int days []={31,28.31,30,31,30,31,31 有以下程序 #include <iostream> using namespace std; static int days []={31,28.31,30,31,30,31,31,30,31,30,31}; class date { private: int month, day, year: public: date (int m, int d, int y { month = m; day = d; year = y; } date{} {} void disp {) { cout <<year<<" - "<<month<< "- "<<day<<end1; } date operator+(int day) { date dt = *this: day += dt.day; while { day > days[ dt.month - 1 ] ) { day -= tays[ dt.month - 1 ]; if ( ++dt.month == 13 { dt.month = 1; dt.yeare++; } } dr. day = day; return dt; } }; int main() { date d1( 6, 20, 2004 ), d2; d2.= d1 + 20; d2.disp (); return 0; } 执行后的输出结果是A.2004-7-10B.2004-6-20C.2004-7-20D.程序编译时出错
阅读以下说明和C++抖程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】下面程序的功能是计算并输出某年某月的天数。【C++程序】include<iostream>using namespace std;(1) Month{Jan,Feb,Mar,Art,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};class Date{public:Date(int year,Month m_month){(2) =year;if (m_month<Jan‖m_month>Dec) month=Jan;else month=m_month;};~Date(){};bool IsLeapYear(){return ((year%4==0 year%1001!=0)‖year%400==0);};int CaculateDays(){switch( (3) ){case Feb:{if( (4) )return29;e1Se return 28;}case Jan:case Mar:case May:case Jul:case AUg:case Oct:case Dec:retllrn 31;case Apr:case Jun:Case Sep:case Nov:roturu30;}};private:int year;Month month;};void main(){Date day(2000,Feb);tout<<day. (5) ();}
有以下程序:includeusingnamespacestd;staticintdays[]={31,28,31,30,31,30,31,31,30 有以下程序: #include <iostream> using namespace std; static int days[]={ 31,28,31,30,31,30,31,31,30,31,30,31 }; class date { private: int month,day,year; public: date( int m,int d,int y ) { month = m; day = d; year = y; } date() {} void disp() { cout<<year<<"-"<<month<<"-"<<day<<end1; } date operator+( iht day ) { date dt = * this; day += dt.day; while ( day > days[ dt.month - 1 ] ) { day -= days[ dt.month - 1 ]; if ( ++dt.month == 13 ) { dt.month = 1; dt.year++; } } dt.day = day; return dt; } }; int main() { date dl( 6, 20, 2004 ), d2; d2 = dt + 20; d2.disp(); return 0; } 执行后的输出结果是( )。A.2004-7-10B.2004-6-20C.2004-7-20D.程序编译时出错
有以下程序includeusing namespace std;static int days []={31,28,31,30,31,30,3l,3 有以下程序 #include<iostream> using namespace std; static int days []={31,28,31,30,31,30,3l,31,30,31,30,31}; class date { private: int month,day,year; public: date(int m,int d,int y) { month=m; day=d; year=y; } date() {} void disp() { cout<<year<<"-"<<month<<"-"<<day<<end1; } date operator+(int day) { date dt=*this; day+=dt.day; while(day>days[dt.month-1]) { day-=days[dt.month-1]; if(++dt.month==13) { dt.month=1; dt.year++; } } dt.day=day; retrn dt; } }; int main() { date d1(6,20,2004),d2; d2=d1+20; d2.disp(); return 0; } 执行后的输出结果是A.2004-7-10B.2004-6-20C.2004-7-20D.程序编译时出错
阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。【说明】下面程序的功能是计算并输出某年某月的天数,函数IsLeap Year()能够判断是否是闰年。【C++程序】include < iostream >using namespace std;(1) Month {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };class Date {public:Date( int year, Month m_ month) {this→year = year;if( (2) ) month: Jan;else month = m_ month;};~Date(){};bool IsLeap Year( ) {return ((year%4= =0 year% 100 ! =0)|| year%400= =0);};int CaculateDays( ) {switch(m_month ) {case (3) ;{if (4) return 29;else return 28;}case Jan: case Mar: case May: case Jul: case Aug: case Oct: case Dec: return 31;case Apr: case Jun: case Sop: case Nov: return 30;}}private:int year;Month month;};void main( ) {Date day(2000,Feb);cout < <day. (5) ( );}
有以下程序: class Date { public: Date(int y,int m,int d); { year = y; month = m; day = d; } Date(int y = 2000) { year = y; month = 10; day = 1; } Date(Date d) { year = d.year; month = d.month; day = d.day; } void print() { cout<<year<<"."<<month<<"."<<day<<endl; } private: int year,month,day; }; Date fun(Date d) { Date temp; temp = d; resurn temp; } int main () { Date date1 (2000,1,1),date2 (0,0,0); Date date3 (date1); date2 = fun(date3); return 0; } 程序执行时,Date类的拷贝构造函数被调用的次数是A.2B.3C.4D.5
有以下程序: Class Date {public: Date(int y,int m,int d); {year=y; month=m; day=d;} Date(int y=2000) {year=y; month=10; day=1;) Date(Date D) {year=d.year; month=d.month; day=d.day;} void print() {cout<<year<<“.”<<moA.2B.3C.4D.5
阅读下列C程序,回答下列问题。[C程序] int GetMaxDay( int year, intmonth ) { int maxday = 0; //1 if ( month >= 1 //8 else //9 maxday = 28; } else //10 maxday = 29; } else //11 maxday = 28; } else{ //12 if(month==4||month==6||month==9||month==11) //13, 14, 15, 16 maxday = 30; //17 else //18 maxday = 31; } } return maxday; //19 }1、请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。
阅读下列C程序,回答下列问题。[C程序] int GetMaxDay( int year, intmonth ) { int maxday = 0; //1 if ( month >= 1 //8 else //9 maxday = 28; } else //10 maxday = 29; } else //11 maxday = 28; } else{ //12 if(month==4||month==6||month==9||month==11) //13, 14, 15, 16 maxday = 30; //17 else //18 maxday = 31; } } return maxday; //19 }2、请画出上述程序的控制流图,并计算其环路复杂度VG.。
阅读下列C程序,回答下列问题。[C程序] int GetMaxDay( int year, intmonth ) { int maxday = 0; //1 if ( month >= 1 //8 else //9 maxday = 28; } else //10 maxday = 29; } else //11 maxday = 28; } else{ //12 if(month==4||month==6||month==9||month==11) //13, 14, 15, 16 maxday = 30; //17 else //18 maxday = 31; } } return maxday; //19 }3、请给出问题2中控制流图的线性无关路径。
程序: class MyDate{ private int year; private int month; private int day; public MyDate(int year,int month,int day){ this.year=year; this.month=month; this.day=day; } //Override Method } 为了让new MyDate(1980,11,9)==new MyDate(1980,11,9) 返回true,必须在Override Method处覆盖哪个方法?() A、 hashCodeB、 equalsC、 toStringD、 notify
单选题程序: class MyDate{ private int year; private int month; private int day; public MyDate( int year, int month,int day){ this.year=year; this.month=month; this.day=day; } //Override Method } 为了让new MyDate(1980,11,9)==(判断是否相等)new MyDate(1980,11,9) 返 回true,必须在Override Method处覆盖哪个方法?()A hashCodeB equalsC toStringD notify
单选题程序: class MyDate{ private int year; private int month; private int day; public MyDate(int year,int month,int day){ this.year=year; this.month=month; this.day=day; } //Override Method } 为了让new MyDate(1980,11,9)==new MyDate(1980,11,9) 返回true,必须在Override Method处覆盖哪个方法?()A hashCodeB equalsC toStringD notify