试题一

1、阅读下列算法说明和算法,将应填入______处的语句填写完整。
[说明]
为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1…n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置。(假设R[]中的元素互不相同)
[算法]
1.变量声明

X: Data Type
i,j,low,high,mid,r:0..n
2.每循环一次插入一个R[i]
循环:i以1为步长,从2到n,反复执行。
(1)准备。
X←R[i];______;high←i-1;
(2)找插入位置。
循环:当______时,反复执行。
______
若X.key<R[mid].key
则high←mid-1;
否则______
(3)后移。
 循环:j以-1为步长,从______,反复执行。R[j+1]←R[j](4)插入。R[low]←X
3.算法结束

试题二

2、阅读以下函数说明和C语言函数,将应填入______处的语句填写完整。
[函数2.1说明]
将一个正整数分解质因数。例如:输入90,打印出90=233*5。
[函数2.1]

Fun1(int n)
{int i;
for(i=2;i<=n;i++)
{while(______)
{if(n%i==0)
{printf("%d*",i);
______;
}
else
break;
}
}
printf("%d",n);
}
[函数2.2说明]
下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第3、4、5只猴子都是这样做的,问海滩上原来最少有多少个桃子?
[函数2.2]
main()
{int i,m,j,k,count;
for(i=4;i<10000;i+=4)
{count=0;
______;
for(k=0;k<5;k++)
{______;
i=j;
if(j%4==0)
______;
else
break;
}
i=m;
if(count==4)
{printf("%d\n",count);
break;
}
}
}

试题三

3、阅读以下说明和C语言函数,将应填入______处的语句填写完整。
[说明]
下面的程序构造一棵以二叉链表为存储结构的二叉树。
[函数]

BitTree*createbt(BitTree*bt)
{BitTree*q;
struct node*s[30];
int j,i;
char x;
printf("i,x=");
scanf("%s,%c",&i,&x);
while(i!=0&&x!='$')
{q=(BitTree*)malloc(sizeof(BitTree));   //生成一个结点
______;
q->lchild=NULL;
q->rchild=NULL;
______;
if(______)
{j=i/2;    //为i的双亲结点
if(i%2==0)
______;    //i为j的左孩子
else
______;    //i为j的右孩子
}
printf("i,x=");
scanf("%d,%c",&i,&x);
}
return s[i];
}

试题一答案:

1、(1)low←1 (2)low<=high (3)mid←int((low+high)/2)
(4)low←mid+1 (5)i-1到low
[解析] 本题考查使用二分插入法对无序数组排序的伪码实现。
在做题前,我们需要先大概明白二分插入法的基本思想和步骤,其基本思想如下(设R[low,…,high]是当前的插入区间)。
(1)将要插入的数取出放在X中;
(2)确定区间的中点位置:mid=[(low+high)/2];
(3)确定插入位置,将待插入的k值与R[mid].key比较,具体方法如下。
● 若R[mid].key>k,则由排序后表的有序性可知R[mid,…,n].key均大于k,因此,插入区间是左子表R[loW,…,high],其中high=mid-1。
● 若R[mid].key<k,则要插入的k必在mid的右子表R[mid+1,…,high]中,其中low=mid+1。
(4)在上面的过程中,low逐步增加,而high逐步减少,直到high<low,则找到插入位置为low,然后循环移动位置low后面的元素,再插入数值。
(5)重复上述过程,直到所有数都被插入。
有了上面的分析,我们再来看程序伪代码,第1空处在准备阶段,准备阶段要完成的任务是给变量赋初值,high←i-1将数组中的最后一个位置赋给了插入指针。high,因为插入的范围是数组的整个范围,那么第1空应该用来将数组的第一个位置赋给插入指针low,因此答案为“low←1”。
第2空是找插入位置用的循环条件,根据我们上面的分析,直到high<low时,才能确定插入的位置;而在low<=high时,循环一直执行,结合程序的内容,知道此空答案为low<=high。
第3空很明显用来确定区间的中间位置,但mid有可能为小数,在程序中我们用取整的方法来去掉小数部分,因此,此空答案为“mid<-int((low+high)/2)”。
第4空是条件X.key<R[mid].key不成立的情况下执行的语句,如果条件为假,则说明要插入的数大于中间位置的数,应该在其右区间里进行插入,根据分析知道,这时左指针low应该改变,这个空就是用来实现这个功能的,因此,答案为“low←mid+1”。
第5空在后移的循环操作中,作为后移的循环判断条件,在找到插入位置后,进行插入前,我们需要一个空间来存放插入的值。从程序中不难看出,是将待插入位置后面的所有元素向后移动一位,而待插入位置存放在low中,因此,此空答案为“i-1到low”。

试题二答案:

2、(1)n!=i (2)n=n/i (3)m=i (4)j=i/45+1 (5)count++
[解析] 本题考查C语言中正整数分解质因数算法和猴子分桃算法的实现。
在函数2.1中,要求将一个正整数分解质因数。我们先来了解一下质因数的概念,一个自然数的因数中,为质数的因数叫做这个数的质因数。把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如90=2
335,其中2、3、5都是质数。在对数n进行分解质因数时,应先找到一个最小的质数i,然后按下述步骤完成。
(1)判断这个质数i是否等于n,如果相等,则说明分解质因数的过程已经结束,打印出结果即可。
(2)如果n≠i,但n能被i整除,则i是n的质因数,应打印出i的值,并用n除以i的商,作为新的正整数n。
(3)如果n不能被i整除,则用i+1作为i的值,重复执行第(1)步。
通过代码我们已经知道了最小的质数为2,第1空是循环的判断条件,结合我们上面的分析,应该是判断质数i是否等于n,因此,此空答案为“n!=i”。
第2空在条件判断语句下,条件n%i0成立,说明n能被i整除,根据分析,应打印出i的值,并用n除以i的商作为新的正整数n。代码中已经实现了对i的输出,第2空的任务是用n除以i的商作为新的正整数n,因此,答案为“n=n/i”。
在函数2.2中,要求我们求出原来海滩上的桃子数,这个数的特点是除以5余1,且减去它的商和余数后再除以5又余1,一直这样下去,直到最后一次。要求这样一个有特点的数,我们可以在一个较大的范围里编程去找具有这种性质的数。结合代码我们知道,程序设计是从4~10000这个范围里去找具有这种特征的数。
第3空所在位置是第一层循环下面,应该是给变量赋初值阶段,结合后面的程序,可以发现m是用来临时存放当前求的基数i,因此,此空答案为“m=i”。
第4空在第二层循环下面,这个循环的作用是利用当前的基数i来求桃子数,那么求解的过程肯定是分桃过程的逆向过程。即此空的答案为“i=i/4*5+1”。
第5空在条件判断语句下面,如果条件成立,则执行此语句。我们接着看下面的程序,发现程序中有语句if(count4),而在程序中一直没有出现变量count的值改变的语句,而它的初值是0,因此,此空肯定用来改变count的值的,再结合猴子分桃的特性,可以得到此空的答案为“count++”。

试题三答案

3、(1)q->data=x (2)s[i]=q (3)i!=1
(4)s[j]->lchild=q (5)s[j]->rchild=q
[解析] 本题考查二叉树的构造。
题目要求构造一棵二叉树,而二叉树的性质如下:如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i≤n):
(1)如果i=1,则结点i无双亲,是二叉树的根;如果i>l,则其双亲是结点[i/2]。
(2)如果2i>n,则结点i为叶子结点,无左孩子;否则,其左孩子是结点2i。
(3)如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1。
下面我们来看程序。程序中声明了一个结点指针数组,用来保存生成的树中结点。用从键盘输入的方式来确定要插入的字符x和此结点在二叉树中的位置i(这个位置是指在完全二叉树中编号的位置)。
第1空是在生成一个新结点后的操作,生成了一个新结点后,自然要将从键盘输入的字符x值存放进来,以修改结点的两个指针域。程序中指针域都赋了空,因此,第1空的任务应该是将字符x写进来,因此,此空答案为“q->data=x”。
第2空是在对结点完成操作后的操作,根据题目意思,生成的结点应该要保存到数组s中,此数组是一个指针数组,保存结点时,是将结点的地址保存进数组中相应的位置,因此,此空答案为“s[i]=q”。
第3空是条件判断语句的条件,结合下面的程序可以知道,此条件语句用来判断当前结点是不是根结点,如果不是,才执行条件语句中的内容。根据上面的分析,如果i=1,则结点i无双亲,是二叉树的根,因此,此空的答案为“i!=1”。
第4空处后面有注释,说明i是j的左孩子结点,这个时候我们应该让i结点的左孩子指针指向结点i,此空就是要实现这一功能。而结点j被存放在数组s中的第i个位置,因此,此空答案为“s[j]->lchild=q”。
从程序中很容易看出,第5空与第4空功能相似,只是说i是i的右孩子结点,因此,让j结点的右孩子指针指向结点i。此空答案为“s[j]->rchild=q”。

软考初级程序员下午题(6)相关推荐

  1. 软考初级程序员下午题题库

    前言 本篇文章包含2005年到2022年,软考初级程序员下午真题,针对个别的题会做一些知识点讲解.答案有错误请评论,我一定会看!每天更新几题,2023.4.9–??祝考试顺利. 2005年下午题 答案 ...

  2. 软考初级程序员下午题

    题目:阅读以下说明和流程图,将应该填入__处的字句填写完整. [说明] 求连续函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法.为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与 ...

  3. 软考初级程序员有什么参考的书籍,主要考什么?

    软考初级程序员的参考书籍是官方教材--清华大学出版的<程序员教程>,复习的时候买这一本就好了. 主要考哪些知识点可以考试大纲里面的说明,考的其实都是一些基础的计算机知识. 既然是程序员,那 ...

  4. 2023年软考初级程序员

    一.考试科目: 程序员考两科,每科满分75分,45分及格. 科目一选择题:计算机硬软件基础知识,整体来说选题题部分是比较简单的. 科目二主观题:程序设计,下午题为6道大题,满分75分,45分及格.前4 ...

  5. 计算机软考初级程序员考试范围

    初级程序员考试:考试科目1:计算机硬软件基础知识 1. 计算机科学基础 1.1 数制及其转换 二进制.十进制和十六进制等常用数制及其相互转换 1.2 数据的表示 数的表示(原码.反码.补码表示,整数和 ...

  6. 2008年软考初级程序员试题(下午题)

    2008年程序员考试真题(下午题) 2008-05-27 21:53 虽然试题很简单,但也很容易粗心哦!!! 试题一 (共 15 分) 阅读以下说明和流程图,填补流程图中的空缺 (1)-(9),将解答 ...

  7. 计算机软考初级程序员教程,2013年计算机软考程序员教程

    流程控制语句(分支语句和循环语句) 程序体验: public class Test5 { /** * @param args * 分支语句的测试 * 1路 if * 2路 if else * N路 s ...

  8. 软考初级程序员上午单选题(20)

    36.Windows系统的任务栏不可能出现在屏幕的______. A.左边 B.右边 C.上边 D.中间 37.下列关于"快捷方式"的叙述中,不正确的是______. A.可以使用 ...

  9. 软考初级程序员易错题:在统一建模语言 (UML)中,( )展现了 一组对象以及它们之间的关系, 给出了系统的静态设计视图或静态进程视图,描述了( )中所建立的事物 实例的静态快照。

    在统一建模语言 (UML)中,( )展现了 一组对象以及它们之间的关系, 给出了系统的静态设计视图或静态进程视图,描述了( )中所建立的事物 实例的静态快照. 知识点: 统一建模语言 (UML) 问题 ...

最新文章

  1. python便捷数据怎么获取_Python数据获取与表示基础编程练习
  2. MATLAB图像处理-特征提取-形状特征 方法小结
  3. Linux更改终端的用户名和主机名的颜色
  4. MySQL字符串长度
  5. 七,OpenERP 移库操作模块
  6. 创建ipadWEB应用程序到主屏幕
  7. PIX 7.2 PAT
  8. 计算机软件类发明专利,计算机软件发明专利技术交底资料范例.doc
  9. 微信小程序云开发教程-墨刀原型工具入门
  10. 苹果手机换电池对手机有影响吗_苹果手机换电池去哪里换?这样操作既省钱又省力...
  11. 今日恐慌与贪婪指数为22 恐慌程度有所缓解
  12. 中国大学MOOC动物遗传学试题及答案
  13. STA X(X为主存地址)指令发出的微操作命令
  14. 【学习笔记】SBT学习笔记
  15. elementPlus使用icon图标不显示解决方法
  16. 【新知实验室】腾讯云TRTC服务体验
  17. html大作业网页代码 ——2019凡客服装店铺商城(1页) HTML+CSS+JavaScript HTML+CSS大作业_ 服装店铺网页制作作业_购物网页设计...
  18. 华为交换机S5720S-52P-SI-AC配置web管理端IP地址
  19. nodejs安装npm依赖时报错
  20. R语言使用epiDisplay包的kap函数(kap.m.raters)计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别

热门文章

  1. Git: getting started
  2. PHP intval 与 floatval
  3. C#端一个不错的订单号生成规则
  4. 英语口语练习--职业入门篇
  5. 使用josm绘制室内地图及路径(二)
  6. 人性化老人手机设计(三)
  7. 凝聚五城力量 2022Home尧泰汉海“益起微笑”公益活动圆满举行
  8. 漏洞扫描工具AWVS的介绍与使用
  9. flarum 轻论坛安装教程
  10. Linux命令之ethtool命令