更多“折半查找function binsearch(k:keytype):integer;var low,hig,mid:integer;”相关问题
  • 第1题:

    如果Add函数的调用代码为:func main() {var a Integer = 1var b Integer = 2var i interface{} = asum := i.(Integer).Add(b)fmt.Println(sum)}则Add函数定义正确的是()

    A.type Integer intfunc (a Integer) Add(b Integer) Integer { return a + b}

    B.type Integer intfunc (a Integer) Add(b *Integer) Integer { return a + *b}

    C.type Integer intfunc (a *Integer) Add(b Integer) Integer { return *a + b}

    D.type Integer intfunc (a *Integer) Add(b *Integer) Integer { return *a + *b}


    参考答案:A

  • 第2题:

    下列过程语句中正确的是( )。

    A.Sub fl(By Val () As Integer)

    B.Sub fl(n() As Integer)As Integer

    C.Function fl(fl As Integer)As Integer

    D.Function fl(By Val f As Integer)


    正确答案:D
    解析:Sub过程定义的一般格式如下:[Private|Public|Friend][Static]Sub过程名[(参数表)]语句块[ExitSub][语句块]EndSub其中,Private|Public|Friend说明Sub过程的访问权限,如果没有Private|Public|Friend显式指定,则Sub过程按缺省(公用的)访问权限定义。参数表含有在调用时要传递给该Sub过程的参数的类型和个数,多个变量则用逗号隔开。参数的格式为:[ByVal|ByRef]变量名[()][As数据类型]格式中[]里的内容表示可选,变量可以是简单变量或者数组.选项A)中参数没有参数名,所以是错误的;因为Sub过程没有返回值,所以选项B)是错误的。Function过程的定义的一般格式如下:[Public|Private|Friend][Static]Function过程名[(参数表)][As类型][语句块][过程名=表达式][ExitFunction][语句块]EndFunction“As类型”是Function过程返回的值的数据类型,如果省略,则默认为Variant。Function函数中参数名不能与函数名相同,因此选项C)错误;选项D)中省略了返回值类型,是正确的。

  • 第3题:

    单击命令按钮时,下列程序代码的执行结果为 ( ) Function FirProc(x As Integer, y As Integer, z As Integer) FirProc=2*x+y+3*z End Function Function SecProc(x As Integer, y As Integer, z As Integer) SecProc=FirProc(z, x, y)+x End Function Private Sub Commandl Click() Dim a As Integer, b As Integer, c As Integer a=2 :b=3 :c=4 Print SecProc(c, b,A)End Sub

    A.21

    B.19

    C.17

    D.34


    正确答案:A
    解析:执行语句Print SecProc (c,b,a)时,调用SecProc函数,此时将实参c, b,a的值对应传递给形参x,y,z。得SecProc =FirProc(a,c,b)+c,此时又需要调用Fir- Proc函数将a,c,b的值传递给对应形参x,y, z。在FirProc函数中执行语句FirProc=2*x +y+3*z即执行语句FirProe=2*a+c+3 *b其结果值为2*2+4+3*3即17。故 FirProe(a,c,b)的返回值为17。再与c相加即得SecProc函数的返回值结果21。选项A正确。

  • 第4题:

    阅读下列程序: Private Sub Command1_Click( ) Dim i As Integer,k As Integer k=2 For i=1 To 3 Print H(k); Next i End Sub Function H(j As Integer) a=0 Static b a=a+1 b=b+1 H=a*b+j End Function 程序运行后,单击命令按钮输出结果是

    A.234

    B.345

    C.567

    D.356


    正确答案:B
    解析:被调过程是一个函数过程,它有一个形式参数j,在被调过程声明中,定义了一个参数a,初值为0,一个静态变量b。语句a=a+1和b=b+1分别使用a和b各增加1,然后返回H的值,因为b是静态变量,所以每次调用同一个参数k时,b会保留前次的数值,使输出的结果变化,否则每次输出的结果都是一样的。根据分析,第一次调用时a=1,b=1,H=3;第二次调用:a=1,b=2,H=4;第三次调用:a=1,b=3=,H=5。所以最后的输出结果是345。

  • 第5题:

    阅读下列程序。 Private Sub Command1_Click() Dim i As Integer,k As Integer k=2 For i=1 To 3 Print Fun(k); Next End Sub Function Fun(j As Integer) Static b a=0 a=a + 1 b=b + 1 Fun=a*b+j End Function 程序运行后,单击命令按钮输出结果是

    A.234

    B.345

    C.567

    D.356


    正确答案:B
    解析:在此题中,被调过程是一个函数过程,它有一个形式参数j,在被调过程声明中,定义了一个参数a,初值为0,一个静态变量b。语句a=a+1和b=b+1分别使a和b各增加1,然后返回H的值,因为b是静态变量,所以每次调用同一个参数k时,b会保留前次的数值,使输出结果变化,否则每次输出的结果都将是一样的。根据分析,第一次调用时a=1, b=1,Fun=3;第二次调用:a=1,b=2,Fun=4;第三次调用:a=1,b=3,Fun=5。所以最后的输出结果是345。

  • 第6题:

    B.Kruskal算法:(贪心)

    按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。

    function find(v:integer):integer; {返回顶点v所在的集合}

    var i:integer;


    正确答案:

     

    B.Kruskal算法:(贪心)

    按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。
    function find(v:integer):integer; {返回顶点v所在的集合}
    var i:integer;

  • 第7题:

    C.选择排序:

    procedure sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i]>a[j] then swap(a[i],a[j]);
    end;

  • 第8题:

    E.堆排序:

    procedure sift(i,m:integer);{调整以i为根的子树成为堆,m为结点总数}

    var k:integer;


    正确答案:

     

    begin
    a[0]:=a[i]; k:=2*i;{在完全二叉树中结点i的左孩子为2*i,右孩子为2*i+1}
    while k<=m do begin
    if (k<m) and (a[k]<a[k+1]) then inc(k);{找出a[k]与a[k+1]中较大值}
    if a[0]<a[k] then begin a[i]:=a[k];i:=k;k:=2*i; end
    else k:=m+1;
    end;
    a[i]:=a[0]; {将根放在合适的位置}
    end;

    procedure heapsort;
    var
    j:integer;
    begin
    for j:=n div 2 downto 1 do sift(j,n);
    for j:=n downto 2 do begin
    swap(a[1],a[j]);
    sift(1,j-1);
    end;
    end;

  • 第9题:

    树形查找

    二叉排序树:每个结点的值都大于其左子树任一结点的值而小于其右子树任一结点的值。

    查找

    function treesrh(k:keytype):pointer;

    var q:pointer;


    正确答案:

     

    begin
    q:=root;
    while (q<>nil) and (q^.key<>k) do
    if k<q^.key then q:=q^.left
    else q:=q^.right;
    treesrh:=q;
    end;

  • 第10题:

    有如下的函数过程: Function Func2(a As Integer, b As Integer)'As Integer Static m As Integer, i As Integer m=0 i=2 a=i+m+1 b=i+a+b Func2=m End Function 在窗体上画一个命令按钮,然后编写如下事件过程: Private Sub Command1_Click() Dim p As Integer, k As Integer, m As Integer k=4 m=1 p=Fune2(k, m) Print k; m p = Func2(k, m) Print k; m End Sub 程序运行后,单击命令按钮,输出结果为( )。

    A.3 6<CR>3 6

    B.3 6<CR>3 11

    C.3 11<CR>3 6

    D.3 11<CR>3 11


    正确答案:B
    解析:本愿意在考查调用Func2时,参数是按地址传递的,所以两次调用Fune2时,实参k、m的值都改变了。程序运行过程如下:第一次调用Func2(k,m),k被行参a改变为3,m被行参改变为 6;第二次调用函数后,a为3,m为11。

  • 第11题:

    在窗体上画一个按钮,然后编写如下的事件代码。在按钮上单击,输出为( )。 Private Function fun(x As Integer,y As Integer) Static m As Integer Static i As Integer i=i+2 i=i+m+1 m=i+x+y fun=m End Function Private Sub Command1_Click() Dim j As Integer,m As Integer,k As Integer j=4:m=1 k=fun(j,m) Print k; k=fun (j,m) Print k End Sub

    A.8 18

    B.7 17

    C.7 19

    D.8 19


    正确答案:D
    解析:当发生Command1的单击事件时,定义了两个变量j和m,并依次赋值为4和1,然后调用fun函数,把i和m按地址传递给x和y,进入fun函数执行。在fun函数中定义了两个静态变量m和i,执行三条赋值语句后i的值为3,m的值为8,通过给函数名赋值把8作为函数值返回并赋值给k,输出k的值为8;再一次调用函数fun,把j和m依次按地址传给x和y,进入fun函数执行,注意,由于m和i是静态变量,此时的值不再是0,而是上一次退出时的值为3和8。执行三条赋值语句后i的值为14,m的值为19,通过给函数名赋值,把19作为函数值返回并赋值给k,输出k的值为19。

  • 第12题:

    以下所列的各方法头部中,正确的是()

    • A、 void play(var a:Integer, var b:Integer)
    • B、 void play(int a, b)
    • C、 void play(int a, int b)
    • D、 Sub play(a as integer, b as integer)

    正确答案:C

  • 第13题:

    有如下程序: Private Sub Command1_Click() Dim k As Integer,m As Integer Dim p As Integer k=4:m=1 p=PC(k,m):Print p; p=PC(k,m):Print p End Sub Private Function PC(a As Integer,b As Integer) Static m As Integer,i As Integer m=0:i=2 i=i + m + 1 m=i + a + b PC=m End Function 程序运行后,输出的结果为

    A.4 6

    B.6 6

    C.8 8

    D.10 12


    正确答案:C
    解析:在Sub过程中,程序段先定义了3个Integer型变量k,m,P,并给k赋给初值4,m的初值为1,然后调用事件过程PC,并将它的值赋给p;在事件过程PC中定义了两个形参,参数的传送是通过引用实参,即将k,m的地址作为a,b的地址;在PC中,将m,I定义为静态变量,所以第一次调用后的值仍然保留,但是m,I分别都有赋值语句,将它们的值变为0,2,所以返回值不变。

  • 第14题:

    在窗体上画一个名称为Command1命令按钮,然后编写如下事件过程: Private Function fun1(n As Integer)As Integer Dim k As Integer If n = 1 Then k = 1 Else k = 1 + fun1(n - 1)* 2 End If fun1 = k End Function Private Sub Command1_Click () Dim m As Integer, x As Integer x = 4 m = fun1 (x) Print m End Sub 程序运行后,单击命令按钮,则窗体上显示的内容是

    A.4

    B.6

    C.9

    D.15


    正确答案:D
    解析:fun1是一个递归过程,fun1函数过程共调用了5次,在Command1的单击事件中调用了fun1(4),其他3次调用的分别是fun1(3)、fun1(2)和fun1(1),由fun1函数过程自身调用。在fun1的调用过程中,相当于k=1、k=1+1×2=3、k=1+3×2=7、k=1+2×7=15。

  • 第15题:

    有如下程序: Private Sub Command1_Click() Dim k As Integer,m As Integer Dim op As Integer k=4:m=1 p=PPC(k,m):Print op; p=PPC(k.m):Print op End Sub Private Function PPC(a As Integer,b As Integer) Static m As Integer,i As Integer m=0:i=2 i=i+m+1 m=i+a+b PPC=m End Function 程序运行后,输出的结果为

    A.4 6

    B.6 6

    C.8 8

    D.10 12


    正确答案:C
    解析:考查考生对函数及函数参数的运用。
      [解题要点] 在Sub过程中,程序段先定义了3个Integer型变量k,m,op,并为k赋给初值4,m的初值为1,然后调用事件过程PPC,并将它的值赋给op。在事件过程PPC中定义了两个形参,参数的传送通过引用实参,即将k,m的地址作为a,b的地址;在PPC中,将m,i定义为静态变量,第一次调用后的值仍然保留,但是m,i分别都有赋值语句,将它们的值变为0,2,所以返回值不变。
      [错解分析] 函数PPC中的两个参数都是以传值方式传递,注意不要与传地址方式传递混淆。
      [考点链接] 过程的定义和调用,以及参数传递方式的选择。

  • 第16题:

    下面的算法是计算不带节点的单链表长度,其中能正确执行的是______。

    A.Function Length(L:Link) integer begin p:=L; j:=0; while p↑.next≠NIL DO [p:=p↑.next; j:=j+1 ] return(j) end;

    B.Function Length(L:Link) integer begin p:=L; k:=0; while p≠NIL DO [p:=p↑.next; k:=k+1) return(k) end;

    C.Function Length(L:Link)integer begin p:=L;k:=0; repeat k:=k+1; p=p↑.next until p=NIL return(k-1) end;

    D.Function Length(L:Link)integer begin p:=L↑.next; k:=1; while p≠NIL DO [k:=k+1; p:=p↑.next] return(k) end;


    正确答案:B

  • 第17题:

    素数的求法

    A.小范围内判断一个数是否为质数:

    function prime (n: integer): Boolean;

    var I: integer;


    正确答案:

     

    begin
    for I:=2 to trunc(sqrt(n)) do
    if n mod I=0 then begin
    prime:=false; exit;
    end;
    prime:=true;
    end;

  • 第18题:

    四、排序算法

    A.快速排序:

    procedure qsort(l,r:integer);

    var i,j,mid:integer;


    正确答案:

     

    begin
    i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数}
    repeat
    while a[i]<mid do inc(i); {在左半部分寻找比中间数大的数}
    while a[j]>mid do dec(j);{在右半部分寻找比中间数小的数}
    if i<=j then begin {若找到一组与排序目标不一致的数对则交换它们}
    swap(a[i],a[j]);
    inc(i);dec(j); {继续找}
    end;
    until i>j;
    if l<j then qsort(l,j); {若未到两个数的边界,则递归搜索左右区间}
    if i<r then qsort(i,r);
    end;{sort}

  • 第19题:

    D. 冒泡排序

    procedure bubble_sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=n downto i+1 do
    if a[j]<a[j-1] then swap( a[j],a[j-1]); {每次比较相邻元素的关系}
    end;

  • 第20题:

    已知前序中序求后序

    procedure Solve(pre,mid:string);

    var i:integer;


    正确答案:

     

    begin
    if (pre='''') or (mid='''') then exit;
    i:=pos(pre[1],mid);
    solve(copy(pre,2,i),copy(mid,1,i-1));
    solve(copy(pre,i+1,length(pre)-i),copy(mid,i+1,length(mid)-i));
    post:=post+pre[1]; {加上根,递归结束后post即为后序遍历}
    end;

  • 第21题:

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

    [说明]

    已知r[1...n]是n个记录的递增有序表,用折半查找法查找关键字为k的记录。若查找失败,则输出“failure",函数返回值为0;否则输出“success”,函数返回值为该记录的序号值。

    [C函数]

    int binary search(struct recordtype r[],int n,keytype k)

    { intmid,low=1,hig=n;

    while(low<=hig){

    mid=(1);

    if(k<r[mid].key) (2);

    else if(k==r[mid].key){

    printf("succesS\n");

    (3);

    }

    else (4);

    }

    printf("failure\n");

    (5);

    }


    正确答案:(1) (low+hig)/2 (2) hig=mid-1 (3) returnmid (4) low=mid+1 (5) return 0
    (1) (low+hig)/2 (2) hig=mid-1 (3) returnmid (4) low=mid+1 (5) return 0 解析:折半查找法也就是二分法:初始查找区间的下界为1,上界为len,查找区间的中界为k=(下界+上界)/2。所以(1)应填“(low+hig)/2”。中界对应的元素与要查找的关键字比较。当kr[mid].key时,(2)填“hig=mid-1”;当k==r[mid].key时,(3)填“return mid”;当k>r[mid].key时,(4)填“low=mid+1”。如果low>hig时循环终止时,仍未找到需查找的关键字,那么根据题意返回0,即空(5)填“return 0”。

  • 第22题:

    单击命令按钮时,下列程序代码的执行结果为______。 Private Function FirProc (x As Integer,y As Integer,z As Integer) FirProc=2*x+y+3*z End Function Private Function SecProc(x As Integer,y As Integer,z As Integer) SecProc=FirProc(z,x,y)+x End Function Private Sub Command1_Click() Dim a As Integer Dim b As Integer Dim C As Integer a=2 b = 3 c = 4 Print SecProc(c,b,A) End Sub

    A. 21

    B.19

    C.17

    D.34


    正确答案:A

  • 第23题:

    单击命令按钮时,下列程序的执行结果是 Private Sub Command1_Click() Dim a As Integer, b As Integer, c As Integer a=3:b :4:c =5 Print SecProc ( c, b,A)End Sub Function FirProc(x As Integer, y As Integer, z As Integer) FirProc:2 * x + y + 3 * z+2 End Function Function SecProc( x As Integer, y As Integer, z As Integer) SecProc = FirProc ( z, x, y) + x + 7 End Function

    A.20

    B.25

    C.37

    D.32


    正确答案:C
    解析:此题程序代码中用了嵌套调用,我们对这样的问题要多加小心,不能掉以轻心,千万不要把实参和相对应的形参弄混淆。主调过程Command1_Click输出的是SecProc(c,b,a)的返回值,调用过程SecProc时,主调过程分别把实参c、b、a地址传给形参x、y、z,此时在过程SecProc中,SecProc;FirProc(a,c,B)+7。由此看出,程序段执行此语句时,将调用过程FirProc。把实参a,c,b的地址分别传给形参x、y、z,此时在过程FirProc中,FirProc=2*x+y+3*z+2,所以FirProe(a,c,b)=6+4+15+2=27,SecProc(a,c,b)=27+3+7=37。