一起答

2011年程序员考试考前密卷(一)-下午试题

  • 卷面总分:75分
  • 浏览次数:0
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:31次
  • 作答时间:150分钟
试卷简介
该试卷以考试大纲和考试专家委员会编写的考试指导为编写依据,以帮助考生熟悉和掌握专业知识、提高能力和素质为主要目的,切实反映考试对考生在知识点的掌握程度和专业水平上的要求。遵循科学、严谨、客观、规范的原则,严格按照实际考试的科目划分和题型分布进行编写,能够有效地帮助考生考前自测和反馈复习成果。
部分试题预览
  1. ●试题五

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

    【说明】

    该应用程序是用来求一元二次方程和一元一次方程的,其运行如图2所示。

    当用户在对应方程系数的文本框(txt1、txt2和txt3)中输入数值后,单击"解方程"按钮(cmdcalculate),解方程并将解显示在X1和X2对应的文本框中(txt4和txt5)中。若是一个一元一次方程,只显示在X1对应的文本框中,若无解则弹出对话框。下面的代码是"解方程"按钮的Click事件的代码。

    【程序代码】

    Private Sub (1) ()

    a=Val(Txt1.Text):b=Val(Txt2.Text):c=Val(Txt3.Text)

    If a=0 Then

    If b=0 Then

    MsgBox"方程无解!",vbOKOnly,"提示"

    Txt4.Text=" "

    Txt5.Text=" "

    Else

    Txt4.Text= (2) 

    Txt5.Text=" "

    End If

    Else

    delta= (3) 

    If (4) Then

    MsgBox"方程无解!",vbOKOnly,"提示"

    Txt4.Text=" "

    Txt5.Text=""

    Else

    Txt4.Text=Str$(((-1)*b+Sqr(delta))/(2*a))

    Txt5.Text= (5) 

    End If

    End If

    End Sub

  2. ●试题四

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

    【说明】

    该程序的功能是从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后把结果xx输出到文件OUT6.DAT中。

    例如:原文:You He Me

    I am a student.

    结果:Me He You

    student a am I

    原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

    【函数】

    #include

    #include

    #include

    #include

    char xx[50][80];

    int maxline=0;/*文章的总行数*/

    int ReaaDat(void);

    void WriteDat(void);

    void StrOL(void)

    {

    char*pl,*p2,t[80];

    int i;

    for(i=0;i

    {p1=xx[i];t[0]=0;

    while(*p1)p1++;

    while(p1>=xx[i])

    {while(!isalpha(*p1)&&p1!=xx[i])p1--;

    p2=p1;

    while( (1) )p1--;

    if(p1==xx[i])

    if(isalpha(*p1))p1--;

    else if(!isalpha(*(p1+1)))break;

    p2++;

     (2) ;

    strcat(t,p1+1);

    strcat(t," ");

    }

    strcpy(xx[i],t);

    }

    }

    void main()

    {

    if( (3)  ){

    printf("数据文件in.dat不能打开!\n\007");

    return;

    }

    StrOL();

    writeDat();

    getch();

    }

    int ReadDat(void)

    {

    FILE*fp;

    int i=0;

    char*p;

    if((fp=fopen("e:\\a\\in.dat","r"))==NULL)return 1;

    while(fgets(xx[i],80,fp)!=NULL){

    p=strchr(xx[i],′\n′);

    if(p)*p=0;

    i++;

    }

    maxline= (4) 

    fclose(fp);

    return 0;

    }

    void WriteDat(void)

    {

    FILE*fp;

    int i;

    fp=fopen("e:\\a\\out6.dat","w");

    for(i=0;i< (5) ;i++){

    printf("%s\n",xx[i]);

    fprintf(fp,"%s\n",xx[i]);

    }

    fclose(fp);

    }

  3. ●试题三

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

    【说明3.1】

    假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。

    例如:链表初始元素为:

    (7,10,10,21,30,42,42,42,51,70)

    经算法操作后变为:

    (7,10,21,30,42,51,70)

    【函数3.1】

    void deleteklist(LinkList head)

    {

    LinkNode*p,*q;

    p=head->next;

    while(p!=head)

    {

    q=p->next;

    while( (1) )

    {

     (2) ;

    free(q);

    q=p->next;

    }

    p=p->next;

    }

    }

    【说明3.2】

    已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。

    【函数3.2】

    #include

    typedef struct node {

    int data;

    stuct node leftChild,rightchild;

    }BintreeNode;

    typedef BintreeNode*BinaryTree;

    void ConstrncTree(int T[],int n,int i,BintreeNode*&ptr)

    {

    if(i>=n) (3) ;∥置根指针为空

    else

    {

    ptr=-(BTNode*)malloc(sizeof(BTNode))

    ptr->data=T[i];

    ConstrucTree(T,n,2*i+1, (4) );

    ConstrucTree(T,n, (5) ,ptr->rightchild);

    }

    }

    main(void)

    {/*根据顺序存储结构建立二叉链表*/

    Binarytree bitree;int n;

    printf("please enter the number of node:\n%s";n);

    int*A=(int*)malloc(n*sizeof(int));

    for(int i=0;i<n;i++)scanf("%d,A+i);/*从键盘输入结点值*/

    for(int i=0;i<n;i++)printf("%d",A[i]);

    ConstructTree(A,n,0,bitree);

    }

  4. ●试题二

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

    【说明2.1】

    L为一个带头结点的循环链表。函数deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于c的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。

    【函数2.1】

    LinkList deletenode(LinkList L,int c)

    {

    LinkList Lc,p,pre;

    pre=L;

    p= (1) ;

    Lc=(LinkList)malloc(sizeof(ListNode));

    Lc->next=Lc;

    while(p!=L)

    if(p->data>c)

    {

     (2) ;

     (3) ;

    Lc->next=p;

    p=pre->next;

    }

    else

    {

    pre=p;

    p=pre->next;

    }

    return Lc;

    }

    【说明2.2】

    递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成k(2≤k≤9)进制数,并打印。

    【函数2.2】

    dec_to_k_2(int n,int k)

    {∥将十进制正整数n转换成k(2≤k≤9)进制数

    if(n!=0)

    {

    dec_to_k_2( (4) ,k);

    printf("%d", (5) );

    }

    }

  5. ●试题一

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

    【流程图说明】

    下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data,left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。

    【算法说明】

    【流程图】

    将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:

    typedef struct node{

    int data;

    struct node*left;

    struct node*right;

    }NODE;

    【算法】

    NODE*SearchSortTree(NODE*tree,int e)

    {

    if(tree!=NULL)

    {

    if(tree->data

     (4) ;∥小于查找左子树

    else if(tree->data

     (5) ;∥大于查找左子树

    else return tree;

    }

    return tree;

    }