一起答

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

  • 卷面总分:75分
  • 浏览次数:0
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:37次
  • 作答时间:150分钟
试卷简介
部分试题预览
  1. 阅读以下说明和Java 代码,将应填入(n)处的字句写在对应栏内。

    [说明]

     用输入/输出写一个程序,让用户输入一些姓名和电话号码。每一个姓名和号码将加在文件里。用户通过点“Done”按钮来告诉系统整个列表已输入完毕。 如果用户输入完整的列表,程序将创建一个输出文件并显示或打印出来。格式如:555,1212,Tom 123-456-7890,Peggy L.234-5678,Marc 234-5678,Ron 876-4321,Beth&Brian 33.1.42.45.70,Jean-Marc。

     [Java 代码]

      import java. io.*;

      class Phones

      {

      statlc FileOutputStream fos;

      public static final int lineLength =81;

      public static void main (String args []) throws IOExeption

      {

       byte [] phone=new byte [lineLength];

       byte [] name=new byte [lineLength];

       int i;

       try

       {

        fos= new FileOutputStream ("phone. numbers");

     }

       catch (FileNotFoundException e)

       while (true)

       {

        (1) ("Enter a name (enter 'done' to quit)");

        (2) (name);

        if ("done". equalsIgnoteCase (new String (name,0,0,4)))

        {

         break;

        }

        System.err.println ("Enter the phone number");

        readLine (phone);

        for (int i=0;phone [i]!=0;i++)

       {

        (3);

       }

        fos.write (',');

        for (int i=0 (4);i++)

       {

        fos. write (name [i]);

       }

        fos. write ('\n');

       }

        fos. close();

       }

       private static void readLine (byte line []) throws IOException

     {

       int i=0,b=0;

       while ((i<(5))&& ((b=System.in.read ())!='\n'))

       {

        line[i++] = ( byte ) b;

       }

        line[i]= ( byte ) 0;

       }

     }

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

    [说明]

     试从含有n个int 型数的数组中删去若干个成分,使剩下的全部成分构成一个不减的子序列。设计算法和编写程序求出数组的不减子序列的长。

     [C++ 程序]

     #include<stdio.h>

     #define N 100

     int b[]={9,8,5,4,3,2,7,6,8,7,5,3,4,5,9,1};

     int a [N];

     #define n sizeofb/sizeofb[0]

     void main ( )

     {

     kit k,i,j;

      (1) 

      (2) 

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

     {

     for ( j=k;(3); j--);

      (4); /*长为 j+1 的子序列的终元素存储在 a[j+1]*/

     if ((5)k++; /*最长不减子序列长 k 增1*/

     }

     printf ( "K = %d\n ",k );

     }

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

    【说明】

     以下程序为求行列式X(5,5)的值S。

     【Visual Basic代码】

       Private Function col ( byval x ( 5,5 ) as integer ) as long

         dim fesult as long

         dim temp as long

         dim I as integer

         dim j as integer

         dim k as imeger

         result = 0

         for I = to 5

              (1) 

            for j = 1 to 5

               if I+j>6 then

                  k= ( 1+j ) mod 5

               else

                  k=1

               endif

               temp=temp*x ( k,j )

                  (2) 

            result=(3) 

             (4) 

             (5) 

       End function

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

    【说明】

     在窗体上设计两个文本框和两个标签,标签上显示:“摄氏温度:”和“华氏温度:”,文本框一个用于输入摄氏温度数,一个用于输出对应的华氏温度。摄氏温度与华氏温度的转换公式为:c=(5/9)×(f-32)

     要求:对输入的摄氏温度数有检查功能,以拒绝接收非数字字符。运行界面如图所示。

    【Visual Basic代码】

     Private Sub Commandl_Click ()

     Text1 = ""

     Text2 = ""

     Text1.Enabled = True

     Text2.Enabled = True

     Text1.SetFocus

     End Sub

     Private Sub Command2 Click ()

     End

     End Sub

     Private Sub Form. Load ()

     Text1 = ""

     Text2 = ""

     Text1.Enabled = False

     Text2.Enabled = False

     End Sub

     Private Sub Textl_Change ()

     Text2.Text = (1) 

     End Sub

     Private Sub Textl_KeyPress (KeyAscii As (2) )

     If (3) Then

    If Chr ( KeyAscii ) < "0" Or (4) Then

     (5) 

    End If

     End If

     End Sub

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

    【说明】

     以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。

     【程序】

     #include < stdio. h >

     main( )

     { FILE * fp;

       char str[100]; int i=0;

       if((fp=fopen("text.txt"(1))) ==NULL)

       { printf("can't open this file. \n") ;exit(0) ;}

       printf(" input astring: \n" ); gest(str);

       while( str[i] )

       { if(str[i] >='a' && str[i] <='z')

         str[i]=(2);

         fputc(str[i],(3));

         i++;

       }

       fclose(fp);

       fp=fopen(" test.txt",(4));

       fgets(str, 100, fp);

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

        (5);

     }

  6. 阅读下面的要求,在______填入适当的语句。

    要求执行该段程序后能弹出一个对话框,对话框中有“确定”和“取消”按钮,以及一个带问号的图标,并要求第一个按钮为默认按钮。

     Private Sub Form_Load()

     MsgBox"要重新输入吗?"______,"询问"

     End Sub

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

    【说明】

     函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素s[0]~9[n-1]循环向右平移k个位置。

     为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标 p,并将a[P]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至 a[p];依次类推,直到将a[0]的备份值移到正确位置。

     若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至9[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。

     若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。

     例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。

    void rcr( int a[] ,int n,int k)

     { int i,j,t,temp,count;

       count =0;    /*记录移动元素的次数*/

       k=k%n;

       if((1)){    /*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/

        i=0

        while(count<n) {

        j=i;t=i;

        temp =a[1]; /*备份a[i]的值*/

        /*移动相关元素,直到计算出a[i]应移动到的目标位置*/

        while((j=(2))! =i){

         a[t]=a[j];

         t=(3);

         count++;

        }

        (4)= temp;count ++;

        (5);

        }

      }

     }

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

    【说明】

     函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:

     #define MAXSIZE 32

     typedef struct {

       int * elem;   /*栈的存储区*/

       int max;    /*栈的容量,即栈中最多能存放的元素个数*/

       int top;    /*栈顶指针*/

     }Stack;

     【代码】

     int InitStack(Stack * S,int n)  /*创建容量为n的空栈*/

     { S -> elem = (int*) malloc(n*sizeof(int));

       if(S -> elem == NULL) return-1

       S->max=n;(1)=0;return 0;

     }

     int Push (Stack * s,int item)   /*将整数item压入栈顶*/

     { if(S->top==S->max){printf("Stack is full! \n");return-1;}

       (2)= item; return 0

     }

     int StackEmpty(Stack S) { return(! S. top)? 1:0; }/*判断栈是否为空*/

     int Pop(Stack * S)     /*栈顶元素出栈*/

     { if(! S->top) { printf("Pop an empty stack! \n") ;return -1;}

       return (3);

     }

     void MultibaseOutput(long n,int B)

     { int m;Stack S

       if (InitStack(&S, MAXSIZE)) {printf ("Failure! \n"); return;}

       do {

         if( Push( &S,(4))){printf("Failure! \n"); return;}

         n=(5);

       }while(n!=0);

       while(!StackEmpty(S)){   /*输出B进制的数*/

         m = Pop(& S);

         if(m<10) printf("%d",m) ;/*小于10,输出数字*/

         else printf("%c",m+55); /*大于或等于10,输出相应的字符*/

       }

       printf( "\n") ;

     }

  9. 阅读下列算法说明和算法,将应填入(n)处的字句写在对应栏内。

    【算法说明】

     为便于描述屏幕上每个像素的位置,在屏幕上建立平面直角坐标系。屏幕左上角的像素设为原点,水平向右方向设为X轴,垂直向下方向设为Y轴。

     设某种显示器的像素为128×128,即在每条水平线和每条垂直线上都有128个像素。这样,屏幕上的每个像素可用坐标(x,y)来描述其位置,其中x和y都是整数,0≤x≤127, 0≤y≤127。

     现用一维数组MAP来存储整个一屏显示的位图信息。数组的每个元素有16位二进位,其中每位对应一个像素,“1”表示该像素“亮”,“0”表示该像素“暗”。数组MAP的各个元素与屏幕上的像素相对应后,其位置可排列如下:

     MAP(0),MAP(1),…,MAP(7)

     MAP(8),MAP(9),…,MAP(15)

     MAP(1016),MAP(1017),…,MAP(1023)

     下述算法可根据用户要求,将指定坐标(x,y)上的像素置为“亮”或“暗”。

     在该算法中,变量X,Y,V,S,K都是16位无符号的二进制整数。数组BIT中的每个元素BIT(K)(K=0,…,15)的值是左起第K位为1,其余位均为0的16位无符号二进制整数,即BIT(K)的值为215-k。

     【算法】

     第1步 根据用户指定像素的位置坐标(x,y),算出该像素的位置所属的数组元素 MAP(V)。这一步的具体实现过程如下:

     1.将x送变量X,将y送变量Y;

     2.将Y左移(1)位,仍存入变量Y;

     3.将X右移(2)位,并存入变量S;

     4.计算Y+S,存入变量V,得到像素的位置所属的数组元素MAP(V)。

     第2步 算出指定像素在MAP(V)中所对应的位置K(K=0,…,15)。这一步的具体实现过程如下:将变量X与二进制数(3)进行逻辑乘运算,并存入变量K。

     第3步 根据用户要求将数组元素MAP(V)左起第K位设置为“1”或“0”。这一步的具体实现过程如下:

     1.为把指定像素置“亮”,应将MAP(V)与BIT(K)进行逻辑(4)运算,并存入MAP(V)。

     2.为把指定像素置“暗”,应先将BIT(K)各位取反,再将MAP(V)与BIT(K)进行逻辑(5)运算,并存入MAP(V)。