●试题一阅读下列算法说明和算法,将应填入(n)处的语句写在答题纸的对应栏内。【说明】为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1..n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置(假设R[]中的元素互不相同)。【算法】1.变量声明X:DataTypei,j,low,high,mid,R0..n2.每循环一次插入一个R[i]循环:i以1为步长,从2到n,反复执行①准备X<-R[i]; (1) ;high

题目

●试题一

阅读下列算法说明和算法,将应填入(n)处的语句写在答题纸的对应栏内。

【说明】

为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1..n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置(假设R[]中的元素互不相同)。

【算法】

1.变量声明

X:DataType

i,j,low,high,mid,R0..n

2.每循环一次插入一个R[i]

循环:i以1为步长,从2到n,反复执行

①准备

X<-R[i]; (1) ;high<-i-1;

②找插入位置

循环:当 (2) 时,反复执行

(3)

若X.key<R[mid].key

则high<-mid-1

否则 (4)

③后移

循环:j以-1为步长,从 (5) ,反复执行

R[j+1]<-R[j]

④插入

R[low]<-X

3.算法结束


相似考题
更多“●试题一 阅读下列算法说明和算法,将应填入(n)处的语句写在答题纸的对应栏内。 【说明】 为了减少 ”相关问题
  • 第1题:

    ●试题一

    阅读下列说明和流程图,将应填入(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) 。

    图1


    正确答案:
    ●试题一【答案】(1)(2)<(3)I+l->I(4)J-1->J(5)「N/2」【解析】该算法的思路是:设置了两个变量I和J,初始时分别指向数组K的第一个元素和最后一个元素。如果这两个元素之和等于M时,输出结果,并这两个指针都向中间移动;如果小于M,则将指针I向中间移动(因为数组K已按从小到大的顺序排列);如果大于M,则将指针J向中间移动(因为数组K已按从小到大的顺序排列)。当IJ时,说明所有的元素都搜索完毕,退出循环。根据上面的分析,(1)、(2)空要求填写循环结束条件,显然,(1)空处应填写"",(2)空处应填写"<"。这里主要要注意I=J的情况,当I=J时,说明指两个指针指向同一元素,应当退出循环。(3)空在流程图有两处,一处是当K(I)+K(J)=M时,另一处是当K(I)+K(J)<M时,根据上面分析这两种情况都要将指针I向中间移动,即"I+1->I"。同样的道理,(4)空处应填写"J-1->J"。比较"K(I)+K(J):M"最少执行次数发生在第1元素与第N个元素之和等于M、第2元素与第N-1个元素之和等于M、……,这样每次比较,两种指针都向中间移动,因此最小执行次数约为"N-2"。

  • 第2题:

    ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }


    正确答案:()
    (1)FILE *fp; (2)NULL  (3)!feof(fp)  (4)fgetc(fp)   (5)fclose(fp)
    从程序功能来看,程序中需要用到文件型指针变量中,而主函数体没有定义,所以(1)应该填写的是“FILE *fp;”。接下来的语句是标准的打开只读文本文件的语句,显示的是文件没打开,说明文件名不存在,也就是为“NULL”。接着的while循环语句中有两处空白。前一个空白是控制循环的条件,从程序功能来看,要将文本文件中的所有字符显示出来,这儿当然只能填写“不是文件尾则继续循环”,具体说,需要填写的是“!feof(fp)”。(4)出现在循环体中的语句中,该循环体的功能是从fp指向的文本文件中读取单个字符并显示在屏幕上,此处使用的是putchar函数,该函数的功能是将形参对应的字符显示在屏幕上,所以该处的空白就是要显示的字符,这个字符必须是从文本文件中读取的单个字符,完成这项工作的可以利用fgetc()函数,所以(4)填写的是“fgetc(fp)”。最后一句应当是关闭文件,所以(5)应填fclose(fp)。

  • 第3题:

    阅读下列说明,补充(1)-(9),将解答填入答题纸的对应栏内。


    答案:
    解析:

  • 第4题:

    试题三(共 15 分)

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


    正确答案:

  • 第5题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,

  • 第6题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: