专注在线职业教育23年
下载APP
小程序
希赛网小程序
导航

预约成功后,不错过重要时期

点击预约

软考程序员考试试题分析

责编:何如2015 2016-01-26

      >>>>程序员在线辅导

>>>>程序员培训视频

>>>>程序员考试教材


    试题一

    【说明】

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

    例如:原文:YouHeMe

    Iamastudent.

    结果:MeHeYou

    studentaamI

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

    【函数】

    #include

    #include

    #include

    #include

    charxx[50][80];

    intmaxline=0;/*文章的总行数*/

    intReaaDat(void);

    voidWriteDat(void);

    voidStrOL(void)

    {

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

    inti;

    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--;

    elseif(!isalpha(*(p1+1)))break;

    p2++;

    (2);

    strcat(t,p1+1);

    strcat(t,"");

    }

    strcpy(xx[i],t);

    }

    }

    voidmain()

    {

    if((3)){

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

    return;

    }

    StrOL();

    writeDat();

    getch();

    }

    intReadDat(void)

    {

    FILE*fp;

    inti=0;

    char*p;

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

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

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

    if(p)*p=0;

    i++;

    }

    maxline=(4)

    fclose(fp);

    return0;

    }

    voidWriteDat(void)

    {

    FILE*fp;

    inti;

    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);

    }

   【答案】

    (1)isalpha(*p1)&&p1!=xx[i]

    (2)*p2=0

    (3)ReadDat()

    (4)i

    (5)maxline

 

    试题二

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

    【流程图说明】

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

    【算法说明】

    【流程图】

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

    typedefstructnode{

    intdata;

    structnode*left;

    structnode*right;

    }NODE;

    【算法】

    NODE*SearchSortTree(NODE*tree,inte)

    {

    if(tree!=NULL)

    {

    if(tree->data(4);∥小于查找左子树

    elseif(tree->data(5);∥大于查找左子树

    elsereturntree;

    }

    returntree;

    }

    【答案】

    (1)p=p->left

    (2)p=p->right

    (3)returnP

    (4)returnSearchSortTree(tree->left)

    (5)returnSearchSortTree(tree->right)

 

    试题三

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

    例如:链表初始元素为:

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

    经算法操作后变为:

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

    【函数1】

    voiddeleteklist(LinkListhead)

    {

    LinkNode*p,*q;

    p=head->next;

    while(p!=head)

    {

    q=p->next;

    while((1))

    {

    (2);

    free(q);

    q=p->next;

    }

    p=p->next;

    }

    }

    【说明2】

    已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程

    序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。

    【函数2】

    #include

    typedefstructnode{

    intdata;

    stuctnodeleftChild,rightchild;

    }BintreeNode;

    typedefBintreeNode*BinaryTree;

    voidConstrncTree(intT[],intn,inti,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)

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

    Binarytreebitree;intn;

    printf("pleaseenterthenumberofnode:\n%s";n);

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

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

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

    ConstructTree(A,n,0,bitree);

    }

    答案:

    (1)q!=head&&q->data==p->data

    (2)p->next=q->next

    (3)ptr=NULL

    (4)ptr->leftchild

    (5)2*i+2


  相关推荐:

计算机软件水平开始程序员知识点(一)

计算机软件水平开始程序员知识点(二)

2015年软考程序员常考理论知识汇总


更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!
相关阅读
查看更多

加群交流

公众号

客服咨询

考试资料

每日一练