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

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数: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;

   }

 }

1

阅读下列函数说明和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);

    }

  }

 }

1

阅读以下说明和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") ;

 }

1

阅读下列算法说明和算法,将应填入(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)。