一起答
主观

阅读下列程序说明和C程序,已知其输出为“1 2 3 4 5 6 7 8 9 10”。将应填入(n)处的字句写在对应栏内。

[说明]

 本程序包含的函数及其功能说明如下:

 (1)函数first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元;

 (2)函数reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与

 已知链表的表元链接顺序相反;

 (3)函数Print_link()用来输出链表中各表元的值;

 (4)函数free_link()用来释放链表全部表元空间。

[程序]

#include <stdio. h >

#include <malloe. h >

typodef struct node {

  int val;

  struct node * next;

} NODE;

void first_insert(NODE * * p,int v)

{ NODE *q = (NODE *) malloe(sizeof(NODE));

 q->val = v; q->next = *p;      /* 为新表元赋值*/

 * p =(1); }

NODE * reverse_copy( NODE * p)

{ NODE * u;

 for(u=NULL; p!=NULL; p=p->next) first_insert((2));

 return u;

}

void printlink(NODE * p )

{ for(;(3)) prinff("%d\t", p->val);

 printf(" \n");

}

void free_link( NODE * p)

{ NODE * u;

 while(p! =NULL) { u=p->next;free(p);(4); }

void main( ) {  NODE * link1 , * link2;

 int i;

 link1 = NULL;

 for(i=1; i<= 10; i+ + )first_insert(&linkl, i);

 link2 = reverse_copy(link1 );

  (5);

 free_link( linkl ) ;free_link(link2); }

试题出自试卷《软件水平考试(初级)程序员下午(应用技术)模拟试卷13》
参考答案
查看试卷详情
相关试题
  1. 阅读以下说明、Java代码和HTML文档,将应填入(n)处的字句写在对应栏内。

    [说明]

     当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在第一个显示面板上显示字符串"HelloWorld";在第二个显示面板上画一条直线。

    [Java代码]

    import java.awt. *;

    import javax.swing. *;

    public class HelloWorldApplet extends JApplet

      pubhc void (1) {

        (2) str="HetloWorld";

        JLabel label = new JLabel(str);

        this. getContentPane().add(label);

      }

    }

    import java.applet.Applet;

    import java.awt.Graphics;

    public class AppletPaint extends (3) {

     public void paint( (4) ) {

      g.drawLine(0,0,300,200);

     }

    }

    [HTML文档]

    <html>

    <head>

    <title> HTML Test Page </title>

    </head>

    <body>

    <applet code="(5)" width="300" height="100">

    </applet>

    <applet code=" AppletPaint.class" width="300" height="100">

    </applet>

    </body>

    </html>

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

    [说明]

     设有一张学生成绩表存放在Acess数据库中,其中包括学生编号、姓名以及各科目考试成绩。下面的应用程序利用数据控件(Data)实现了对这张数据表中记录的增加、删除、修改、查找和刷新操作,其中,删除一条记录后,要求界面显示下一条记录;要查找记录,首先要求用户输入学生姓名,程序查找并显示匹配的第一条记录;执行刷新操作后,要求界面显示数据表的第一条记录。程序的运行界面如下:

        

     在开发过程中,数据控件Datal与成绩数据表相连接,各文本框与数据表相应字段绑定,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDelete、CmdUpdate、CmdFind、CmdRefresh和CmdClose。

    [Visual Basic代码]

    Private Sub CmdAdd_Click()    ’增加新记录

      Datal.Recordset. (1) 

    End Sub

    Private Sub CmdDelete_Click()    ’删除记录

     Data1.Recoldset.Delele

     Data1.Recoldset. (2) 

    End Sub

    Pnvate Sub CmdUpdate_Click()    ’修改记录

     Data1.Reeordset.Edit

     Data1.Recordset.Update

    End Sub

    Private Sub CmdFind_Click()     ’查找记录

     Dim name, search As String

     name = InputBox("请输入要查询的姓名:")

     scarch = "姓名='" & name &"'"’

    Data1.Recordset. MoveFirst

    Dara1.Recordset.FindFirst scarch

      If Data1.Reeoldset. (3) Then

         MsgBox "姓名为" & name &"的记录未找到!"

      End If

    End Sub

    Private Sub CmdRefresh_Click()    ’刷新记录

         (4) 

    End Sub

    Private Sub CmdClose_Click()     ’退出程序

     Daral.Recordset. (5) 

     End

    End Sub

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

    [说明]

     本程序使用类来管理员工的通讯地址信息。已知程序的输出为:

     输出记录:5

     姓名:王丽华

     街道地址:中华路15号

     市:襄樊市

     省;湖北省

     邮政编码:430070

    [C++程序]

    #include < iostream, h >

    #include < string, h >

    class employee.

    { protected:

         char name[10];

         char street[ 20 ];

         char city[10];

         char (1) [10];

         char post[7];

         int no;

       (2):

         (3) (char [] ,char [] ,char [] ,char [] ,char [] ,int);

         void changename ( char n [] ) { strcpy ( name, n); }

         void changestreet( char s[] ) { strcpy(street,s) ;}

         void changecity ( char c [] ) { strcpy ( city, c ); }

         void changeprov( char p [] ) { strcpy(prov,p); }

         void changeno(int nnm) { (4);}

         void display( );

    };

    employee:: (3) (char n[] ,char s[] ,char c[] ,char p1[] ,char p2[] ,int nam)

    { strcpy(name,n);

     strcpy ( street, s);

     strcpy ( city, c);

     strcpy ( prov, p1 );

     strcpy ( post, p2 );

     no = nam; }

    void employee:: display( ) { cont< <"输出记录: "< <no< <endl;

     cout< < "姓名: "< < name < < endl;

     coot < < "街道地址: "< < street < < endl;

     cout < < "市: "< < city < < endl;

     cout< <"省: "< <prov < <endl;

     cout < <"邮政编码: "< < post < < endl;

    }

    void main( ) {  employee cmp("王华" ,"中华路15号" ,"武汉市","湖北省","430070", 1 );

      emp. changename( "五丽华" );

      emp. changecity ( "襄樊市" );

      emp. changeno(5);

     (5);

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

    [说明]

     本程序提供了三阶矩阵加、减及乘运算的功能。用户单击“生成操作数”按钮将随机生成两个矩阵(即操作数1和操作数2),再单击某一矩阵运算按钮后,程序将输出相应运算的结果。程序运行界面如下:

       

     开发过程中,界面上从左至右三个文本框分别取名为Text1至Text3,“生成操作数”按钮名为 CmdNew,“+”、“-”和“*”构成按钮控件组,分别名为CmdOperate(0)、CmdOperate(1)和CmdOperate(2)。

     已知n阶矩阵加、减法运算法则是对应位置的元素相加、减;n阶矩阵的乘法C=AB有公式:Cij=AilBij+AilBij+…+An1Bnj其中记号Xij表示矩阵X第i行第j列上的元素。程序使用的主要变量是三维数组matrix(3,3,3),其元素matrix(i,j,k)代表第i个矩阵j行k列上的元素,这里i,j,k均从0开始计数,第0、1、2个矩阵分别表示操作数1、操作数2和结果矩阵。

     代码中用到的子过程及其功能说明如下:

      (1) Sub newMatrices():随机产生矩阵运算的两个操作数;

      (2) Sub printOut(txt As TextBox, i As Integcr):定义矩阵i向文本框txt的输出格式;

      (3) Sub operate(operation As String):计算并输出矩阵运算结果。

    [Visual Basic代码]

    Dim matrix(3, 3, 3) As Integer

    Sub newMatrices()

      ……… End Sub

    Sub printOut(txt As TextBox, i As Integer)

      ……… End Sub

    Sub operate(operation As String)

    Dim i, j, k As Integer

    For i = 0 To 2

     For j = 0 To 2

      (1) 

      Case"+": matrix(2, i, j) = matrix(0, i, j) + matrix(1, i, j)

      Case"-": matrix(2, i, j) = matrix(0, i, j) - matrix(1, i, j)

      Case"*"

        matrix(2, i, j) = 0

        For k = 0 To 2

        matrix(2, i, j) = matrix(2, i, j) +(2) 

        Next

      End Select

        Next

      Next

      printOut (3) 

    End Sub

    Private Sub CmdNew_Cliek()  ’“生成操作数”按钮的单击事件响应代码

      (4) 

      printout Text1,0

      printout Text2,1

    End Sub

    Private Sub CmdOperale_Click(Index As Integer)  ’矩阵运算按钮组的单击事件响应代码

      operate CmdOperate(Index).(5) 

    End Sub

  5. 阅读下列程序说明和C程序,已知其输出为“1 2 3 4 5 6 7 8 9 10”。将应填入(n)处的字句写在对应栏内。

    [说明]

     本程序包含的函数及其功能说明如下:

     (1)函数first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元;

     (2)函数reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与

     已知链表的表元链接顺序相反;

     (3)函数Print_link()用来输出链表中各表元的值;

     (4)函数free_link()用来释放链表全部表元空间。

    [程序]

    #include <stdio. h >

    #include <malloe. h >

    typodef struct node {

      int val;

      struct node * next;

    } NODE;

    void first_insert(NODE * * p,int v)

    { NODE *q = (NODE *) malloe(sizeof(NODE));

     q->val = v; q->next = *p;      /* 为新表元赋值*/

     * p =(1); }

    NODE * reverse_copy( NODE * p)

    { NODE * u;

     for(u=NULL; p!=NULL; p=p->next) first_insert((2));

     return u;

    }

    void printlink(NODE * p )

    { for(;(3)) prinff("%d\t", p->val);

     printf(" \n");

    }

    void free_link( NODE * p)

    { NODE * u;

     while(p! =NULL) { u=p->next;free(p);(4); }

    void main( ) {  NODE * link1 , * link2;

     int i;

     link1 = NULL;

     for(i=1; i<= 10; i+ + )first_insert(&linkl, i);

     link2 = reverse_copy(link1 );

      (5);

     free_link( linkl ) ;free_link(link2); }

  6. 阅读下列程序说明和C代码,回答问题1~2。

    [说明]

     本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宜布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9:重复上述步骤,再取走最小数3,宣布它为素数,井取走3的倍数,于是留下5、7。反复重复上述步骤,直至筛中为空时,工作结束,求得2至 10中的全部素数。

     程序中用数组sieve表示筛子,数组元素sieve[i]的值为1时,表示数i在筛子中,值为-1时表示数i已被取走。

    [程序]

    #include < stdio, h >

    #define MAX 22500

    main( )

    { unsigned int i , range , factor , k;

      int sieve[MAX];

      prinff( "please input the 'range:" );

      scanf(" %d" ,&range);      /* range 指出在多大的范围内寻找素数* /

      for(i=2 ;i<=range; i++) (1); /*筛子初始化*/

      factor = 2 ;

     while (factor < = range) {

      if((2)= = 1)l     /*筛子中最小数是素数*/

          pfinff( "% d\t" ,factor);

          k = factor;

          while (k < =range) {     /* 取走素数的倍数*/

          (3);

            k=(4);

     factor + +;

     }

    }

    [问题1]将程序代码中的(1)~(4)处补充完整。

    [问题2]在上述代码的执行过程中,若factor为5,从筛子中取走的头两个数是5和(5)。

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

    [说明]

     函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。

    [函数2.1]

    void PrintPrime(int UpBound)

     printf("2," );

     for(i=3; i<UpBound; i+ =2) {

      int k = sqrt(i);

      for(j=3; j<= k;(1)) /*检查i是否有3到k以入的奇因数*/

        if((2)) break;

      fi((3)) printf("%d", i);

    [函数2.2说明]

     递归函数invert(int a[],int k),int k)的功能是将数组a中的前k个元素逆置。

    [函数2.2]

    void invert(int a[ ], int k)

    { int t;

     if ((4)) {

        invert((5));

        t=a[0];

      a[0] =a[k-1];

        a[k-l]=t;

     }

    }

  8. 阅读以下说明和流程图,回答问题。

    [说明]

     从键盘输入一个高精度正整数n,去掉其中s个数字后按原左右次序再组成一个新的正整数。对给定的n,要寻找一种方案,使得余下的数字组成的新数最小。

     算法分析:

     每次删除一个数字,选择一个使余下的数最小的数字作为删除对象。当s=1时,在n中删除哪一个数字能达到最小的目的?从左到右每相邻的两个数字比较:若出现减,郎左边大于右边,则删除左边的大数字;若不出现减,即所有数字全部升序,则删除最右边的大数字。当s>l(当然小于n的位数),按上述操作一个一个删除,删除一个达到最小后,再从头即从串首开始,删除第2个,依此分解为s次完成。若删除不到s个后已无左边大于右边的减序,则停止删除操作,打印余下串的左边L-s个数字即可。(x为统计删除数字的个数,m=1表示脱离循环,L为n的长度)。

    [流程图]

    [问题]

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