软考初级程序员下午题(9)

试题一

阅读下列算法说明和算法,将应填入______处的语句填写完整。
[说明]
本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。

 [代码]
    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char*replace(char*s1, char*s2, char*s3)
    { char*p,*q,*r,*s;int l2,l3,i=0;
    l2=strlen(s2);
    l3=strlen(s3);
    p=s1;
    while((p=strstr(p,s2))!=NULL)
    { i++;    //统计s2串出现的次数
    ______;
    }
    i=______;
    s=r=(char*)malloc(i);     //分配动态内存存放新字符串
    p=s1;
    while(1)
    { q=strstr(p,s2);    /*s2是否在s1中出现,q是首次出现的位置
    if(q!=NULL)
    { i=q-p;
    ______;
    r+=i;
    ______;
    r+=l3;
    p=q+l2;      //将指向s1串的指针移到s2子串出现的位置后,为下一次循环做好准备*/
    }
    else    //q为空,表示剩余的s1串中已经没有s2
    {______;
    break;    //终止循环
    }
    }
    return(s);    //返回指向所形成的新串的指针
    }
    void main()
    { char*a="sabcababde", *b="ab", *c="efg", *d;
    d=replace(a,b,c); printf("result=%s\n", d); free(d);
    }

试题二

阅读以下函数说明和C语言函数,将应填入______处的语句填写完整。
[函数2.1说明]
本程序可以打印出菱形:

  [函数2.1]
    main()
    {
    int i,j,k;
    for(i=0;i<=3;i++)
    {
    for(j=0;j<=2-i;j++)
    printf(" ");
    for(______)
    printf("*");
    printf("\n");
    }
    for(i=0;i<=2;i++)
    {
    for(______)
    printf(" ");
    for(k=0;k<=4-2*i;k++)
    printf("*");
    printf("\n");
    }
    }
    [函数2.2说明]
    通过本程序,可以从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“CsaiWgm”中保存,输入的字符串以“!”结束。
    [函数2.2]
    #include"stdio.h"
    main()
    {
    FILE*fp;
    char str[100],filename[10];
    int i=0;
    if((fp=fopen("CsaiWgm","w"))==NULL)
    {
    printf("cannot open the file\n");
    exit(0);
    }
    printf("please input a string:\n");
    gets(str);
    while(______)
    {
    if(str[i]='a'&&str[i]='z')
    str[i]=______;
    fputc(str[i],fp);
    ______;
    }
    fclose(fp);
    fp=fopen("CsaiWgm","r");
    fgets(str,stden(str)+1,fp);
    printf("%s\n",str);
    fclose(fp);
    }

试题三

阅读以下说明和C语言函数,将应填入______处的语句填写完整。
[说明]
设M叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为子树根结点的值后跟用“()”括起来的各子树的列表(若有子树的话),各子树的列表间用“,”分隔。例如,如下图所示的三叉树可用列表a(b(c,d),e,f(g,h,i))表示。
本程序根据输入的列表生成一棵M叉树,并由M叉树再输出列表。

在这里插入图片描述

  [函数]
    #include <stdio.h>
    #include <stdlib.h>
    #define M 3    //三叉树
    typedef struct node{
    int val;
    strud node*subTree[M];
    }NODE;
    char buf[255],*str=buf;
    NODE*dNULL;
    NODE*makeTree()    //由列表生成M叉树
    {
    int k; NODE*s;
    s=______;
    s->val=*str++;
    for(k=0;k<M;k++)
    s->subTree[k]=NULL;
    if(*str=='(')
    {
    k=0;
     do{
    str++;
    s->subTree[k]=______;
    if(*str==')')
    {
    str++;
    break;
    }
    k=k+1;
    } while(______);
    }
    return s;
    }
    void walkTree(NODE*t)    //由M叉树输出列表
    {
    int i;
    if(t!=NULL)
    {
    ______;
    if(t->subTree[0]==NULL)
    return;
    putcharC('(');
    for(i=0; i<M; i++)
    {
    ______;
    if(i!=M-1 && t->subTree[i+1]!=NULL)
    putchar(',');
    }
    putchar(')');
    }
    }
    void main()
    {
    printf("Enter exp:");
    scanf("%s", str);
    d=makeTree();
    walkTree(d);
    putchar('\n');
    }

试题一答案

(1)p+=l2
(2)strlen(s1)-il2+il3+1
(3)strncpy(r,p,i)
(4)strcpy(r,s3)
(5)strcpy(r,p)

[解析] 本题考查用C语言实现对字符串的操作。
题目要求将字符串s1中出现的所有子串s2替换成s3,形成一个新串,但不破坏字符串s1。要不破坏字符串s1,只有用一个新串来存放处理结果;要用到新串,那么就需要重新分配空间。
第1空在第一个循环体中,此循环体的作用在注释中已经给出,用来统计串s2在串s1中出现的次数,这里的统计变量已经给出,并将结果存放在统计变量i中,但每次统计成功后串s1的位置应该往后移动串s2的长度,由程序我们可以看出,串s1是存放在指针变量p中的,因此,指针变量P指的位置需要往后移动串s2的长度,而串s2的长度存放在变量l2中。因此,此空答案为“p+=l2”。
第2空很明显是用来给变量i赋一个值,但根据s=r=(char*)malloc(i)语句我们可以推断出,当前变量i中存放的是新串的长度。而新串的长度应该等于串s1的长度减去串中x个串s2的长度,加上x个串s3的长度再加1,而在上面的循环中已经求出了串s2在串s1中出现的次数,结果存放在变量i中。因此,此空答案为“strlen(s1)-il2+il3+1”。
第3空是在if(q!=NULL)成立的情况下运行的语句,而变量q指向的是s2在s1中首次出现的位置,如果条件成立,说明串s2在串s1中出现了,语句i=q-p用来表不出现的位置到s1开始位置的距离。在这些条件都清楚了后,应该往新的串中写字符了,首先写串s1的前i个字符,此空就是用来完成这个功能的,因此,此空答案为“strncpy(r,p,i)”。
第4空是接着上一空而来的,在上面我们分析到,把串s1的前i个字符写入新串,那么在新串中接着要出现的应该是替换串s2的串s3,此空的任务应该是将串s3写入新串中,因此,此空答案为“strcpy(r,s3)”。
第5空是在if(q!=NULL)不成立的情况下运行的语句,这说明串s2不在串s1中出现,在这种情况下,串应该不需要进行替换操作,而直接将串s1写入到新串中,此空的作用就是用来实现这个功能的,因此,此空答案为“strcpy(r,p)”。

试题二答案

(1)k=0;k<=2*i;k++
(2)j=0;j<=i;j++
(3)str[i]!=‘!’
(4)str[i]-32
(5)i++

[解析] 本题考查用C语言实现菱形的输出与大小写字母的转换。
在函数2.1中,题目要求实现对菱形的输出,从图中可以看出每行的“”字符个数为(2×行号-1),最长的一行其长度为8个“”字符,最短的一行是1个“”字符,从最短到最长一共是4行。下面来分析代码。
第1空是第二重循环的循环条件,从程序中可以推断出这个循环的作用是用来输出一行的“
”字符,根据上面的分析,每行的“”字符个数为(2×行号-1)可以得到循环的上界,再结合程序可以知道此空用的变量是k,而每行的行号存放在变量i中,因此,此空答案为“k=0;k<=2i;k++”。
第2空在第二个二重循环下面,这个二重循环用来输出图形中下半部分,此空是循环的条件。由于菱形具有对称性,我们可以对照程序上面相应的循环中的条件,很容易就可以得到结果,此空答案为“j=0;j<=i;j++”。
在函数2.2中,题目要求从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件CsaiWgm中保存。此题的关键在于如何将小写字母变成大写字母。
第3空是循环的循环条件,从程序中可以推断出这个循环的作用是用来将字符串的小写字母全部转换成大写字母,那么可以知道循环的条件是只要取到的字符不为结束字符“!”,循环就继续,因此,此空答案为“str[i]!=‘!’”。
第4空是条件判断语句下面的语句,根据程序给出的代码不难发现,如果此条件判断语句结果为真,说明当前取到的字符是小写字母,那么应该将其转换为大写字母,因此,此空答案为“str[i]-32”。
第5空是循环的最后一条语句,从程序中不难发现,循环对字符串的位置没有移动,那么此空应该用来实现对字符串位置的往后移动。而记录当前字符串位置的是变量i,因此,此空答案为“i++”。

试题三答案

(1)(NODE*)malloc(sizeof(NODE))
(2)makeTree()
(3)*str
(4)putchar(t->val)
(5)walkTree(t->subTree[i])

[解析] 本题考查在C语言中实现用列表表示M叉树。
题目要求程序根据输入的列表生成一棵M叉树,并由M叉树再输出列表。题目中给出了列表与树的对应关系,从这种对应关系中我们可以看出,每个结点后紧跟的那层括号下结点的个数就是这个根结点的孩子个数,用列表表示得到的序列有点像树的先序遍历,因此,根据列表来生成M叉树时,应该是首先生成左子树,然后才依次往右的生成过程。下面来具体分析代码。
第1空很明显是给变量s赋一个初值,从程序中可以知道,变量s是一个指向NODE型结点的指针变量,但程序中并没有给出这样的结点,那么此空应该是动态创建一个这样的结点。在C语言中,动态分配空间要用函数malloc(),因此,此空答案为“(NODE*)malloc(sizeof(NODE))”。
第2空在循环体中,从程序中不难推断出此循环体的作用是由列表生成M叉树,此空是给s->subTree[k]这个指针数组赋值,这个数组中存放的是当前结点的孩子结点的指针,在树的生成过程中是根据列表来递归生成其对应的三叉树的,此空应该是递归调用生成结点的函数makeTree()。因此,此空答案为"makeTree()”。
第3空是循环结束的判断条件,而这个循环的作用是根据列表来生成三叉树,只有列表的所有元素都被考虑了循环才结束。从程序中可以知道列表的元素存放在数组中,指针变量str指向这个数组,且在程序中对列表的操作都是通过指针变量str来实现的,因此,此空答案为“*str”。
第4空在条件判断语句下面,此条件判断语句结果为真,说明当前取到的是结点,接下来应该把该结点的值写入列表中,从后面的程序我们很容易知道实现此功能的函数,因此,此空答案为“putchar(t->val)”。
第5空在一个循环体下面,根据循环的条件,可以推断出这是对一个结点的所有孩子结点进行循环搜索。由M叉树生成列表可以说是由列表生成M叉树的逆过程,需要对树中的每个结点进行检索来生成列表,这里也要用到递归调用,而这个函数的当前检索的结点指针为t->subTree[i]。因此,此空答案为“walkTree(t->subTree[i])”。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 软考初级程序员考试是计算机行业的一项重要认证,通过该考试可以证明考生具备初级程序员的技能和知识水平。其中,考生需要掌握多项技能和知识,包括编程语言、数据结构、数据库等基础知识,以及软件开发的流程、框架和工具。 在考试中,经常会出现一些实际应用场景,要求考生根据目要求,进行编程和分析,并输出相应的结果。其中,Word文档是一种常用的文档格式,考生需要掌握Word文档的基本操作,能够使用VBA等语言进行编程,并能够完成一些实际应用。 具体来说,软考初级程序员的Word文档目,可能包括以下内容: 1.使用VBA语言编写宏,实现一些常见的操作,例如:复制、粘贴、替换、格式化等操作。 2.使用VBA语言编写代码,生成表格,并实现数据的读取、插入、删除等操作。 3.使用VBA语言编写代码,实现Word文档的自动化生成,例如:生成报告、生成信函等。 4.能够使用Word文档中的高级功能,例如:段落样式、页眉页脚、插图等功能,完成一些实用操作。 总的来说,软考初级程序员的Word文档目,旨在考察考生掌握VBA语言的基本知识,以及能否独立完成一些实际应用。因此,考生需要认真学习Word文档的基础知识,并多进行练习,熟悉操作方法,并能够灵活应用到实际工作中。 ### 回答2: 软考初级程序员真题Word文档是一份质量非常高的学习资料,对于计算机专业学生或IT从业人员来说是一份非常有价值的参考资料。这份Word文档主要包含了软考初级程序员考试的真题试卷和答案解析,全面地涵盖了软考初级程序员考试的各个方面,既有基础理论知识的应用,也有实际操作的考核内容。 首先,这份Word文档的试数量非常多,包含了大量的真题试卷,考生可以通过练习这些试,快速掌握软考初级程序员考试的考试要点和考试难度。通过练习这些试,考生不仅可以更好地理解软考初级程序员考试的考点,还能够提升自己的解能力和应试技巧。 其次,这份Word文档对于考试的答案解析非常详细,不仅告诉考生正确答案,还解释了为什么这是正确的答案。这样的方法,让考生能够更深入地理解目背后的考点和知识点,真正做到“学以致用”。 最后,这份Word文档所涉及的知识点非常广,包括Java、Python、数据库、网络等方面,完整地呈现了软考初级程序员考试的知识要求。通过学习这些知识点,考生可以更加全面地了解软件开发的不同领域,从而为将来的工作打下更加坚实的基础。 综上所述,软考初级程序员真题Word文档是一份非常有价值的学习资料,对于希望进入计算机行业的学生和在IT行业工作的从业人员来说,是必备的学习工具。 ### 回答3: 软考是程序员们拿到认证资格的机会之一,因此许多初级程序员都关注和备考软考初级程序员考试。在软考初级程序员考试中,Word文档是一种经常使用的应用软件。以下我将分享一些软考初级程序员真题中涉及Word文档的问和备考策略。 首先,软考初级程序员考试中的Word文档问主要包括以下几个方面: 1. 如何实现多级列表、编号和段落格式化? 2. 如何设计和使用表格? 3. 如何插入和编辑图片? 4. 如何设置页眉页脚、页码和文档保护? 5. 如何进行批量操作和邮件合并? 针对这些问,备考策略可以从以下几个方面入手: 1. 熟练使用Word文档基础操作,掌握快捷键,提高操作效率。 2. 理解Word文档的基本结构,如分节、分栏、段落、样式等。 3. 熟悉Word文档的高级功能,如多级列表、编号、段落格式化等。 4. 学会设计和使用表格,掌握常用的表格操作技巧。 5. 熟悉Word文档中图片的插入、编辑和格式化,掌握基本的图片处理技巧。 6. 熟练掌握Word文档的页眉页脚、页码和文档保护等高级功能。 7. 学会进行批量操作和邮件合并,提高工作效率。 总之,备考软考初级程序员考试不仅需要掌握计算机语言和软件开发技术,还需要熟练掌握各种常用应用软件的操作技巧。希望以上策略能够帮助备考的程序员们更好地应对Word文档问

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值