一起答
主观

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

【说明】

 设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。

 【函数】

 void Locate( int &x)

 {  <结点类型说明>

   * p =first -> next;

   while(p!=frist&&(1))P=P->next;

   if(p! =first)  /*链表中存在x*/

   {(2);

     <结点类型说明>

     * current = P;   /*从链表中摘下这个结点*/

     Current -> prior -> next = current -> next;

     Current -> next -> prior = current -> prior;

     P = current -> prior;   /*寻找重新插入的位置*/

     While(p! =first &&(3))p=p->prior;

     Current-> next =(4);   /*插入在P之后*?

     Current -> prior = P;

     P -> next -> prior = current;

     P->next=(5);

   }

   else printf("Sorry. Not find! \n");   /*没找到*/

 }

试题出自试卷《软件水平考试(初级)程序员下午(应用技术)模拟试卷6》
参考答案
查看试卷详情
相关试题
  1. 阅读以下说明和C++代码,将解答写入对应栏内。

    【说明】

     请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。

     【程序】

     文件search.cpp的内容如下:

     #include <iostream. h >

     int SeqSearch( int list[ ] ,int start,int n,int key)

     {

       for(int i=start;i<=n;i++) //(1)

         {

           if( list[i] = key)//(2)

           {

            return i;

           }

         }

         return -1;

     }

     void main( )

     {

       int A[10]

       int key,count=0,pos;

       cout <<" Enter a list of 10 integers:";

       for(pos=0;pos<10;pos++)

       {

         cin >>A; //(3)

       }

       cout <<" Enter a key; ";

       cin >> key;

       pos=0;

        while(( pos = SeqSearch ( A, pos, 10, key)) !=-1 )

       {

         count ++;

         pos ++;

       }

       cout<<key<<"occurs" <<count<< (count!=1?" times":" time") <<" in the list,"

       << endl;

     }

     第一种情况:输入2 3 12 6 8 45 8 33 7输入key:8

     输出:(4) 

     第二种情况:输入2 3 126 8 45 8 33 7输入k6y:9

     输出:(5)

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

    [说明]

     编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。

     [Java 代码]

     import java. io.* ;

     public class abc

     {

       public static void main ((1))

       {int i, n=10, max=0, min=0, temp=0;

          try {

             BufferedReader br = new BufferedReader (

                    new InputStreamReader ( System.in ) );

             max = min =Integer. parselnt ( br. readLine ( ) );

          }. (2) ( IOExccption e ) {} ;

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

         try {

             BufferedReader br = new (3) (

                    new InputStreamReader ( System. in ) );

             temp =(4) ( br. readLine ( ));

         if (temp>max ) max=temp;

         if (temp<min) (5) 

         } catch (IOException e ) {};

       }

        System.out.println ( "max="+max+"\nmin="+min );

       }

     }

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

    [说明]

     以下是一账号和密码输入的检验程序。对输入的账号和密码规定如下所述。

     (1)账号为不超过6位的数字,密码为4位字符,在本题中,密码假定为“Pass”。

     (2)密码输入时在屏幕上不显示输入的字符,而以“*”代替。

     (3)当输入不正确,如账号为非数字字符或密码不正确时,显示有关信息。

     (4)当输入正确时,关闭密码窗口,显示记事本窗口。

     按要求完成有关控件的其他属性的设置,编写确定按钮的单击事件过程。相关界面如下:

    (可能要用到的单词:MultiLlne,ScrollBars,PasswordChar,MaxLength)密码窗口frmPass控件设置如下表所示。

    记事本窗口frmNotepad 控件设置如下表所示。

    在密码窗口的属性窗口,对密码文本框设置属性MuniLine 为False。

     [Visual Basic 代码]

     Private Sub cmd OK_ Click ( )

        If txtPas. Text= "Pass" Then

         Load frmNotePad

         frmNotePad. Show

         frmPass.Hide

        Else

         MsgBox "密码错误! ", vbExclamation + vbRetryCancel, "重输入密码"

         txtPas. Text= " "

         txtPas. SetFocus

       (1) 

     End Sub

     Private Sub Form_ Load ( )

        txtPas.PasswordChar = "*"

        xtNo.MaxLength = 6

     End Sub

     Private Sub txtNo LostFocus (

        Dim i As Integer, s As String * 1

        Fori= 1 To (2) 

        s = Mid ( txtNo.Text, i, 1 )

        If (3) Or (4) Then

          MsgBox "账号有非数字符号! ", vbExclamation + vbRetryCancel, "1 输入账号"

           (5) 

          txtNo. SetFocus

          Exit Sub

         End If

       Next i

     End Sub

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

    【程序说明】

     函数int commstr(char * str1,char * str2,int * sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。

     函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。

     【程序】

     int strlen(char * s)

     {char *t=s;

       while( * ++);

       return t-s-1;

     }

     int commstr(char) *str1,char *str2,int *sublen

     { char*s1, *s2;

       int count=0,len1 ,len2,k,j,i,p;

       len1:=strlen(str1)

       len2 = strlen(str2);

       if(len1>len2)

          {s1=str1 ;s2=str2;}

       else {len2 = len1;s1 = str2;s2 = str1;}

       for(j=len2;j>0;j--)           /*从可能最长子串开始寻找*/

          {for(k=0;(1)<:len2;k++) /*k为子串s2的开始位置*/

          {for(i=0;s1[(2)]!='\0';i++;) /*i为子串s1的开始位置*/

            { /*s1的子串与s2的子串比较*/

              for (p=0;p<j)&&(3);p++);

              if ((4)) /*如果两子串相同*/

              {for(p=0);p<j;p++}  /*输出子串*/

                printf ("%c",s2[k+p]);

                printf ("\n");

                count++;/*计数增1 */

               }

             }

           }

          if (count>0) break;

         *sublen=(count>0)?(5):0;

       return count;

     }

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

    [说明]

     本程序求3~100之间的所有素数(质数)并统计个数;同时将这些素数从小到大依次写入顺序文件E: \dataout.txt;素数的个数显示在窗体Form1上。

     [Visual Basic 代码]

     Private Sub Command1_ Click ( )

     Dim count as integer, flag as Boolean

     Dim t1 as Integer, t2 as Integer

      (1) 

     Count=0

     For t1=3 to 100

       Flag=Tree

       For t2=2 to Int( Sqr ( t1 ) )

        If (2) Then flag=False

       Next t2

        (3) 

       count=(4) 

       write #1, t1

      End if

     Next t1

      (5) 

     Close #1

        End Sub

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

    【说明】

     设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。

     【函数】

     void Locate( int &x)

     {  <结点类型说明>

       * p =first -> next;

       while(p!=frist&&(1))P=P->next;

       if(p! =first)  /*链表中存在x*/

       {(2);

         <结点类型说明>

         * current = P;   /*从链表中摘下这个结点*/

         Current -> prior -> next = current -> next;

         Current -> next -> prior = current -> prior;

         P = current -> prior;   /*寻找重新插入的位置*/

         While(p! =first &&(3))p=p->prior;

         Current-> next =(4);   /*插入在P之后*?

         Current -> prior = P;

         P -> next -> prior = current;

         P->next=(5);

       }

       else printf("Sorry. Not find! \n");   /*没找到*/

     }

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

    【说明】

     函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

     【函数】

     void QuickSort( int A[ ],int s,int t)

     { int i=s,j=t+1,temp;

       int x=A[s];

       do{

        do i ++ ;while (1);

        do j -- ;while(A[j]>x);

        if(i<j){temp=A[i];(2);(3);}

        }while(i<j);

       A[a] =A[j];A[j] =x;

       if(s<i-1) (4);

       if(j+1<t) (5);

     }

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

    【函数2.1说明】

     函数palindrome(char s[])的功能是,判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:“LEVEL”是回文字符串,而“LEVAL”不是。

     【函数2.1】

     int palindrome( char s[ ] )

     { char * pi, * pj;

       pi=s; pj=s+strlen(s)-1;

       while( pi<pj&&(1)){

         pi ++ ;pj --

       }

       if((2))return -1;

       else return 0;

     }

      【函数2.2说明】

     函数f(char * str,char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。

     例如若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出3个子字符串,分别为“12”、“4”和“5”。

     【函数2.2】

     void f( char * str, char del)

     { int i ,j ,len;

       len = strlen (str)

       i=0;

       while(i < len) {

         while((3))i++; /*忽略连续的标志字符*/

         /*寻找从str[i]开始直到标志字符出现的一个子字符串*/

         j=i+1;

         while(str[j] != del && str[j] ! = '\0')j ++

         (4): '\0';   /*给找到的字符序列置字符串结束标志*/

         printf("%s\t",&str[i]);

         (5);

       }

     }