一起答
主观

阅读以下技术说明及Java程序,将Java程序中(1)~(5)空缺处的语句填写完整。

  【说明】

 用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请输入一个命令行参数”。

【Java程序】

import java.io.* ;

public class TestThread{             //Java Application主类

 public static void main(Sting args[ ]){

   if (args length<l) {          //要求用户输入一个命令行,否则程序不能进行下去

      system.out.println("请输入一个命令行参数");

      system.exit(0) ;

   }                    //创建用户Thread子类的对象实例,使其处于NewBorn状态

   primeThread getPrimes = new primeThread (Integer.parseInt(args[0]));

   getPrimes.start () ;           //启动用户线程,使其处于Runnable状态

   while(getPrimes.isAlive()&& getPrimes.ReadyToGoOn() ) {

     system.out.println("Counting the prime number..\n");  //说明主线程在运行

     try {

       Thread. sleep (500);      //使主线程挂起指定毫秒数,以便用户线程取得控制权,

                       //sleep是static的类方法

     }

     Catch(InterruptedException e) {  //sleep方法可能引起的异常,必须加以处理

       return ;

     }

   }                   //while循环结束

   System.out.println ("按任意键继续……") ; //保留屏幕,以便观察

   try {

      (1);

   }

   Catch(IOException e) {  }

 }                     //main方法结束

}

class primeThread extends Thread {

    //创建用户自己的Thread子类run()中实现程序子线程操作

 boolean m_bContinue=true;         //标志本线程是继续

 int m_nCircleNum ;            /循环的上限

 prime Thread(int Num){          //构造函数

   m_nCircleNum =Nam;

 }

 boolean ReadyToGoOn () {         //判断本线程是否继续执行

   return ( (2) );

 }

 public void run () {

   //继承并重载父类Thread的run ()方法,在该线程被启动时自动执行

   int number =3;

   boolean flag=true;

   while (true) {            //无限循环

     for((3); i++)         //检查number是否为素数

       if(number %i==0)

         (4);

       system, out. println (flag);

       if (flag)           //打印该数是否为素数的信息

         system,out.print in (number+ "是素数") ;

       else

         sys rem.out.print In (number+ "是素数") ;

       number++ ; &nb

试题出自试卷《软件水平考试(初级)程序员下午(应用技术)模拟试卷18》
参考答案
查看试卷详情
相关试题
  1. 阅读以下技术说明及Java程序,将Java程序中(1)~(5)空缺处的语句填写完整。

      【说明】

     用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请输入一个命令行参数”。

    【Java程序】

    import java.io.* ;

    public class TestThread{             //Java Application主类

     public static void main(Sting args[ ]){

       if (args length<l) {          //要求用户输入一个命令行,否则程序不能进行下去

          system.out.println("请输入一个命令行参数");

          system.exit(0) ;

       }                    //创建用户Thread子类的对象实例,使其处于NewBorn状态

       primeThread getPrimes = new primeThread (Integer.parseInt(args[0]));

       getPrimes.start () ;           //启动用户线程,使其处于Runnable状态

       while(getPrimes.isAlive()&& getPrimes.ReadyToGoOn() ) {

         system.out.println("Counting the prime number..\n");  //说明主线程在运行

         try {

           Thread. sleep (500);      //使主线程挂起指定毫秒数,以便用户线程取得控制权,

                           //sleep是static的类方法

         }

         Catch(InterruptedException e) {  //sleep方法可能引起的异常,必须加以处理

           return ;

         }

       }                   //while循环结束

       System.out.println ("按任意键继续……") ; //保留屏幕,以便观察

       try {

          (1);

       }

       Catch(IOException e) {  }

     }                     //main方法结束

    }

    class primeThread extends Thread {

        //创建用户自己的Thread子类run()中实现程序子线程操作

     boolean m_bContinue=true;         //标志本线程是继续

     int m_nCircleNum ;            /循环的上限

     prime Thread(int Num){          //构造函数

       m_nCircleNum =Nam;

     }

     boolean ReadyToGoOn () {         //判断本线程是否继续执行

       return ( (2) );

     }

     public void run () {

       //继承并重载父类Thread的run ()方法,在该线程被启动时自动执行

       int number =3;

       boolean flag=true;

       while (true) {            //无限循环

         for((3); i++)         //检查number是否为素数

           if(number %i==0)

             (4);

           system, out. println (flag);

           if (flag)           //打印该数是否为素数的信息

             system,out.print in (number+ "是素数") ;

           else

             sys rem.out.print In (number+ "是素数") ;

           number++ ; &nb

  2. 请根据【说明】和图2-15和图2-16的显示效果,将【Visual Basic程序】中(4)~(9)空缺处的程序语句填写完整。

  3. 阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。[说明]

     下面的词典类Dic实现了简单的英译汉功能。程序运行后的输出为“我是一个学生”。

    [C++程序]

    #include <iostream.h>

    #include <string.h>

    #define Max 100

    class Dic

    { int top;

      char words[Max] [12];

      char mean[Max] [20];

      public:

        Die(){top=0;}

        void add(char w[],char m[]){

           strcpy(words[top],w);

           strcpy(mean[top],m);

           (1);

        }

        void trans(char str[]) {

            int i=0,j=0,k=0,s;

            char w[12],h[200];

            while(l) {

             if(str[i]! =''&&str[i]! ='\0')

                w[j++]=str[i];   //读取单词的一个字符,记录在w中

             else {

               w[j]='\0';

               for(s=0;s < top;s++)

                 if(strcmp(words[s],w) (2) 0) break;

               if(s<top)         //找到了,翻译成对应的mean[s]

               { strcpy(w,mean[s]); j=(3);}

               else            //未找到,翻译成(unknown)

               { strcpy(w,"(unknown)"}; j=9; }

               for(s=0;s<j;s++)

                  h[k++]=w[s];

               if(str[i]=='\0') { (4); break;}

               j=0;

              }

              i++;

            }

            cout<<h<<endl;

        }

    };

    void main()

    { Dic obj;

      obj.add("I","我");

      obj.add("am","是");

      obj.add("student","学生");

      obj.add("a","一个");

      obj.trans("(5)");

    }

  4. 阅读以下应用说明和Visual Basic程序,根据要求回答问题1问题2。

     【说明】

     某机动车驾驶员模拟考试系统的“交通禁令标志识别”窗体中,共有1个按钮(CmdTest)、6个标签、 1个包含10个单选按钮的控件数组(OptPicture),如图2-15所示。其中,标签(LblPrompt1)“禁令标志”与标签(LblTest)相对应,标签(LblPrompt2)“图片答案”与标签(LblAnswer)相对应,标签(LblEvaluate)为结果提示。

     

     窗体(Frm001)对象和单选按钮控件数组(OptPicture)对象的部分属性及属性值如表2-15所示。

     

    该程序运行时,单击【测试】按钮(CmdTest),在标签(LblTest)中随机显示一个交通禁令标志名称,用户单击控件数组(OptPicture)相应单选按钮后,程序在标签(LblAnswer)给出用户所击单选按钮对应的交通禁令标志名称,在标签(LblEvaluate)给出正确或错误的提示结果,如图2-15和图2-16所示。

     

    【Visual Basic 程序】

    Dim (4) As String

    Private Sub cmdTest_Click()

     Dim i As Integer

     For i = 0 To 9

       (5) 

     Next i

     lblPrompt2.Visible = False

     lblAnswer.Visible = False

     lblEvaluate.Visible = False

     i = Int(Rnd * 10)

     lblTest.Caption = tname(i)

    End Sub

    Private Sub Form_Load()

     Dim i As Integer

     For i = 0 To 9

       optPicture(i).Value = False

      (6) 

     lblPrompt2.Visible = False

     lblAnswer.Visible = False

     lblEvaluate.Visible = False

     tname(0)= "禁止向左向右转弯"

     tname(1)= "禁止直行和向右转弯道"

     tname(2)= "禁止直行和向左转弯"

     tname(3)= "禁止驶入"

     tname(4)= "禁止掉头"

     tname(5)= "禁止车辆长时停放"

     tname(6)= "禁止机动车通行"

     tname(7)= "禁止非机动车通行"

     tname(8)= "禁止超车"

     tname(9)= "禁止车辆临时或长时停放"

    End Sub

    Private Sub optPicture_Click(Index As Integer)

     lblPrompt2.Visible = True

     lblAnswer.Visible =(7) 

     lblEvaluate.Visible = True

     lblAnswer. Caption=(8) 

     If (9) Then

       lblEvaluate.ForeColor = vbRed

       lblEvaluate.Caption = " 恭喜你!回答正确!"

     Else

       lblEvaluate.ForeColor = vbBlue

       lblEvaluate.Caption= "很遗憾,回答错误。"

     End If

    End Sub

    请根据图2-15和图2-16的显示效果和【Visual Basic程序】,将表2-15中窗体对象、单选按钮控件数组对象的(1)~(3)空缺处的属性值填写完整。

  5. 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内[说明]

     本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。

     方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。

          

     为检查当前方格所填整数的合理性,程序引入数组CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实上,CheckMatrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。

    [程序]

    #include <stdio.h>

    int pos,a[9],b[11];  /*用于存储方格所填入的整数*/

    void write(int a[]) /*方格输出函数*/

    { ……}

    int isPrime(int m)  /*素数判断函数,若m为素数则返回1,否则返回0*/

    { ……}

    int selectNum(int start)  /*找到start到10之间尚未使用过的最小的数,若没有则返回0*/

    { int j;

     for(j=start;j<=10;j++) if(b[j]) return j;

     return0;

    }

    int check()    /*检查填入pos位置的整数是否合理*/

    { int i,j

     int checkMatrix[][3]={{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,- 1},{4,6,-1},{5,7,-1}};

     for(i=0;(j=(1))>=0;i++)

        if(! isPrime((2)))return 0;

     return 1;

    }

    void extend()  /*为下一方格找一个尚未使用过的整数*/

    { (3)=selectNum(1);

      b[a[pos]]=0;

    }

    void change()   /*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/

    { int j;

      while(pos>=0&&(j=selectNum(a[pos]+1))= =0) b[a[pos- -]]=1;

      if(pos<0)return;

      (4);a[pos] =j;b[j]=0; }

    void find()

    { int k=1;

     pos=0;a[pos]=1;b[a[pos]]=0;

     do{

     if(ok)

        if( (5) ){

          write(a);change();

        }

        else extend();

       else change();

       k=check(pos);

     }while(pos>=0);

    }

    void main()

    { int i;

     for(i=1;i<=10;i++)b[i]=1;

     find();

    }

  6. 阅读下列函数说明和C函数,将应填入(n)处的字句写对应栏内。

    [说明]

     二叉树的二叉链表存储结构描述如下:

    typedef struct BiTNode

    { datatype data;

     struct BiTNode *lchild, * rchild; /*左右孩子指针*/

    }BiTNode,* BiTree;

     对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作:

     (1) 访问该元素所指结点;

     (2) 若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。

     此过程不断进行,当队列为空时,二叉树的层次遍历结束。

     下面的函数实现了这一遍历算法,其中Visit(datatype a)函数实现了对结点数据域的访问,数组queue[MAXNODE]用以实现队列的功能,变量front和rear分别表示当前队首元素和队尾元素在数组中的位置。

    [函数]

    void LevelOrder(BiTree bt)  /*层次遍历二叉树bt*/

    {  BiTree Queue[MAXNODE];

      int front,rear;

      if(bt= =NULL)return;

      front=-1;

      rear=0;

     queue[rear]=(1);

     while(front (2) ){

        (3);

        Visit(queue[front]->data);  /*访问队首结点的数据域*/

        if(queue[front]—>lchild!:NULL)

        { rear++;

         queue[rear]=(4);

        }

        if(queue[front]->rchild! =NULL)

        { rear++;

         queue[rear]=(5);

        }

     }

    }

  7. 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。

    [函数2.1说明]

     函数void find(int *a, int n, int * max, int * min)的功能是在长度为n的整型数组a中,查找最大元素和最小元素的下标。main()中给出了调用find函数的一个实例。

    [函数2.1]

    #include<stdio.h>

    void find(int *a, int n,int *max,int * min)

    { int i;

     *max =* min=0;

     for(i=1;i<n;i+ +)

     if(a[i]>a[* max]) (1);

     else if(a[i]<a[*min]) (2);

     return;

    main()

    { int a[]={4,6,8,9,0,6},max,min;

     find(a,6,(3));

     printf("%5d%5d\n", max,min);

    }

    [函数2.2说明]

     以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符串分别是abcdefg和abceef,则输出为abc。

    [函数2.2]

    #include <stdio.h>

    main()

    { char str1[100],str2[100],str[100],c;

     int i=0,s;

     printf("\nInput string 1:");gets(str1);

     printf("\nInput string 2:");gets(str2);

     while(((4))&&(str1[i]!='\0')&&(str2[i]!='\0')){

        (5);

        i++;

     }

     printf("%s\n",str);

    }

  8. 阅读以下说明和流程图,回答问题1-2,将解答填入对应的解答栏内。

    [说明]

     下面的流程图采用欧几里得算法,实现了计算两正整数最大公约数的功能。给定正整数m和 n,假定m大于等于n,算法的主要步骤为:

     (1)以n除m并令r为所得的余数;

     (2)若r等于0,算法结束;n即为所求;

     (3)将n和r分别赋给m和n,返回步骤(1)。

    [流程图]

         

    [问题1] 将流程图中的(1)~(4)处补充完整。

    [问题2] 若输入的m和n分别为27和21,则A中循环体被执行的次数是(5)。