一起答
主观

●试题七

阅读以下说明和C++代码,将解答写入答题纸的对应栏内。

【说明】

请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。

【程序】

文件search.cpp的内容如下:

#include

int SeqSearch(int list[],int start,int n,int key)

{

for(int i=start;i<=n;i++)// (1) 

{

if(list[i]=key) // (2) 

{

return i;

}

}

return -1;

}

void main()

{

int A[10];

int key,count=0,pos;

cout<<" Enter a list of 10 integers: ";

for(pos=0;pos<10;pos++)

{

cin>>A;// (3) 

}

cout<<"Enter a key: ";

cin>>key;

pos=0;

while((pos=SeqSearch(A,pos,10,key))!=-1)

{

count++;

pos++;

}

cout<

}

第一种情况:输入2 3 12 6 8 45 8 33 7 输入key:8

输出: (4) 

第二种情况:输入2 3 12 6 8 45 8 33 7 输入key:9

输出: (5) 

试题出自试卷《2011年程序员考试考前密卷(八)-下午试题》
参考答案
查看试卷详情
相关试题
  1. ●试题八

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

    【说明】

    以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。

    【程序】

    #include

    main()

    {FILE*fp;

    charstr[100];inti=0;

    if((fp=fopen("text.txt" (1) ))==NULL)

    {printf("can't open this file.\n");exit(0);}

    printf("input astring:\n");gest(str);

    while(str[i])

    {if(str[i]>=′a′&&str[i]<=′z′)

    str[i]= (2) ;

    fputc(str[i], (3) );

    i++;

    }

    fclose(fp);

    fp=fopen("test.txt", (4) );

    fgets(str,100,fp);

    printf("%s\n",str);

     (5) ;

    }

  2. ●试题七

    阅读以下说明和C++代码,将解答写入答题纸的对应栏内。

    【说明】

    请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。

    【程序】

    文件search.cpp的内容如下:

    #include

    int SeqSearch(int list[],int start,int n,int key)

    {

    for(int i=start;i<=n;i++)// (1) 

    {

    if(list[i]=key) // (2) 

    {

    return i;

    }

    }

    return -1;

    }

    void main()

    {

    int A[10];

    int key,count=0,pos;

    cout<<" Enter a list of 10 integers: ";

    for(pos=0;pos<10;pos++)

    {

    cin>>A;// (3) 

    }

    cout<<"Enter a key: ";

    cin>>key;

    pos=0;

    while((pos=SeqSearch(A,pos,10,key))!=-1)

    {

    count++;

    pos++;

    }

    cout<

    }

    第一种情况:输入2 3 12 6 8 45 8 33 7 输入key:8

    输出: (4) 

    第二种情况:输入2 3 12 6 8 45 8 33 7 输入key:9

    输出: (5) 

  3. ●试题五

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

    【说明】

    本应用程序是一个乘法计算器,其运行窗口如图2所示。

    在该界面中,"被乘数"、"乘数"以及"积"等文字为标签,相应的3个输入输出数据框为文本框,此外还有3个命令按钮。用户在"被乘数"和"乘数"相应的文本框内输入数据,再单击"运算"按钮,便能在"积"对应的文本框中看到相乘的结果;当用户单击"清除"按钮时,就会清除各文本框中的数据;当用户单击"关闭"按钮时就会关闭该窗口并退出应用程序。用户不能在"积"对应的文本框中输入数据。

    【属性设置】

    各个对象、有关的属性名以及需要修改的属性值设计如下:

    【程序】

    Private Sub cmdMultiply_Click()

    txt3.Text=Trim(Str$( (3) ))′加法运算获得和数

    End Sub

    Private Sub (4) ()

    txt1.Text=" "′空字符串赋值给文本框txt1的内容

    txt2.Text=" "′空字符串赋值给文本框txt2的内容

    txt3.Text=" "′空字符串赋值给文本框txt3的内容

    End Sub

    Private Sub cmdClose_Click()

     (5) ′退出应用程序

    End Sub

  4. ●试题六

    阅读以下说明和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();

    TextField 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 windowClosing( (5) )

    {

    System.exit (1) ;

    }

    }

    }

  5. ●试题四

    阅读下面的要求,在填入适当的语句。

    要求执行该段程序后能弹出一个对话框,对话框中有"确定"和"取消"按钮,以及一个带问号的图标,并要求第一个按钮为默认按钮。

    Private Sub Form_Load(   )

    MsgBox"要重新输入吗?","询问"

    End Sub

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

    【说明】

    函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素a[0]~a[n-1]循环向右平移k个位置。

    为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标p,并将a[p]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[0]的备份值移到正确位置。

    若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至a[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。

    若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。

    例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。

    【函数】

    void rcr(int a[],int n,int k)

    {int i,j,t,temp,count;

    count=0;/*记录移动元素的次数*/

    k=k%n;

    if( (1) ){/*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/

    i=0;

    while(count

    j=i;t=i;

    temp=a[i];/*备份a[i]的值*/

    /*移动相关元素,直到计算出a[i]应移动到的目标位置*/

    while((j= (2) )!=i){

    a[t]=a[j];

    t= (3) ;

    count++;

    }

     (4) =temp;count++;

     (5) ;

    }

    }

    }

  7. ●试题二

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

    【说明】

    函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:

    #define MAXSIZE 32

    typedef struct{

    int *elem;/*栈的存储区*/

    int max; /*栈的容量,即栈中最多能存放的元素个数*/

    int top;/*栈顶指针*/

    }Stack;

    【代码】

    int InitStack(Stack *S,int n)/*创建容量为n的空栈*/

    {S->elem=(int*)malloc(n *sizeof(int));

    if(S->elem==NULL)return-1;

    S->max=n; (1) =0;return 0;

    }

    int Push (Stack *s,int item)/*将整数item压入栈顶*/

    {if(S->top==S->max){printf(″Stack is full!\n″);return-1;}

     (2) =item;return 0;

    }

    int StackEmpty(Stack S){return(! S.top)?1∶0;}/*判断栈是否为空*/

    int Pop(Stack *S)/*栈顶元素出栈*/

    {if(! S->top){printf(″Pop an empty stack!\n″);return -1;}

     return (3) ;

    }

    void MultibaseOutput(long n,int B)

    {int m;Stack S;

     if(InitStack(&S,MAXSIZE)){printf(″Failure!\n″);return;}

     do {

    if(Push(&S, (4) )){printf(″Failure!\n″);return;}

    n= (5) ;

     }while(n !=0);

    while(! StackEmpty(S)){/*输出B进制的数*/

    m=Pop(& S);

    if(m<10)printf(″%d″,m);/*小于10,输出数字*/

    else printf(″%c″,m+55);/*大于或等于10,输出相应的字符*/

     }

     printf(″\n″);

    }

  8. ●试题一

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

    【算法说明】

    某英汉词典文件包含N个记录(N>1),每个记录有两个字段:一个是英文单词,另一个是相应的汉语解释。各个记录按英文单词的词典顺序排列,各英文单词并不重复。

    本算法用于维护、更新该英汉词典文件。维护、更新的方法是:首先输入一个英文单词及其汉语解释,然后在该词典中查找输入的英文单词,若找到,则用输入的汉语解释更新原有的解释;若找不到,则需要将输入的英文单词及其汉语解释插入到该词典的适当位置,使各记录仍按英文单词的词典顺序排列。

    【算法】

    第一步读入英汉词典文件,并将读入的N个英文单词依次存放在字符串数组ENG中,将相应的汉语解释依次存放在字符串数组CN中。数组元素CN(i)给出了数组元素ENG(i)的解释。

    第二步输入英文单词及其汉语解释,将它们分别存放在字符串变量E和C中。若E为空串或都是空格,则转向第四步。

    第三步根据变量E的值,用二分法在数组ENG中查找。具体步骤如下:

    1.1→L,N→H

    2.INT((L+H)/2)→K

    3.若E=ENG(K),则C→CN(K),转向第二步

    若E

    4.若H

    对I=N,L,-1(始值,终值,增量)循环执行:

    ENG(I)→ENG(I+1)

    CN(I)→CN(I+1)

    然后,将E和C分别存入 (3) 和 (4) ,N+1→N最后转向第二步

    否则,转向 (5) 

    第四步将数组ENG和CN输出,形成新的英汉词典文件,算法结束。