一起答

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

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

     【说明】

     源程序文件vectorClass.cpp,其中定义了用于表示向量的类vector,但类vector的定义并不完整。请按要求完成下列操作,将类vector的定义补充完整,并给出输出结果。

     1.补充类vector的构造函数,该函数有参数x和y,它们都是int型的数据,默认值都为 0。请使用参数列表的形式分别将类的数据成员a和b分别初始化为参数x和y的值。

     2.完成类vector的成员函数input(int x,int y)的定义,将int型的参数x和y分别赋值给数据成员b和a。

     3.完成类vector的友元函数friend double Multiply(vector &x,vector &y)的定义,先定义 double型的临时变量c,然后将参数对象x和对象y的数据成员a与b分别相乘再相加后赋值给c,最后返回c的值。

     注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

     源程序文件vectorClass.cpp清单如下:

     #include < iostream. h >

     class vector

     {

       int a;

       int b;

     public:

        vector((1)):(2) 

       {

       }

       void input(int x, int y)

       {    (3) 

       }

       void output( )

       {

         cout<<'('<<a<<','<<b<<")" <<endl;

       }

       friend double Multiply(vector &x,vector &y);

     };

     double Multiply(vector &x,vector &y)

     {

       double c;

        (4) 

       return c;

     }

     void main( )

     {

       vector x(10,20),y;

       double d;

       y. input(2,3)

       d=Multiply(x,y);

       cout<<d<<endl;

     }

    程序输出结果是:(5)。

  2. 阅读以下说明和Java代码,将解答写入对应栏内。

    【说明】

     请完成下列Java程序。程序的执行结果是生成一个具有一个TextField类型的对象in、 Button类型的对象btn和Label类型的对象out图形用户界面,程序的功能是计算用户输入数的平方,如图3所示。

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

     【程序】

     import java. awt.*;

     import java, awt. event.*;

     public class square {

       public static void main(String args[ ]){

        (1) 

       }

     }

     class AppFrame. extends Frame{

       TheAdapterTest listener = new TheAdapterTest( );

       Text Field in = new TextField (5);

       Button btn = new Button("计算");

       Label ut = new Label("用于显示计算结果");

     public AppFrame( )

       {

       setLayout( new FlowLayout( ));

       add(in);

       add(btn)

       add(out);

       btn. addActionListener( new BtnActionAdapter( ));

       addWindowListener (listener);

       setSize(400,100);

       show( );

     }

     class BtnActionAdapter implements (2) {

      public void actionPerformed((3)) {

       String s = in. getText( );

       double d =(4) 

       double sq = d * d;

       out. setText(d+"的平方是:" +sq);

       }

     }

     class TheAdapterTest extends WindowAdapter

     {

       public void windowCIosing((5))

      {

        System. exit(1)

      }

     }

     }

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

    [说明]

     字符组合:程序界面如图示,在文本框Text1中输入若干个任意字符,单击“颠倒”按钮,将这些字符按相反的顺序显示在标签Lable1 中,并在标签Labs1 2处显示字符的个数。例如:输入abcabc2,显示为 2cbabca,组成字符数为4。

         

    [Visual Basic 代码]

     Private Sub cmdshow_ Click (

       Dim n As Integer

       Dim I As Integer

       Dim str1 As String

       N=Len ( Text1.Text )

       For I=n To Step- 1

       Str1=(1) 

       Next I

       Labe11. Caption=Str1

     End Sub

     Private Sub cmdcount_ Click ( )

      Dim n As Integer

      Dim in As Integer

      Dim i As Integer

      Dim j As Integer

      Dim flag As Integer

      Dim str1 As Integer

      Dim str2 As Integer

      N=(2) 

      Str1 =Mid$ ( Text1.Text, i. 1

      For I =2 To n

       Str2=mid$ ( Text1,Text,I,1

       M=Len (str1)

       (3) 

       For j=1 To m

        If (4) Then flag= 1; Exit For

       Next j

       If flag<>1 then str1=str1& str2

      Next I

      Lable2.Caption=(5) 

     End Sub

  4. 阅读以下说明及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

      (2) 

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

         If (3) Then flag=False

       Next t2

        (4) 

       count=count +1

       write #1, t1

      End if

     Next t1

      (5) 

     Close #1

     End Sub

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

    【说明】

     本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件名、文件长度和在合并文件中的位置(偏移量)。其结构为:

     typedef struct {char fname [256] /*原始文件名*/

       long length;          /*原始文件长度(字节数)*/

       long offset;          /*原始文件在合并文件中的位置(偏移量)*/

     }FileInfo;

     在合并文件最后存储如下一个特殊的标志信息作为合并文件的结束标记:

       FileInfo EndFlag={"Combined File",0,_offset};

     其中_offset是第一个原始文件的控制信息在合并文件中的位置(偏移量)。

     启动本程序的命令行的格式是:

       程序名  合并文件名  [原始文件名]

     如果不指定原始文件名,默认恢复合并文件中的所有原始文件。

     程序中涉及的部分文件操作的库函数简要说明如下:

     int fread(void * buffer,int size,int count,FILE * fbin):从二进制文件流fbin中读取 count块长度为size字节的数据块到buffer指向的存储区。返回值为实际读取的数据块数。

     int fwrite(void * buffer,int size,int count,FILE * fbin):各参数和返回值的意义与fread相同,但对文件进行写操作。

     int fseek(FILE * fbin,long offset,int position):将文件流fbin的读/写位置以position为基准移动offset字节。position的值可以是SEEK_SET(文件头),SEEK_CUR(当前位置), SEEK_END(文件尾);offset为正,表示向文件尾方向移动,为负表示向文件头方向移动,为零表示到基准位置。

     long ftell(FILE * fbin):返回文件流fbin的当前读/写位置(相对于文件头的偏移量)。上述偏移量均以字节为单位,即偏移字节数。

     【程序】

     #include <stdio. h>

     #include <string. h>

     typedef struct { char fname[256];long lengt;long offset;

     } Filelnfo;

     void copyfile( FILE*fin, FILE * fout,int fsize)

     { char buf[1024];int siz=1024;

        while(fsize !=0){ /*每次复制siz个字节,直至复制完fsize个字节*/

         if(siz >fsize) (1);

         fread(buf,1,siz,fin); fwrite(buf,1,siz,fout);

         fsize=(2);}

     }

     int dofile(FILE * fin,Filelnfo * inp)

     {  long offset;

        FILE * fout;

        if (( fout = fopen ( inp - > fname ,"wb" ))==NULL) {

          printf("创建文件错误: %s\n" , inp -> fname);

          return 1;

        }

        offset=(3); /*保留合并文件读/写位置*/

        fseek((4)); /*定位于被恢复文件首*/

        copyfile ( fin, fout, inp - > length);

        fclose(fout);

        printf("\n ---文件名: %\n 文件长: %ld. \n",inp -> fname, inp -> length);

        (5); /*恢复合并文件读/写位置*/

        return 0;

     }

     int main( int argc, char * argv[ ])

     { Filelnfo finfo;

       char fname[256] ;FILE * fcmbn;

       if(argc <2) { printf("输入合并文件名:" ) ;scanf("%s" ,fname);

       else strcpy(fname,argv[1]);

       if((fcmbn = fopen(fname,"rb" )) == NULL) {

         printf("文件打开错误: %s\n" ,fname);return 1;

        }

        fseek(fcmbn, -sizeof(Filelnfo),SEEK_END); /*定位于合并文件末尾的标志信息*/

        fread(&finfo,1,sizeof(Filelnfo) ,fcmbn);

        if(finfo. length!=0||strcmp(finfo. fnane," CombinedFile" )){

         printf("指定的文件不是合法的合并文件\n");

         fclose (fcmbn); return 2;

        }

        fseek(fcmbn,finfo. offset,SEEK_SET); /*定位于首个原始文件的控制信息*/

        for(;;){ /*恢复一个(argc>2)或全部(argc=2)原始文件*/

          fread ( &finfo,1, sizeof (Fitelnfo), fcmbn);

          if(finfo, length ==0) break;

          if (argc> 2 && strcmp(finfo. fname,argv[2] )) continue;

          if (dofile ( fcmbn, &finfo)!=0) break;

     }

     fcolse(fcmbn);return 0;

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

    【说明】

     函数diff的功能是:根据两个由整数(都大于-32768)按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求13中的所有整数都是L1,并且不是 L2中的整数,还要求L3中的所有整数都两两不等。

     【函数】

     #include < malloc. h >

     typedef struct node {

       int d;

       struct node * next

     } Node;

     void diff(Node *A,Node * B,Node * * r)

     {

       int lastnum;

       Node * p;

       *r = NULL;

       if( ! A) return;

       while((1))

         if(A->d < B ->d)

         {

           lastnum =A -> d;

           p= ( Node * ) malloc( sizeof(Node) );

           p->d = lastnum;

           p->next= *r;(2);

           do

             A = A -> next;

           while((3));

         }

         else if(A->d > B->d)

           B=B- >next;

         else {

            (4);

           lastnum=A -> d;

           while ( A && A->d = = lastnum) A=A-> next;

          }

       while(A)

       {

         lastnum=A->d;

         p=( Node * ) malloc( sizeof(Node) );

         p-> d = lastnum;

          (5);

         *r=p;

         while (A && A->d = = lastnum) A=A->next;

       }

     }

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

    【说明】

     该程序运行后,输出下面的数字金字塔

                    1

                   1 2 1

                  1 2 3 2 1

                 1 2 3 4 3 2 1

                   ......

          1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1

     【程序】

     #include < stdio. h >

     main ( )

      } char max, next;

       int i;

       for( max = '1'; max <= '9'; max + +)

       { for(i=1;i<=20-(1);++i)

          printf(" ");

        for(next =(2);next <=(3);next ++)

          printf(" %c" ,next);

        for(next=(4);next>=(5);next--)

          printf(" %c" ,next);

        printf(" \n" );

       }

     }

  8. 阅读下列函数说明和C代码,把应填入其中(n)处的字句写在答卷的对应栏内。

    【函数1.1说明】

     函数strcpy(char*to,char*from)将字符串from复制到字符串to。

     【函数1.1】

     void strcpy(char*to,char*from)

     { while ((1));}

     【函数1.2说明】

     函数merge(int a[],int n,int b[],int m,int*c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。

     【函数1.2】

     void merge(int a[ ],int n,int b[ ] ,int m,int * c)

     { int i,j;

      for(i=j=0;i<n && j<m;)

        *c++=a[i] <b[j]?a[i++]:b[j++];

      while((2))*c++=a[i++];

      while((3))*c++=b[j++];

     }

      【函数1.3说明】

     递归函数sum(int a[],int n)的返回值是数组a[]的前n个元素之和。

     【函数1.3】

     int sum(int a[] ,int n)

     { if( n >0) return (4);

      else (5);

     }

  9. 阅读下列说明和流程图,将应填入(n)处的语句写在对应栏内。

    【说明】

     下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按从小到大的顺序排列,M是给定的常数。

     【流程图】

     此流程图1中,比较“K(I)+K(J):M”最少执行次数约为(5)。