一起答
主观

【C代码1】所示的方法(1)实现共享资源的互斥访问。

 (1) A.能够    B.不能

试题出自试卷《软件水平考试(初级)程序员下午(应用技术)模拟试卷24》
参考答案
查看试卷详情
相关试题
  1. 【说明】

     下面是一个Applet程序,程序的功能是在显示面板上输出字符串。当html页面被其他窗口遮挡后再次显示时,请给出输出结果。

     import java.awt.*;

     import java. (1). *;

     public class MyApplet (2) Applet {

       public void (3) (Graphics g) {

        g.drawString(tip,20,40);

        tip ="I am Java Applet";

      }

      public void init() {

        tip ="welcome"; }

        private (4) tip;

     }

     <html>

        <head>

        <title> A Simple Applet </title>

        </head>

        <body>

        <applet code="MyApplet.class" width=800 height=400>

        </applet>

        </body>

     </html>

     网页输出 (5)

  2. 请用150字以内的文字简要说明【C++代码1】、【C++代码2】这两种对传输门进行状态模拟的设计思路的区别之处。

  3. 阅读以下说明及Visual Basic部分程序代码,将应填入(n)处的字句写在对应栏内。

     【说明】

      本程序是一个可进行数制转换的应用程序,图1所示是其运行界面。txtDec为TextBox控件名,Lblkes为转换结果label控件名。

    【程序代码】

     Option Explicit

     Private Function convert(pintDec As Intege, pintS As Integer)As String

       Dim intCt As Integer,intR As Integer

       Dim strCov As String,strRes As String

       intR=pintDec Mod pintS

       Do While (1) 

         strCov=strCov & Str(intR)

          (2) 

         intR=pintDec Mod pints

       Loop

       For intCt=(3) To 1 Step-1

         strRes=strRes & Mid(strCov,intCt,1)

         Next intCt

       convert=strRes

     End Function

     Private Sub cmdQuit_Click()  ′退出

       Unload Me

     End Sub

     Private Sub optBin_Click()  ′二进制

       IblRes.Caption="转换结果:"& (4) 

     End Sub

     Private Sub optHex_Click()  ′十六进制

       IblRes.Caption="转换结果:"& (5) 

     End Sub

     Private Sub optOct_Click()  ′八进制

       IblRes.Caption="转换结果:"&Oct(Val(txtDec.Text))

     End Sub

  4. 请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1和问题2。

     【说明】

     传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout 3种,事件与其相应的状态转换如图6-18所示。

     

     下面的【C++代码1】与【C++代码2】分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。

     【C++代码1】

        const int CLOSED = 1; const int PENING = 2;

        const int PEN = 3; const int CLOSING = 4;

        const int STAYOPEN = 5;  //定义状态变量,用不同整数表示不同状态

        class Door {

        private:

        private:

         int state;                       //传输门当前状态

         void setState(int state) { this->state = stale; }   //设置当前状态

        public:

         Door () :state (CLOSED) { };

         void getState() {              //根据当前状态输出相应的字符串

          switch(state) {

           case OPENING: cout <<"OPENING" << endl;   break;

           case CLOSED: cout << "CLOSED" << endl;    break;

           case OPEN: cout << "OPEN" << endl;      break;

           case CLOSING: cout << "CLOSING" << endl;   break;

           case STAYOPEN: cout << "STAYOPEN" << endl;  break;

          }

         }

         void click() {              //发生click事件时进行状态转换

          if ( (1) ) setState(OPENING);

          else if ( (2) )   setState(CLOSING);

          else if ( (3) )   setState(STAYOPEN);

         }

         void timeout() {               //发生timeout事件时进行状态转换

          if (state == OPEN)  setState(CLOSING);

         }

         void complete() {            //发生complete事件时进行状态转换

          if (state == OPENING)  setState(OPEN);

          else if (state == CLOSING)  setState(CLOSED);

         }

        };

        int main(){

         Door aDoor;

         aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete();

         aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.click();

         aDoor.getState(); return 0;

        }

     【C++代码2】

        class Door {

        public:

         DoorState *CLOSED, *OPENING, *OPEN, *CLOSING, *STAYOPEN, *state;

         Door();

         virtual ~Door() { ...         //释放申请的内存,此处代码省略};

         void s

  5. 阅读以下应用说明及Visual Basic部分程序代码,将应填入(n)处的字句写在对应栏内。

     【说明】

     在窗体上画一个名称为Combo1的组合框,画两个名称分别Labe11、Labe12及Caption属性分别为“城市名称”和空白的标签。程序运行后,当在组合框中输入一个新项后按回车键 (ASCII码为13)时,如果输入的项在组合框的列表中不存在,则自动添加到组合框的列表中,并在Labe12中给出提示“已成功添加输入项”;如果存在,则在Labe12中给出提示“输入项已在组合框中”。

     【程序】

      Private Sub Combo1 (1) (KeyAscii As Integer)

       If KeyAscii=(2) Then

         For i=0 To (3) 

           If Combo1. Text=(4) Then

             Labe12. Caption ="输入项已在组合框中"

             Exit Sub

           End If

        Next i

        Label2. Caption ="已成功添加输入项"

        Combo1. (5) Combo1.Text

        End If

     End Sub

  6. 阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。

      【说明】

     以下【C程序】完成从指定数据文件中读入职工的工号和他完成产品个数的数据信息,对同一职工多次完成的产品个数进行累计,最后按如表5-11所示的格式输出职工完成产品数量的名次(ORDER),该名次是按每位职工完成的产品数量(QUANTITY)排序,之后是同一名次的职工人数(COUNT)和他们的职工号(NUMBER,同一名次的职工号以从小到大的顺序输出)。

    以下【C程序】采用链表结构存储有关信息,链表中的每个表元对应一位职工。在数据输入的同时,形成一个有序链表(按完成的产品数量和工号排序)。当一个职工有新的数据输入,在累计他的完成数量时会改变原来链表的有序性,为此应对链表进行删除、查找和插入等操作。

     【C程序】

     #include<stdio. h>

     typedef struct ele{

       int no, q;

       struct ele * next;

     }elem;

     main(int argc, char ** argv){

       FILE *fp; elem *h, *u, *proc();

       if(argc==2 &&(fp=fopen(argv[1], "r"))!=NULL){

         h=proc(fp);

         fclose(fp);

         output(h);

         while(h I=NULL){

           u=h→*next; free(h); h=u;

         }

       }

     }

     elem * proc(FILE *fp){

       int n, m; elem *u, *v, *p, *base;

       base=NULL;

       fscanf(fp, "%d', &m);

       while(!feof(fp)){

         fscanf(fp, '%d', &m);

         for(v=base; v!=NULL && v->no !=n; u=v, v=v->next);

         if( (1) )

         if( (2) )

           base=v->next;

         else

           u->next=v-next;

         v->q+=m;

       else

         v=(elem *)malloc(Sizeof)elem));

       v->no=n; v->q=m; p=base;

       while(p !=NULL)

       if( (3) )break;

       else {

         u=p; p=p->next;

       }

       if( (4) )

         base=v;

       else

         u->next=v;

        (5);

       Fscanf(fp, "%d", &n);

     }

         return base;

       }

       Output(elem *head){

       int count, order; elem *u, *v;

       printf("ORDER QUANTITY COUNT NUMBER\n");

       u=head; rder=1;

       while(u !=NULL){

         for(count=1, v=u->next;(6);count++, v=v->next);

         printf("%4d%9d%6d", order, u->q, count);

         order+=count;

         for(; (7) ;printf("%4d", u->no), u=u->next);

         printf("\n");

       }

     }

  7. 请认真阅读以下函数说明、图及C程序,将程序段中(1)~(7)空缺处的语句填写完整。

      【说明】

     一般的树结构常采用孩子一兄弟表示法表示,即用二叉链表代表树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点,例如,如图5-9(a)所示的树和如图5-9(b)所示的树的孩子一兄弟表示。

                             

     函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对如图5-9所示的树进行层序遍历时,节点的访问次序为DBAEFPC。

     对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如表5-12所示。

    Bool、Status类型定义如下:

       typedef enum{FALSE=0, TRUE=1}Bool;

       typedef enum{OVERFLOW=-2, UNDERFLOW=-1, ERROR=0, K=1)Status;

     树的二叉链表节点定义如下:

     typedef struct N6de{

       char data;

       struct Node *firstchild, *nextbrother;

     }Node, *TreeNode;

     【C函数程序】

     Status LevelTraverse(TreeNode root){

     /*层序遍历树,树采用孩子一兄弟表示法,root是树根节点的指针*/

     Queue tempQ;

     TreeNode ptr, brotherptr;

     if(!root)

       return ERROR;

     InitQueue(&tempQ);

      (1);

     brotherptr=root->nextbrother;

     while(brotherptr)(EnQueue(&tempQ, brotherptr);

         (2);

     }  /*end-while*/

     while( (3) ){

       (4);

      Printf("%c\t", ptr->data);

      if( (5) ) continue;

       (6);

      brotherptr=ptr->firstchiid->nextbrother;

      while(brotherptr){

        EnQueue(&tempQ, brotherptr);

        (7);

      } /*end-while*/

     }/*end-while*/

     return OK;

     } /*LevelTraverse*/

  8. 程序的环路复杂度V(G)也称为McCabe复杂性度量,它是构成基本路径集的独立路径数的上界,可依此得出应该设计的测试用例数目。请计算【C代码3】程序段的环路复杂度V(G)。

  9. 【问题5】  【C代码3】中x,y是两个已定义的整型变量。对该程序段进行覆盖测试时,必须适当地选取测试用例。如表5-10所示给出了可供选择的4组测试用例。若要实现语句覆盖,则至少应采用的测试用例是(2);若要实现条件覆盖,则至少应采用的测试用例是(3);若要实现路径覆盖,则至少应采用的测试用例是(4)或(5)。  【C代码3】  int a:=0;  if (x==O && y>2)  a:=1  /*A语句*/  else  { if (x<1 || y==1)   else      a:=2  /*B语句*/  }

    【(2)~(5)空缺处供选择的答案】  A.Ⅰ和Ⅱ组  B.Ⅱ和Ⅲ组  

    C.Ⅲ和Ⅳ组  D.Ⅰ和Ⅳ组  

    E.Ⅰ、Ⅱ和Ⅲ组  F.Ⅱ、Ⅲ和Ⅳ组G.Ⅰ、Ⅲ和Ⅳ组  H.Ⅰ、Ⅱ和Ⅳ组

  10. 如果把Enter_Critical_Section()函数中的两条语句互换一下位置,则可能会出现什么情况?