试题六(共15分)阅读以下说明和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的对应栏内。【说明】己知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放(每年按52周计算);另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。下面是实现该工资系统的Java代码,其中定义了四个类:工资系统类PayRoll,员工类Employee,正式工类Salaried和计时工类Hourly,Salaried和Hourly是

题目

试题六(共15分)

阅读以下说明和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的对应栏内。

【说明】

己知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放(每年按52周计算);另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。

下面是实现该工资系统的Java代码,其中定义了四个类:工资系统类PayRoll,员工类Employee,正式工类Salaried和计时工类Hourly,Salaried和Hourly是Employee的子类。

【Java代码】

abstract class Employee{

protected String name; //员工姓名

protected int empCode; //员工号

protected double salary; //周发放工资

public Employee(int empCode, String name){

this.empCode= empCode;

this.name= name;

}

public double getSalary(){

return this.salary;

}

public abstract void pay();

}

class Salaried (1) Employee{

private double annualSalary;

Salaried(int empCode, String name, double payRate){

super(empCode, name);

this.annualSalary= payRate;

}

public void pay(){

salary= (2) ;//计算正式员工的周发放工资数

System.out.println(this.name+":"+this.salary);

}

}

class Hourly (3) Employee{

private double hourlyPayRate;

private int hours;

Hourly(int empCode, String name, int hours, double payRate){

super(empCode, name);

this.hourlyPayRate= payRate;

this.hows= hours,

}

public void pay(){

salary= (4) ;//计算计时工的周发放工资数

System.out.println(this.name+":"+this.salary);

}

}

public class PayRoll{

private (5) employees[]={

new Salaried(l001,"Zhang San", 58000.00),

//此处省略对其他职工对象的生成

new Hourly(1005,"Li", 12, 50.00)

};

public void pay(Employee e[]){

for (int i=0;i<e.length; i++){

e[i].pay();

}

}

public static void main(String[] args)

{

PayRoll payRoll= new PayRoll();

payRoll.pay( (6) );

double total= 0.0;

for (int i=0;i<payRoll.employees.length; i++){//统计周发放工资总额

total+=payRoll.employees[i].getSalary();

}

System.out.println(total);

}

}


相似考题
参考答案和解析
正确答案:
(1)extends
(2)annualSalary/52
(3)extends
(4)hours*hourlyPayRate
(5)~(6)的解答可为以下两种之一:
(5)Employee
(6)payRoll.employees

(5)staticEmployee
(6)employees或payRoll.employees
更多“试题六(共15分)阅读以下说明和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的对应栏 ”相关问题
  • 第1题:

    阅读下面的说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。

    [说明]

    阅读以下说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。

    windows Server 2003是一个多任务多用户的操作系统,能够以集中或分布的方式实现各种应用服务器角色,是目前应用比较广的操作系统之一。

    Windows内置许多应用服务功能,将下表中(1)~(5)处空缺的服务器名称填写在答题纸对应的解答栏内。

    (1)


    正确答案:域名(DNS)服务器
    域名(DNS)服务器

  • 第2题:

    阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 以下Java代码实现两类交通工具(Flight和Train)的简单订票处理, 类Vehicle、Flight、Train之间的关系如图5-1所示。图5-1

    【Java代码】 import java.util.ArrayList; import java.util.List; abstract class Vehicle { void book(int n) { //订 n张票 if (getTicket0()>=n) { decrease Ticket(n); } else { System.out.println(“余票不足!!“); } } abstract int getTicket(); abstract void decreaseTicket(int n); }; class Flight (1) { Private (2) tickets=216; //Flight的票数 Int getTicket(){ Return tickets; } void decreaseTicket(int n){ tickets=tickets -n; } } class Train (3) { Private (4) tickets=2016; //Train的票数 int getTicket() { return tickets; } void decreaseticket(int n) { tickets = tickets - n; } } public class Test { public static void main(String[] args) { System.out.println(“欢迎订票 ! "); ArrayList<Vehicle> v = new ArrayList<Vehicle>(); v.add(new Flight()); v.add(new Train()); v.add(new Flight()); v.add(new Train()); v.add(new Train()); for (int i=0;i<v.size(); i++){ (5) (i+1); //订i+1张票 System.out.println(“剩余票数:” +v.get(i).getTicket()); } } } 运行该程序时输出如下: 欢迎订票! 剩余票数:215 剩余票数:2014 剩余票数: (6) 剩余票数: (7) 剩余票数: (8)


    正确答案:(1)extends Vehicle    
    (2)static  int     
    (3)extends Vehicle     
    (4)static  int
    (5)v.get(i).book        
    (6)212              
    (7)2010                     
    (8)2005

  • 第3题:

    阅读下列说明、c++代码和运行结果,填补代码中的空缺(1)~(6),将解答填入

    答题纸的对应栏内。

    【说明】

    很多依托扑克牌进行的游戏都要先洗牌。下面的c++程序运行时先生成一副扑克牌,

    洗牌后再按顺序打印每张牌的点数和花色。

    【c++代码】

    inciude <iostream>

    4Finclude <stdlib. h>

    include <ctime>

    inciude <aigorithm>

    include <string>

    Using namespace std

    Const string Rank[13]={”A”,”2”,”3”,”4“,“5”,”6,”’“7”8“,9”,”10,”J”,

    ”Q”,”K”}j//扑克牌点数


    正确答案:
    分析本题考查c-++语言程序设计能力,涉及类、对象、函数的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读,理清程序思路,然后完成题目。本题目中涉及到扑克牌、牌桌等类以及洗牌和按点数排序等操作。根据说明进行设计。定义了两个数组,Rank表示扑克牌点数,Suits表示扑克牌花色,定义时进行初始化,而且值不再变化,故用const修饰。Card类有两个属性,rank和suit,在使用构造函数Card(intrankintsuit)新建一个Card的对象时,所传入的参数指定rank和suit这两个属性值。因为参数名称和属性名称相同,所以用this->前缀区分出当前对象。在类Card中包含方法getRank()和getSuit(),分别返回当前对象的rank和suit属性值。printCard()函数打印扑克牌点数和花色。DeckOfCards类包含Card类型元素的数组deck[52],表示牌桌上一副牌(52张)。构造函数中对牌桌进行初始化并进行洗牌。先用Card对象填充牌桌,即创建52个Card对象并加入deck数组。然后洗牌,即将数组中的Card对象根据花色和点数随机排列。printCards0函数将所有Card对象打印出来。主控逻辑代码在main函数中实现。在main()函数中,先初始化DeckOfcards类的对象指针d,即生成一个牌桌:Deckofcards*d=newdeckofcards()并发牌,即调用d的printCards()函数,实现打印一副扑克牌中每张牌的点数和花色。在printCards()函数体内部,为每个数组元素调用当前对象的pnntCard()一张牌。Main()函数中使用完数组对象之后,需要用delete操作进行释放对象,对d对象进行删除,即deleted。因此,空(1)和(2)需要表示当前对象的this->;空(3)需要牌桌上纸牌对象,即数组元素deck[i]:空(4)也需要纸牌对象调用printCard(),即数组元素deck[i].:空(5)处为创建DeckOfCards类的对象指针d的newDeckofcards0;空(6)需要用对象指针d调用打印所有纸牌的pnntCards()函数,即d->printCards0.试题五参考答案(1)this->(2)this->(3)deck[i]或*(deck+i)或等价表示(4)deck[i]或*(deck+i)或等价表示(5)newDeckOfCards()(6)d->printCards0或等价表示

  • 第4题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都

    有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌

    灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。command模式

    的类图如图6-1所示。

    【Java代码】

    }


    正确答案:
    本题考查命令(Command)模式的基本概念和应用。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。在软件系统中,行为请求者与行为实现者之间通常呈现一种紧耦合的关系。但在某些场合,比如要对行为进行记录撤销重做事务等处理,这种无法抵御变化的紧耦合是不合适的。这种情况下,使用command模式将行为请求者与行为实现者进行解耦。题目中给出了Lommamt模式的类图,其中:Command类为所有命令声明了一个接口。调用命令对象的execute()方法,就可以让接收者进行相关的动作。ConcreteCommand类定义了动作和接收者之间的绑定关系。调用者只要调用execute()就可以发出请求,然后由ConcreteCommand调用接收者的一个或多个动作。Invoker持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。Receiver知道如何进行必要的工作,实现这个请求。任何类都可以当接收者。了解了Command模式的内涵之后,下面来看程序。由于Command类的主要作用是为所有的ConcreteCommand定义统一的接口,在Java中通常采用接口(interface)来实现,所以(1)处对应的代码为interfaceCommand。类LightOnCommand、LightOffCommand对应的就是模式中的ConcreteCommand。ConcreteCommand中execute()方法的代码在类图中已经给出,现在需要确定receiver是谁。类Light充当的是Receiver.其中定义了两种action:on和off.所以(2)、(3)对应代码分别为light.on()和light.off()。类RemoteControl对应的是模式中的Invoker,在该类中设置需要控制的命令对象。(4)处对应的代码为onCammands[slot],设置“开灯”命令对象:(5)处对应的代码为offCommands[slot],设置‘关灯”命令对象。类RemoteControl中的方法onButtonWasPushed和ofiButtonWasPushed,分别完成对开灯、关灯命令对象的execute方法的调用。所以(6)、(7)处分别对应代码onCommands[slot].execute()、offCommands[slot].execute()。试题六参考答案(1)interfaceCommand(2)light.on()(3)light.off()(4)onCommands[slot](5)offi:ommands[slot](6)onCommands[slot].execute()(7)ofiCommands[slot].execute()

  • 第5题:

    试题六(共15分)

    阅读以下说明、图和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的

    对应栏内。

    【说明】

    已知对某几何图形绘制工具进行类建模的结果如图6.1所示,其中Shape为抽象(abstract)类,表示通用图形,Box(矩形)、Ellipse(椭圆)和Line(线条)继承(extends)了Shape类,其中,Circle表示圆(即特殊的椭圆)。

    下面的Java代码用于实现图 6-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为:

    Ellipse

    Circle

    Ellipse

    C

    E

    【Java代码】

    (1) class Shape{

    public Shape(String name){

    this.name= name;

    }

    (2) void paint();

    String getName(){

    retum this.name;

    }

    final String name;

    };

    //Box 和Line类似下面 Ellipse,其代码略

    class Ellipse (3) {

    public Ellipse(String name){

    super(name);

    System.out.println("Ellipse");

    }

    Void paintO{∥绘制现状示意代码

    System.out.println(getName0);

    }

    };

    class Circle (4) {

    public Circle(String name){

    super(name);

    System.out.println("Circle");

    }

    };

    class Diagram{

    private Shape shapes[]= new Shape[2];

    public void drawAShape(Shape shape){

    shape.paint();

    }

    void erase A Shape(Shape shape){

    ∥删除形状,代码略

    }

    void drawShapes(){

    shapes*0+= new Circle("C”);

    shapes[l]= new Ellipse("E");

    for (int i=O; i<2;++i) {

    drawAShap(shapes[i]);//绘制形状

    }

    }

    void close(){

    for (int i=0;i<2; ++1) { []关闭图,删除所绘制图形

    (5) ;

    }

    }

    public static void main(String[] args){

    Diagram diagram= (6) ;

    diagram.drawShapes();

    diagram.close();

    }

    }


    正确答案:
    试题六参考答案(共 15分)
    (1) abstract 或public abstract (2 分)
    (2) abstract 或public abstract 或protected abstract (2 分)
    (3) extends Shape (2分)
    (4) extends Ellipse (3 分)
    (5) erase A Shape (shapes[i]) (3 分)
    (6) new Diagram() (3分)

  • 第6题:

    从下列2道试题(试题五至试题六)中任选 1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。

    试题五(共15分)

    阅读以下说明、图和C++代码,填补C++代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。

    【说明】

    已知对某几何图形绘制工具进行类建模的结果如图5.1所示,其中Shape为抽象类(应至少包含一个纯虚拟( virtual)函数),表示通用图形,Box表示矩形,Ellipse表示椭圆,Circle表示圆(即特殊的椭圆),Line表示线条。

    下面的C++代码用于实现图5-1所给出的设计思路,将其空缺处填充完整并编译运行,输

    出结果为:

    Ellipse

    Circle

    Ellipse

    C

    E

    【C++代码】

    include <string>

    include <iostream>

    using namespace std;

    class Shape{

    public:

    Shape(const string& name){

    m_name= name;

    }

    ~Shape(){}

    (1) void paint() = 0;

    stringgetName()const {

    retumm name;

    }

    Private:

    string m_name;

    };

    //Box和 Line类的定义与 Ellipse类似,其代码略

    classEllipse (2) {

    public:

    Ellipse(const string& name) : Shape(name){ cout<<"Ellipse" <<endl; }

    Voidpaint() { cout<<getName()<<endl;}

    };

    classCircle (3) {

    public:

    Circle(const string& name) : Ellipse(name){ cout<<"Circl"<<endl; }

    };

    class Diagram {

    public:

    void drawAShap(Shape* shape){ shape->paint(); }

    void drawShapes() {

    shapes[0] = new Circle("C");

    shapes[l] = new Ellipse("E");

    for (int i=O;i<2; ++1) {

    drawAShap(shapes[i]);

    }

    }

    void close (){ /*删除形状,代码略 */ }

    private:

    Shape* shapes[2];

    };

    int main( )

    {

    Diagram* diagram = (4)

    diagram->drawShapes();

    diagram->close ();

    (5) diagram;

    }


    正确答案:
    试题五分析
    本题考查C++语言程序设计的能力,涉及类和抽象类、对象、函数和虚函数的定义和相关操作,以及继承关系。要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。
    先考查类图整体结构。本题中根据类图定义了类:Diagram、Shape、 Box、 Ellipse、Line和Circle。其中Shape为抽象类,表示通用图形,抽象类中应至少包含一个纯虚拟( virtual)函数。Box表示矩形,Ellipse表示椭圆,Line表示线条,三者都是Shape的子类,继承了Shape类,Circle表示圆(即特殊的椭圆),继承了Ellipse。抽象类Shape的定义中,需要通过使用virtual标识虚函数,void paint()=0;表示paint()是纯虚函数,其定义前必须添加virtual进行表示。类Ellipse为Shape的子类,Circle为Ellipse的子类,需要在代码中体现出继承。另外,在子类的构造函数中,调用父类的构造函数,所以继承的权限为public。其语法为:public后加类名。
    类Diagram中没有定义构造函数,编译器生成一个缺省的构造函数,调用是采用new关键字加类名。使用完成之后,通过delete进行释放。
    因此空(1)需要表现出paint()函数为纯虚函数,即为virtual;空(2)和空(3)处添力口继承父类,并且权限为public,即为:public Shape和:public Ellipse;空(4)处补充通过使用编译器生成的缺省构造函数创建对象,即new Diagram;空(5)处通过delete释放new创建的对象diagram。
    参考答案
    (1) virtual
    (2):public Shape
    (3): public Ellipse
    (4) new Diagram
    (5) delete

  • 第7题:

    阅读以下C代码,回答问题(1)~(5),将解答填入答题纸的对应栏内。【说明】以下java代码实现一个简单乐器系统,音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作。对部分乐器进行建模,其类图如题5-1所示,包括:乐器(Instrument)、打击乐器(Percussion)、弦乐器(Stringed)、管乐器(Wind)、木管乐器(Woodwind)、铜管乐器(Brass)




    答案:
    解析:
    1)abstract void play(Note n)(2)extends Instrument (3)extends Wind(4)ArryList< Instrument >(5)Music
    【解析】

    1空定义抽象方法23空用extends继承对应的类4用数组创建Instrument的个各类5创建Music对象

  • 第8题:

    阅读以下C代码,回答问题1和问题2,将解答填入答题纸的对应栏内。【C代码1】


    【问题2】写出【代码2】的运行时的输出结果。


    答案:
    解析:
    (1)输入-1331的结果是:Palindromic number.a=-1331 b=1331 输入795的结果是:a=795 b=597(2) Passed,point=4 Passed,point=1 Passed,point=1Passed,point=1 Failed

  • 第9题:

    第五题 阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    【说明】
    以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。

    问题:5.1 【Java代码】
    interface Item{
    public void accept(Visitor visitor);
    public double getPrice();
    }

    class Book (1){
    private double price;
    public Book(double price){(2);}
    public void accept(Visitor visitor){ //访问本元素
    (3);
    }
    public double getPrice() {
    return price;
    }
    }
    //其它物品类略
    interface Visitor {
    public void visit(Book book);
    //其它物品的visit方法
    }

    class Cashier(4){
    private double totalForCart;
    //访问Book类型对象的价格并累加
    (5){
    //假设Book类型的物品价格超过10元打8折
    if(book.getPrice()<10.0){
    totalForCart+=book.getPrice();
    } else
    totalForCart+=book.getPrice()*0.8;
    }
    //其它visit方法和折扣策略类似,此处略

    public double getTotal() {
    return totalForCart;
    }
    }

    class ShoppingCart {
    //normal shopping cart stuff
    private java.util.ArrayListitems=new java.util.ArrayList<>();
    public double calculatePrice() {
    Cashier visitor=new Cashier();

    for(Item item:items) {
    (6);
    }
    double total=visitor.getTotal();
    return total;
    }
    public void add(Item e) {
    this.items.add(e);
    }
    }


    答案:
    解析:
    implements Item
    (2)this.price=price
    (3)visitor.visit(this)
    (4)implements Visitor
    (5)public void visit(Book book)
    (6)item.accept(visitor)

    【解析】

    这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
    第一、四空为接口与实现,接口使用Interface,实现使用implements。第二空this表示类实例本身。第三空为访问本元素。第五空实现接口里面的方法。第六空调用accept方法。

  • 第10题:

    试题五(共 15 分)阅读以下说明和 Java 程序,填补代码中的空缺,将解答填入答题纸的对应 栏内。【说明】以下 Java 代码实现一个简单的聊天室系统(ChatRoomSystem),多个用 户(User)可以向聊天室( ChatRoom)发送消息,聊天室将消息展示给所有用户。 类图如图 5-1 所示。

    【Java 代码】 class ChatRoom {
    public static void showMessage(User user, Strmg message) {System.out.println("[" + user.getName() + "] : " + message);} }classUser{private String name; public String getName() { return name;}public void setName(String name) { this.name = name;}public User(String name) { (1) =name;}public void sendMessage(String message) { (2) (this, message);}}public class Chat:RoomSystem { public void startup() {
    User zhang= new User("John");User li =new User("Leo"); zhang.sendMessage("Hi! Leo! "); 1i.sendMessage("Hi! John!"); } public void join(User user) { (3) ("Hello Everyone! I am" + user.getName()); }public static void main(String[] args) { ChatRoomSystem crs= (4) ; Crs.startup();Crs.join( (5) )(“Wayne”));}}/*程序运行结果: [John]:Hi! Leol [Leo]:Hi! John![Wayne】:Hello Everyone!Iam Wayne*/


    答案:
    解析:
    1、this.name
    2、ChatRoom.showMessage
    3、user.sendMessage
    4、new ChatRoomSystem()
    5、new User

  • 第11题:

    阅读下列说明,回答问题1和问题2,将解答写在答题纸的对应栏内。
    【说明】
    Windows 系统的用户管理配置中,有多项安全设置,如图2-1 所示。





    答案:
    解析:
    【问题1】(3分)属于账号策略。 账户策略主要包括密码策略和账户锁定策略两种安全设置。
    【问题 2】(3分)Abcd321 test123! 123@host 密码必须符合复杂性要求:启用此策略,用户账户使用的密码必须符合复杂性的要求。 密码复杂性必须符合下列最低要求: 不能包含用户的账户名; 不能包含用户姓名中超过两个连续字符的部分; 至少有六个字符长; 密码总必须包含一下4类字符中的三类字符: 1、英文大写字母(A-Z) 2、英文小写字母(a-z) 3、10个基本数字(0-9) 4、特殊符号(!@#¥%等)

  • 第12题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。



    答案:
    解析:
    1: void update()2: Observer3: obs.update()4: Subject5: Attach(this)

  • 第13题:

    阅读以下说明和 Java 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如图 6-1 所示。相应的Java 代码附后。图6-1 类图

    【 Java 代码】 import java.util.ArrayList; import java.util.List; class Stock { private String name; private int quantity; public Stock(String name ,int quantity) { this.name = name; this.quantity = quantity; } public void buy() { System.out.println("[ 买进]: " + name + ",数量. " + quantity);} public void sell() { System.out.println("[ 卖出]: " + name + ",数量. " + quantity);} } interface Order { void execute(); } class BuyStock (1) Order { private Stock stock; public BuyStock(Stock stock) { (2) = stock; } public void execute() { stock.buy();} } //类SellStock实现和BuyStock 类似,略 class Broker { private List<Order> orderList = new ArrayList<Order>(); public void takeOrder( (3) order) { orderList.add(order); } public void placeOrders() { for ( (4) order : orderList) { order.execute(); } orderList.clear(); } } public class StockCommand { public static void main(String[] args) { Stock aStock = new Stock("股票 A" ,10); Stock bStock = new Stock("股票 B" ,20); Order buyStockOrder = new BuyStock(aStock); Order sellStockOrder = new SellStock(bStock ); Broker broker = new Broker(); broker.takeOrder(buyStockOrder); broker.takeOrder(sellStockOrder); broker. (5) ; } }


    正确答案:(1) implements
    (2) this.stock
    (3) Order
    (4) Order
    (5) placeOrders()

  • 第14题:

    阅读以下关于软件测试的说明,回答司题l至问题3,将解答填入答题纸的对应

    栏内。

    【说明】

    使用在汽车、飞机中的嵌入式软件, 日于直接影响人的生命及财产安全,测试要求

    更为严格。语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖是通常对这类软件的要求。

    以下是一段C语言代码,请仔细阅读并回答相关问题:

    【问题1】(6分)

    请根据测试要求,简要说明语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖的含义。

    将答案填写在答题纸的对应栏中。

    【问题2】(5分)

    画出以上代码的流程图,将答案填写在答题纸的对应栏中。

    【问题3】(4分)

    请根据【说明】中的C语言代码,计算满足MC/DC覆盖要求的用例数量及条件取

    值范围,将答案填写在答题纸的对应栏中.


    正确答案:
    试题三分析
    本题考查嵌入式软件测试的基本知识.
    语句覆盖要求设计足够多的测试用例,运行被测程序,使得程序中每条语句至少被
    执行一次。定覆盖(分支覆盖)要求设计足够多的测试用例,运行被测程序,使得程序
    中的每个判断的“真”和“假”都至少被执行一次。条件覆盖要求设计足够多的测试用
    例,运行被测程序,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一
    次为真值,有一次为假值。MC/DC覆盖要求每个条件的取值都有覆盖,每个判定值都有
    覆盖且每个条件都能独立影响判定结果,各覆盖率的含义如表2.5所示。

    【问题2]
    本问题考查程序流程图的画法。注意开始、结束的符号。
    根据源代码,程序流程图如下。

    【问题3]
    本问题考查MC/DC覆盖率判定的综合运用。
    MC/DC与代码中的逻辑运算有关。本题代码中的逻辑运算为x>0&&y>0。根据
    MC/DC的定义,MC/DC覆盖要求每个条件的取值都有覆盖,每个判定值都有覆盖且每
    个条件都能独立影响判定结果。对于a&&b这样的逻辑运算,真值表如下。

    对测试用例1和测试用例2,条件a不变,因为条件b的不同而导致结果的不同,
    因此条件b独立影响判定的结果。对测试用例2和测试用例3,因为条件b不变,条件a
    的不同而导致结果的不同,因此条件a独立影响判定的结果。综合以上,对逻辑运算a&&
    b应产生三个测试用例,包括:(True,False)、(True,True)、(False,True)。
    所以本题用例数量:3个;条件取值范围:(x>0andy<=0)、(x<=0andy>0)及(x>0
    andy>0)。
    参考答案

    【问题2]
    【问题3]
    用例数量:3个;
    条件取值范围:
    (x>0andy<=0)、(x<=0andy>0)及(x>0andy>0)

  • 第15题:

    阅读以下说明和Java程序,填补代码中的空缺(1)~(6),将解答填入答题纸的

    对应栏内。

    【说明】

    很多依托扑克牌进行的游戏都要先洗牌。下面的Java代码运行时先生成一副扑克

    牌,洗牌后再按顺序打印每张牌的点数和花色。

    【Java代码】


    正确答案:
    本题考查Java语言程序设计的能力,涉及类、对象、方法的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读,理清程序思路,然后完成题目。先考查题目说明。本题目中涉及到扑克牌、牌桌、玩家等类以及洗牌和按点数排序等操作。根据说明进行设计。Card类内定义了两个static枚举类型,Face枚举扑克牌点数,Suit枚举扑克牌花色。Card类有两个枚举类型的属性,face和suit,而且值不再变化,故用final修饰。在使用构造方法publicCard(Faceface,Suitsuit)新建一个Car:d的对象时,所传入的参数指定face和suit这两个属性值。因为参数名称和属性名称相同,所以用this前缀区分出当前对象。在类Card中包含方法getFace()和getSuit(),分别返回当前对象的face和suit属性值。getCard()方法返回string来表示一张牌,包括扑克牌点数和花色。牌桌类Deckofcands包含持有Card类型元素的List类型对象的声明List,用以存储牌。List是Java中的一种集合接口,是Collection的子接口。构造方法中用Card对象填充牌桌并进行洗牌。先用Card对象填充牌桌,即创建52个Card对象加入deck数组,表示牌桌上一副牌(52张)。然后洗牌,即将数组中的Card对象根据花色和点数随机排列,使用集合工具类Collechons中的shuffle方法,对以List类型表示的deck数组进行随机排列。Collectians是Java集合框架中两个主要工具类之一,用以进行集合有关的操作。printCards()方法将所有Card对象打印出来,按4列显示52张牌。每张拍的打印用list.get(i)获得list表示的deck中的第i个Card对象,然后进一步调用此对象的getCard()方法,得到String表示的当前一张牌。玩家类中包括启动发牌洗牌等操作,主入口方法main中实现创建牌桌对象,并调用按4列显示52张牌。在main()中,先初始化Deckofcards类的对象player,即生成一个牌桌:Deckofcardsplayer=newDeckofcards()并发牌,即调用player的printCards()方法,实现按4列显示52张牌打印一副扑克牌中每张牌的点数和花色。在pnntCards()方法体内部,用list调用每个数组元素,井为每个数组元素调用getCard()返回当前对象所表示一张牌的花色和点数。用格式化方法进行打印,即:因此,主(1)和(2)需要表示当前对象的this.;空(3)需要牌桌上纸牌对象,并将数组元素下标加1,即数组元素deck[count++];空(4)也需要用list对象获得纸牌对象的字符串表示,即list后的get(1)getCard();空(5)处为创建DeckOf℃ards类的对象指针player的newDeckOfCards();空(6)需要用对象player调用打印所有纸牌的printCards()函数,即player.。试题六参考答案(l)this(2)this.(3)deck[count++]或等价表示(4)get(i)getCard()(5)newDeckOfCards()(6)player.

  • 第16题:

    【问题3】(6分)

    请根据本题要求完善任务Taskl(图5-4)和任务Task2(图5-5)的程序代码,填补图中的空缺,将答案填写在答题纸的对应栏中。

    图 5-4 任务1 的程序

    图 5-5 任务2 的程序


    正确答案:
    (1)OSSemPend(emptySem,0,&err)(1分)(2)Buffer=readc(1分)(3)ret=OSSemPost(fullSem)(1分)(4)OSSemPend(fullSem,0,&err)(1分)(5)ret=OSSemPost(emptySem)(1分)(6)Printc(writec)(1分)

  • 第17题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案:

  • 第18题:

    试题七(共 15 分)

    阅读以下说明和 Java 代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    java.util 库中提供了 Vector 模板类,可作为动态数组使用,并可容纳任意数据类型。该类的部分方法说明如下表所示:

    [Java 代码]

    import (1) ;

    public class JavaMain {

    static private final int (2) = 6;

    public static void main(String[] args){

    Vector<Integer> theVector = new Vector< (3) >();

    // 初始化 theVector,将 theVector的元素设置为 0 至 5

    for (int cEachItem = 0; cEachItem < ARRAY_SIZE; cEachItem++)

    theVector.add( (4) );

    showVector(theVector); // 依次输出 theVector中的元素

    theVector.removeElementAt(3);

    showVector(theVector);

    }

    public static void showVector(Vector<Integer> theVector){

    if (theVector.isEmpty()) {

    System.out.println("theVector is empty.");

    return;

    }

    for (int loop = 0; loop < theVector.size(); loop++) {

    System.out.print(theVector.get(loop));

    System.out.print(", ");

    }

    System.out.println();

    }

    }

    该程序运行后的输出结果为:

    0, 1, 2, 3, 4, 5

    (5)


    正确答案:

  • 第19题:

    试题五(共 15 分)阅读以下说明和 Java 程序,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下 Jave 代码实现一个简单客户关系管理系统(CrM) 中通过工厂 (Customerrfactory )对象来创建客户(Customer) 对象的功能。客户分为创建成功的客户 (realCustomer) 和空客户(NullCustomer) 。空客户对象是当不满足特定条件时创建或获取的对象。类间关系如图 5-1 所示。【Java 代码】Abstract class Customer﹛Protected String name;()boolean isNil()()String getName();﹜ Class realCustomer ()Customer﹛Public realCustomer(String name )﹛ return false; ﹜﹜ Class NullCustomer()Customer﹛Public String getName()﹛ return ″Not Available in Customer Database″; ﹜Public boolean isNil()﹛ return true; ﹜﹜ class Customerfactory {public String[] names = {"rob","Joe","Julie"};public Customer getCustomer(String name) {for (int i = 0; i < names.length;i++) {if (names[i].())﹛return new realCusωmer(name);﹜﹜return ()﹜﹜ Public class CrM﹛Public viod get Customer()﹛Customerfactory()Customer customer1-cf.getCustomer(″rob″);Customer customer2=cf.getCustomer(″rob″);Customer customer3= cf.getCustomer(″Julie″);Customer customer4= cf.getCustomer(″Laura″);System.out.println(″customer1.getName());System.out.println(″customer2getName());System.out.println(″customer3.getName());System.out.println(″customer4.getName());﹜ Public static viod main (String[]arge)﹛CrM crm =new CrM();Crm,getCustomer();﹜﹜/*程序输出为:CustomerrobNot Available in Customer DatabaseJulieNot Available in Customer Datable*/int main()﹛CrM*crs=newCrM();Crs->getCustomer();Crs->getCustomer();Delete crs;return();﹜/*程序输出为:CustomerrobNot Available ini Customer DatabaseJulieNot Available in Customer Database


    答案:
    解析:
    1)public abstract2) public abstract3)extends4)extends5)equals(name)6)new Null Customer()7) cf=New CustomerFactory();
    【解析】

    本题考察Java程序设计客户关系管理系统。1)public abstract 定义可访问方法2) public abstract3)extends 继承Customer类4)extends5)equals(name) 判断名字是否在数组集合内6)new Null Customer() 当不满足条件时创建一个空对象7) cf=New CustomerFactory(); 实例化对象cf

  • 第20题:

    试题六(共 15 分)阅读下列说明和 C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下 C++代码实现一个简单的聊天室系统(ChatRoomSystem),多个用户 (User)可以向聊天室(ChatRoom)发送消息,聊天室将消息展示给所有用户。 类图如图 6-1 所表示。

    【C++代码】#include#include using namespace std; class User {private:string name; public:User(string name){ (1) =name;}~User(){}
    void setName(string name) {this->name=name; } string getName(){return name;}void sendMessage(string message); }; class ChatRoom { . public:static void showMessage(User* user, string message) { cout<<"["<getName()"] : "< zhang->sendMessage("Hi! Leo!");li_>sendMessage("Hi! John!"); }void join(User* user) { (3) ("HeIIoEveryone!l am"+user->getName()); . ;} . };int main(){ChatRoomSystem*crs= (4) ; crs->startup();crs->join( (5) ("Wayne")); delete crs; }/* 程序运行结果: [John]:Hi! Leol [Leo]:Hi! John![Wayne】:Hello Everyone!Iam Wayne/*


    答案:
    解析:
    1、this->name
    2、ChatRoom::showMessage
    3、user->sendMessage
    4、new ChatRoomSystem()
    5、new User

  • 第21题:

    阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下Java代码实现两类交通工具(Flight和Train)的简单订票处理,类Vehicle、Flight、Train之间的关系如图5-1所示。

    【Java代码】

    import java.util.ArrayList;import java.util.List; abstract class Vehicle {void book(int n) { //订 n张票if (getTicket0() >=n ) {decrease Ticket(n);} else {System.out.println(“余票不足!!“);}} abstract int getTicket();abstract void decreaseTicket(int n);}; class Flight(1){Private(2)tickets=216; //Flight的票数Int getTicket(){Return tickets;} void decreaseTicket(int n){tickets=tickets - n;}} class Train(3){Private(4)tickets=2016; //Train的票数int getTicket() {return tickets;} void decreaseticket(int n) {tickets = tickets - n; }} public class Test {public static void main(String[] args) {System.out.println(“欢迎订票!");ArrayListVehicle v = new ArrayListVehicle();v.add(new Flight());v.add(new Train());v.add(new Flight());v.add(new Train());v.add(new Train());for(int i=0;iv.size(); i++){(5)(i+1); //订i+1张票System.out.println(“剩余票数:”+v.get(i).getTicket());}}}

    运行该程序时输出如下:欢迎订票!剩余票数:215剩余票数:2014剩余票数:(6)剩余票数:(7)剩余票数:(8)


    答案:
    解析:
    extendsVehicleintextendsVehicleintv.get(i).book21320122011

  • 第22题:

    阅读以下说明,回答问题1至问题2,将解答填入答题纸对应的解答栏内。
    【说明】
    某留言系统采用ASP+Access开发,其后台管理登录页面如图4-1所示。

    【问题1】(9分)
    以下是该后台管理登录页面login.asp的部分代码,请仔细阅读该段代码,根据图4-1 将(1)~(9)的空缺代码补齐。



    【问题2】(6分)
    1.在登录页面 login.asp 中通过<!--#include file=“bbb.asp”-->导入了bbb.asp的代码,以下是bbb.asp的部分代码,请仔细阅读该段代码,将空缺代码补齐。



    答案:
    解析:


  • 第23题:

    阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    【说明】
    以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。



    【Java代码】
    interface Item{ public void accept(Visitor visitor); public double getPrice();}class Book (1){ private double price; public Book(double price){(2);} public void accept(Visitor visitor){ //访问本元素 (3); } public double getPrice() { return price; }}//其它物品类略 interface Visitor { public void visit(Book book); //其它物品的visit方法 } class Cashier(4){ private double totalForCart; //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book.getPrice()<10.0){ totalForCart+=book.getPrice(); } else totalForCart+=book.getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 public double getTotal() { return totalForCart; }} class ShoppingCart { //normal shopping cart stuff private java.util.ArrayListitems=newjava.util.ArrayList<>(); public double calculatePrice() { Cashier visitor=newCashier(); for(Item item:items) { (6); } doubletotal=visitor.getTotal(); return total; } public void add(Item e) { this.items.add(e); }}



    答案:
    解析:
    (1)implements Item
    (2)this.price=price
    (3)visitor.visit(this)
    (4)implements Visitor
    (5)public void visit(Book book)
    (6)item.accept(visitor)【解析】
    这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作
    第一、四空为接口与实现,接口使用Interface,实现使用implements。第二空this表示类实例本身。第三空为访问本元素。第五空实现接口里面的方法。第六空调用accept方法

  • 第24题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: