一起答

软件水平考试(初级)程序员下午(应用技术)模拟试卷2

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. 阅读以下说明和Java代码,将解答写入对应栏内。

      【说明】

     下面的程序的功能是利用实现Runnable接口的方法来创建线程,并利用它来执行响应的一些操作。最后使得m的执行结果:100,如图3。

    注意:请勿改动main()主方法和其他已有的语句内容,仅在下划线处填入适当的语句。

     class ClassName (1) Runnable {

       int n;

        (2) {

          try{

            Thread. sleep (2000);

            n=100;

          }catch( (3) e) {}

       }

       public static void main(String[ ]args) {

        try{

          ClassName a = new ClassName( );

           (4) 

          threadl. (5) ();

          threadl, join( );

          int m=a.n;

          System. out. println("m=" + m);

        }catch( (3) e){}

       }

     }

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

     【说明】

     设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。

     在Date类中设计如下重载运算符函数:

     Date operator + (int days) : 返回某日期加上天数得到的日期。

     Date operator - (int days) : 返回某日期减去天数得到的日期。

     int operator - (Date&b): 返回两日期相差的天数。

     【程序】

     #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;           //不是闰年

       else

         return0:

     }

     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];

       else

       days +=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;

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

    【说明】

     单击窗体上的“测试”(cmdTest)按钮,出现一个输入框,要求输入一串字符,将该字符串中的非字母字符删除后,显示在窗体中的一个文本框(txtShow)中。

     【程序代码】

     Private Sub cmdTest_Click( )

       Dim strT1 ,strT2 As String

       Dim strCh As (1) 

       Dim intL As Integer

       Dim intl As Integer

       strT1 =(2) ("请输入一串字符","字符串输入")

       intL =(3) 

       strT2 = " "

       For intl = I To intL

         strCh = Mid ( strT1, intl, 1 )

         If(strCh>"A"And (4) ) Or (strCh >"a" And suCh <"z" )Then

           strT2 = strT2 + strCh

         End If

       Next intl

       txtShow. Text=(5) 

     End sub

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

    【说明】

     本应用程序的运行窗口如图2所示。

    窗口中的3个文本框和两个按钮名称分别为Txt_salary、Txt_base、Txt_tax、Cmd_compute和Cmd_quit。运行时,文本框Txt_base存放的是免税金额基数(应扣除的基本费用co)当用户在文本框Txt_salary中输入月收入(工资或薪金)并单击“计算”按钮Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。

     个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为800元,税率如表1所示。

    设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S (元);

     若0<K≤500,则S=K×5%;

     若500<K≤2000,则S=500×5%+(K-500)×10%;

     若2000<K≤5000,则S=500×5%+1500×10%+(K-2000)×15%;

    若5000<K≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;

     例如,某人某月工资总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。

     在开发过程中,需要编写的程序代码如下;

     【程序】

     Option Base 0

     Private Sub Cmd_compute_Click( )

       Dim paylevel,taxPrate

       paylevel = Array(0,500,2000,5000,20000,40000,60000,80000,100000, _1000001)

       taxPrate = Array (5,10,15,20,25,30,35,40,45)

       K=(1) 

       S=0

       If(K>0) Then

         For j = 1 To 9

         If (2) Then

          S = S + (paylevel(j) - paylevel(j -1) ) * taxPrate(j - 1)/100

        Else

          S=S+(3)*taxPrate(j-1)/100

          Exit For

        End If

       Next j

       Ent If

        (4)=Str $(S)

     End Sub

     Private Sub Cmd_quit_Click( )

       End

     End Sub

     Private Sub Form_Load()

       Txt_tax. Text =" "

       Txt_salaw. Text =" "

       Txt_base. Text = 800

       Txt_tax. Locked = True

       Txt_base. Enabled =(5) 

     End Sub

  5. 【说明】

     下面程序的功能是:在含有10个元素的数组中查找最大数,及最大数所在位置(即下标值),最大数可能不止一个。

     例如:若输入

     2 8  5  7  8  4  8  3  2  8

     则应输出

     The max:8

     Total:4 //最大数出现次数

     The positions:1 4 6 9

     【函数】

     #include<stdio.h>

     #define M 10

     int fun(int* a,int * n,int pos[ ])

     {

       int i, k max = - 32767;

        (1) 

       for(i=0;i<M;i++)

         if((2))max=a[i];

       for(i=0;i<M;i++)

         if((3))pos[k++]=i;

       *n=k;

       return max;

     }

     main()

     {

       int a[M],pos[M],i=0j,n;

       printf("Enter 10umber:")

       for(i=0,i<M;i++)scanf("%d",(4));

       j=fun((5));

       printf("The max:%d\n",j);

       printf("Total: %d", n);

       printf("The position:")

       for (i=0; i<n;i++) printf ("%4d", pos[i]);

       printf("\n");

     }

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

     【说明】

     本题给出四个函数,它们的功能分别是:

     1.int push(PNODE*top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。

     2.int pop(PNODE*top,int*e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。

     3.int enQueue(PNODE*tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。

     4.int deQueue(PNODE*tail,int*e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。

      以上四个函数中,返回值为。表示操作成功,返回值为-1表示操作失败。

     栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:

      typedef struct node {

       int value;

       struct node * next;

     } NODE, * PNODE;

     【函数1】

     int push(PNOOE * top,int e)

     {

       PNODE p = (PNODE) malloc (sizeof (NODE));

       if (! p) return-1;

       p->value=e;

        (1);

       *top=p;

       return 0;

     }

     【函数2】

     int pop (PNODE * top,int * e)

     {

       PNODE p = * top;

       if(p == NULL) return-1;

       * e = p->value;

       (2);

       free(p);

       return 0;

     }

     【函数3】

     int enQueue (PNODE * tail,int e)

     {  PNODE p,t;

        t= *tail;

        p = (PNODE) malloc(sizeof(NODE));

        if(!p) return-1;

        p->value=e;

        p->next=t->next;

        (3);

        * tail = p;

        return 0;

     }

     【函数4】

     int deQueue(PNODE * tail,int * e)

     {  PNODE p,q;

        if(( * tail)->next == * tail) return-1;

        p= (* tail)->next;

        q = p ->next;

      * e =q ->value;

        (4)=q->next;

       if(,tail==q) (5);

       free(q);

       return 0;

     }

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

     【说明2.1】

     以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。

     【函数2.1】

     void fun1 (int a[])

     {  int i,j,k,r,x,m;

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

        {   (1);

          k=1;r=i-1;

          while(k<=r)

           {  m=(k+r)/2;

              if(x<a[m])r=m-1;

              else (2);

           }

         for(j=i-1;j>=k;j--)

         a[j+l]=a[j];

          (3);

       }

     }

     【说明2.2】

     以下程序可以把从键盘上输入的十进制数(long型)以二~十六进制形式输出。

     【程序2.2】

     #include<stdio.h>

     main()

     {  charb[16]={'0','l','2','3 ,4,'5','6','7','8','9','A','B','C','D','E','F'};

       int c[64],d,i=0,base;

       long n;

       printf("enter a number:\n");

       scanf("%1d",&n);

       printf("enter new basc:\n");

       scanf("%d", &base);

       do

         {  c[i]=(4);

            i++; n=n/base;

         } while(n!=0);

       printf("transmite new base:\n");

       for(--i;i>=0;--i)

       {  d=c[i];

          printf("%c",(5));

       }

     }

  8. 阅读下列算法说明和算法,将应填入(n)处的语句写在答题纸的对应栏内。

     【说明】

     为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1.n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置(假设R[]中的元素互不相同)。

     【算法】

     1.变量声明

     X:DataType

     i,j,low,high,mid,R[0..n])

     2.每循环一次插入一个R[i]

     循环:i以1为步长,从2到n,反复执行

     ①准备

     X<-R[i];(1);high<-i-1;

     ②找插入位置

     循环:当(2)时,反复执行

      (3);

     若X.key<R[mid].key

     则high<-mid-1

     否则 (4) 

     ③后移

     循环:j以-1为步长,从(5),反复执行

     R[j+1]<-R[j]

     ④插入

     R[low]<-X

     3.算法结束