一起答
主观

[说明1]

 函数void convelt(chal *a,int n)是用递归方法将一个正整数n按逆序存放到一个字符数组a中,例如,n=123,在a中的存放为'3'、'2'、'1'。

 [C函数1]

 void convert(char *a,int n)

 { int i;

  if((i=n/10)!=0; convert(  (1) ,i);

 *a= (2) ;

 }

 [说明2]

 函数int index(char *s,char *t)检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。

 [C函数2]

 int index(char *s,char *t)

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

 for(i=0;s[i]!:'\0';i++)

 ( for( (3) ;(t[k]!='\0')&&(s[j]!='\0')&&( (4) );j++,k++);

  if( (5) ) return(i);

 }

 return(-1);

}

试题出自试卷《2013年上半年软考《程序员》下午模拟试卷一》
参考答案
查看试卷详情
相关试题
  1. 下面程序实现十进制向其他进制的转换。

     [Java程序]

     C1ass Node{

      int data;

      Node next;

    }

    class Transform{

     private Node top;

     publiC void print(){

       Node P;

       while(top !=null){

         P=top;

         if(P.data>9)

           System.out.print((char)(p.data+55));

         else

           System.out.print(p.data);

         top=P.next;

       }

     }

     public void Trans(int d,int i)(//d为数字;i为进制

       int m;

        (1) n=false;

       Node P;

       while(d>0){

          (2) ;

         d=d/i;

         P=flew Node();

         if( (3) ){

           P.data=m;

            (4) ;

           top=P;

           n=true;

       }

       else{

         p.data=m;

          (5) ;

         toP=P;

       }

      }

     }

    }

  2. 为参加网球比赛的选手安排比赛日程。

     设有n(n=2k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手赛一场,且每位选手每天赛一场,不轮空。试按此要求为比赛安排日程。

     设n位选手被顺序编号为1,2,…,n。比赛的日程表是一个n行n-1列的表,i行j列的内容是第i号选手第j天的比赛对手。用分治法设计日程表,就是从其中一半选手(2m-1位)的比赛曰程,导出全体(2m位)选手的比赛日程。从只有2位选手的比赛日程出发,反复这个过程,直到为n位选手安排好比赛日程为止。

     [C函数]

     #include<stdio.h>

     #define MAXN 64

     int a[MAxN+1][MAXN];

     void main()

     { int twoml,twom,il,j,m,k;

       printf("指定n(n=2的k次幂)位选手,清输入k。\n");

       scanf("%d",&k);

       a[1][1]=2;  /*预设2位选手的比赛日程*/

       a[2][1]=1;

       m=1;twoml=1;

       while(m<k){

       (1) ;

       twoml+=twoml;  /*为2m位选手安排比赛日程*/

      (2) ;

     /*填日程表的左下角*/

     for(il=twoml+l;il<=twom;i1++)

      for(j=1;j<=twoml-1; j++)

       a[i1][J]=a[i1-twoml][j]+twoml;

      (3) ;

     for(i1=2;i1<=twom;i1++)a[i1][twoml]=a[i1-1][twom1]+l;

      for(j=twoml+1;j<twom;j++){

       for(i1=1;i1<twoml;i1++) a[i1][j]=a[i1+1][j-1];

      (4) ;

      }

     /*填日程表的右下角*/

     for(j=twoml;j<twom;j++)

      for(ii=i;i1<=twoml;i1++)

       (5) ;

     for(i1=1;i1<=twom;i1++){

      for(j=1;J<twom;j++)

       printf("%4d",a[i1][J]);

      printf("\n");

     }

     printf("\n");

     }

    }

  3.  下而程序实现十进制向其他进制的转换。

     [C++程序]

     #include"ioStream.h"

     #include"math.h"

     #include <conio.h>

     typedef struct node{

      int data;

      node *next;

     }Node;

     class Transform

     {

     public:

      void Trans(int d,int i); //d为数字;i为进制

      void print();

     private:

      Node *top;

     };

     void Transform.:Trans(int d,int i)

     {

      int m,n=0;

      Node *P;

      while(d>0)

      {

        (1) ;

       d=d/i;

       p=new Node;

       if(!n){

         P->data=m;

          (2) j

          (3) ;

         n++;

      }

      else{

         p->data=m;

          (4) ;

          (5) ;

      }

     }

    }

     void Transform.:print()

    {

    Node *P;

     while(top!=NULL)

    {

     p=top;

     if(P->data>9)

     cout<<data+55:

     else

     cout<<data;

     top=p->next;

     delete P;

    }

    }

  4.  函数Node *difference(A,B)用于求两个集合之差C=A-B,即当且仅当e是A中的一个元素,但不是B中的元素时,e是C中的元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之间按递增排列。执行C=A-B之后,表示集合A和B的链表不变,若结果集合C非空,则表示其链表根据元素之值按递增排列。函数append()用于在链表中添加节点。

     [C函数]

     typedef struct node{

        int element;

        struct node *link;

     }Node;

     Node *A,*B,*C;

     Node *append(last,e)

     Node *last;

     int e;

     {last->link=(Node *)malloc(sizeof(Node));

       last->link->element=e;

       return(last->link);

     }

     Node *difference(A,B)

     Node *A,*B;

     { Node *c,*last;

     C=last=(Node *)malloc(sizeof(Node));

     while( (1) )

     if(A->element<B->element){

      last=append(last,A->element);

      A=A->link:

     }

     else if( (2) ){

      A:A->link;

      B:B->link;

     }

     elSe

      (3) ;

     while( (4) ){

      last=append(last,A->element);

      A=A->link:

     }

      (5) ;

     last=c;

     c=c->link;

     free(last);

     return(c);

    }

  5.  下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。

     注:返回值用pos表示。

     [问题]

     将流程图的(1)~(5)处补充完整。

  6. [说明1]

     函数void convelt(chal *a,int n)是用递归方法将一个正整数n按逆序存放到一个字符数组a中,例如,n=123,在a中的存放为'3'、'2'、'1'。

     [C函数1]

     void convert(char *a,int n)

     { int i;

      if((i=n/10)!=0; convert(  (1) ,i);

     *a= (2) ;

     }

     [说明2]

     函数int index(char *s,char *t)检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。

     [C函数2]

     int index(char *s,char *t)

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

     for(i=0;s[i]!:'\0';i++)

     ( for( (3) ;(t[k]!='\0')&&(s[j]!='\0')&&( (4) );j++,k++);

      if( (5) ) return(i);

     }

     return(-1);

    }