软题库 学习课程
当前位置:信管网 >> 在线考试中心 >> 信息系统项目管理师题库 >> 试题查看
试卷年份2004年下半年
试题题型【分析简答题】
试题内容

阅读以下说明和Java代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
说明
类Queue表示队列,类中的方法如下表所示。





类Node表示队列中的元素;类EmptyQueueException 给出了队列操作中的异常处理操作。
Java 代码
public class TestMain{                            // 主类
public static void main(String args[]) {
Queue q = new Queue();
q.enqueue("first!");
q.enqueue("second!");
q.enqueue("third!");
(1)  {
while(true)
System.out.println(q. dequeue());
}
catch(   (2)  )  ( }
}
}
public class Queue {                              // 队列
Node m_FirstNode;
public Queue() { m_FirstNode = null; }
public boolean isEmpty() {
if(m_FirstNode == null)  return true;
else  return false;
}
public void enqueue(Object newNode) {// 入队操作
Node next = m_FirstNode;
if(next==null)  m_FirstNode = new Node(newNode);
else {
while(next.getNext() != null)  next = next.getNext();
next.setNext(new Node(newNode));
}
}
public Object dequeue()     (3)   {// 出队操作
Object node;
if (isEmpty())
(4)   ;      // 队列为空,抛出异常
else {
node = m_FirstNode.getObject();
m_FirstNode = m_FirstNode.getNext();
return node;
}
}
}
public class Node {                              // 队列中的元素
Object m_Data;
Node m_Next;
public Node(Object data)          { m_Data = data;   m_Next = null; }
public Node(Object data, Node next)  { m_Data = data;   m_Next = next; }
public void setObject(Object data)   { m_Data = data; }
public Object getObject0          { return m_Data; }
public void setNext(Node next)      { m_Next = next; }
public Node getNext()             { return m_Next; }
}


public class EmptyQueueException extends     (5)   {  // 异常处理类
public EmptyQueueException0  {
System.out.println("队列已空 ! ");
}
}

查看答案

相关试题

4题:

试题4
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
在并发系统设计中,通过对信号量S的P、V操作实现进程的同步与互斥控制。
P(S):S:=S-1,若S≥0,则执行P操作的进程继续执行:若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。
V(S):S:=S+1,若S>0,则执行V操作的进程继续执行;若S≤0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。


【问题1】
在某并发系统中,有一个发送进程A、一个接收进程B、一个环形缓冲区BUFFER、信号量S1和S2。发送进程不断地产生消息并写入缓冲区BUFFER,接收进程不断地从缓冲区BUFFER取消息。假设发送进程和接收进程可以并发地执行,那么,当缓冲区的容量为N时,如何使用P、V操作才能保证系统的正常工作。发送进程A和接收进程B的工作流程如图4-1所示。请在图4-1中的空(1)~(4)处填入正确的内容。


【问题2】
若系统中有多个发送进程和接收进程,进程间的工作流程如图4-2所示,其中空 (1)~(4)的内容与图4-1相同。发送进程产生消息并顺序地写入环形缓冲区BUFFER,接收者进程顺序地从BUFFER中取消息,且每条消息只能读取一次。为了保证进程间的正常通信,增加了信号量SA和SB。
①请说明信号量SA和SB的物理意义,并在图4-2中的空(5)和空(6)处填入正确的内容。
②请从图4-2的(a)~(1)中选择四个位置正确地插入P(SA)、V(SA)、P(SB)、V(SB)。


【问题3】
设系统中只有进程A和进程B,除了互斥地使用CPU和打印机R外,进程A和B不使用其他资源。另外,进程B的优先级比A高,而进程A先于B准备好。进程A和 B的执行情况如图4-3所示,其中粗实线表示进程在执行中,细实线表示打印机R在使用中(每个进程具有三种状态:运行、就绪和阻塞)。


请分别说明进程A和B在图4-3所示的t1、t2、t3、t4时刻所处的状态;若是阻塞状态,请说明阻塞原因。



答案解析与讨论:www.cnitpm.com/st/2451810881.html

5题:

13、阅读下列函数说明和c代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明】
函数int Toplogical(Linded WDipaph  G.的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中图G表示一个具有n个顶点的AOE-网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下:
typedefstruct Gnode{               /* 邻接表的表结点类型*/
iht adjvex;                  /* 邻接顶点编号*/
iht weight;                 /* 弧上的权值*/
street Gnode *nextarc;          /* 指示下一个弧的结点*/
}Gnode;
typedef struct Adjlist{           /* 邻接表的头结点类型*/
char vdata;                  /*顶点的数据信息*/
struct Gnode *Firstadj;        /* 指向邻接表的第一个表结点*/
}Adjlist;
typedef street LinkedWDigraph{      /* 图的类型*/
int n, e;                  /* 图中顶点个数和边数*/
struct Adjlist *head;         /*指向图中第一个顶点的邻接表的头结点 */
} LinkedWDigraph;
例如,某AOE-网如图5-1所示,其邻接表存储结构如图5-2所示。

【函数】
iht Toplogical(LinkedWDigraph G.
{ Gnode *p;
intj, w, top = 0;
iht *Stack, *ye, *indegree;
ye = (int *)malloe((G.n+1) * sizeof(int));
indegree = (int *)malloc((G.n+1)*sizeof(int));   /* 存储网中各顶点的入度*/
Stack = (int *)malloe((G.n+1)*sizeof(int));     /* 存储入度为0的顶点的编号*/
if(!ve||!indegree || !Stack)      exit(0);
for (j = 1;j <= G.n;j++) {
ve[j] = 0;    indegree[j]= 0;
}/*for*/
for(j= 1;j<=G.n;j++) { /* 求网中各顶点的入度*/
p = G.head[j].Firstadj;
while (p) {
(1)  ;  p = p→nextarc;
}/*while*/
}/*for*/
for (j = 1; j <= G.n; j++)                  /*求网中入度为0的顶点并保存其编号*/
if (!indegree[j])     Stack[++top] =j;
while (top > 0) {
w=   (2)  ;
printf("%e  ", G.head[w].vdata);
p = G.head[w].Firstadj;
while (p) {
(3)   ;
if ( !indegree [p→adjvex])
Staek[++top] = p→adjvex;
if(   (4)  )
ve[p→adjvex] = ve[w] + p→weight;
p = p→nextarc;
}/* while */
}/* while */ return   (5)   ; }/*Toplogieal*/



答案解析与讨论:www.cnitpm.com/st/2451929526.html

6题:

阅读以下说明和C++代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
说明
通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中。应用系统在启动时首先将配置文件加载到内存中,这些内存配置信息应该有且仅有一份。下面的代码应用了单身模式(Singleton)以保证Configure类只能有一个实例。这样, Configure类的使用者无法定义该类的多个实例,否则会产生编译错误。
C++代码
#include<iostream.h>
class Configure{
(1)  :
Configure(){}    //构造函数
public:
static Configure*Instance();
public:
int GetConf~ureData(){return data;}    //获取配置信息
int SetConfigureDate(int m_data)
{data=m_data;  return data;}    //设置配置信息
private:
static Configure*_instance;
int data;    //配置信息
};
(2)  =NULL;
Configure*Configure∷Instance(){
if(_instance=NULL){
_instance=  (3)  ;
//加载配置文件并设置内存配置信息,此处省略
}
return  (4)  ;
}
void main()(
Configure*t=NULL;
t=  (5)  ;
int d=t→GetConfigureData();
//获取配置信息后进行其他工作,此处省略
}

答案解析与讨论:www.cnitpm.com/st/245204478.html