导航菜单
首页 >  软考程序员初级真题下午  > 2019年下半年程序员考试下午真题(专业解析+参考答案) · 程序员历年真题含答案与解析

2019年下半年程序员考试下午真题(专业解析+参考答案) · 程序员历年真题含答案与解析

2019年下半年程序员考试下午真题(专业解析+参考答案)第 1 题第 2 题第 3 题第 4 题第 5 题第 6 题2019年下半年程序员考试下午真题(专业解析+参考答案)第 1 题

阅读以下说明和流程图,填写流程图中的空缺,将解答填入答题纸的对应栏内。【说明】某系统中有N个等长的数据记录,其主键值为随机排序且互不相等的正整数编号,表示为K(0),K(1),…,K(N-1)。现采用杂凑法将各数据记录存入区域S(0),S(1),S(2),…,S(M-1)中(M≥N),以加快按主键值检索的效率(初始时各区域都是空的)。下面流程图中,选用适当的质数P(N≤P≤M),对每个主键值先计算出它除以P的余数j。如果区域S(j)已占用,则考查下一个区域S(j+1),……,直到发现某个区域为 空时,则将该主键值相应的数据记录存入该区域(注意,S(M-1)的下一个区域是S(0))。 为了标记每个区域是否已占用,采用了M个标记位F(0),F(1),…,F(M-1)。初始时所有的标记位都为0,每当一个区域被占用时,将相应的标记位置1。例如,设6个记录的主键值分别为31、15、20、35、18、10,取质数P=7,用上述杂凑法将这些记录存入区域S(0)~S(7)后,各区域中记录的主键值依次为35、15、空、31、18、10、20、空。【流程图】

注1:“循环开始”框内给出循环控制变量的初值、终值和增值(默认为1),格式为:循环控制变量=初值,终值[,增值]注2:函数int(x)为取x的整数部分,即不超过x的最大整数。

答案与解析

试题难度:一般知识点:C程序设计>C程序设计试题答案:

(1)K(i)/P或等效形式(2)0(3)1→F(j)或F(j)=1或等效形式(4) j+1→j或j=j+1或j++或等效形式(5)0→j或j=0或等效形式

试题解析:

本题旨在考查程序设计(算法流程图设计)的能力。杂凑法是大数据处理时常用的数据存储检索方法,其检索效率很高。本流程图中,将依靠循环i=0,1,…,N-1,依次将主键值为K(i)的记录存入适当的区 域S(j)中。首先,需要求出K(i)除以质数P的余数j,采用的方法是计算K(i)-P*int(K(i)/P)。例 如,对于P=7,31/7的商的整数部分为4,所以31除以7的余数为31-7×4=3。因此流程图中的空(1)应填写K(i)/P或其等效形式。然后判断区域S(j)的标志位F(j)是否为0,即空(2)应填写0。如果F(j)=0则表示区域S(j)为空,可以将K(i)直接存入区域S(j)中,并将F(j)置1表示已被占用,即空(3)应填写1→F(j)。如果F(j)非0,则表示S(j)已占用,需要考虑下一个区域是否为空。也就是说,需要 将j增1,即空(4)应填写j+1→j。如果j增1后已超越最后一个区域,则需要考虑返回区域S(0)。也就是说,当j=M时,需要执行0→j,即空(5)应填写0→j。

第 2 题

阅读以下C代码,回答问题1至问题3,将解答写入答题纸的对应栏内。

【C代码1】

#includeint main(){int num = 5 ;printf("%d\n",++num);printf("%d\n",num++);printf("%d\n",num--);printf("%d\n",num);return 0;}

【问题1】(4分)请给出C代码1运行后的输出结果。【问题2】(6分)已知字符'a’的ASCII码值为十进制数97,请给出调用C代码2中函数func('a')后的输出结果。【问题3】(5分)请给出调用C代码3中函数test()后的输出结果。

答案与解析

试题难度:一般知识点:C程序设计>C程序设计试题答案:

【问题1】6676【问题2】a:97c:99e:101【问题3】BCDEFCDEFDEFEFF

试题解析:

本题考查考生对C程序基本语句和控制结构的理解和应用。C代码1主要考查前置自增(自减)和后置自增(自减)运算的含义。自增(自减)运算是C程序中频繁使用的运算,其含义是将变量的值增加1(减去1)。前置自增时,是将变量的值增加1,增1后变量的值作为表达式的值;后置自增时,是先取变量的值作为表达式的值,然后将变量的值增加1,自减运算同理。本代码段中,num的初始值为5,经过前置自增运算“++num”之后,num的值变为6,该表达式(++num)的值也是num自增后的值,即第一个printf输出6。对于表达式“num++”,是对num进行后置自增,该表达式的值取num自增之前的值(即6,即第二个printf输出6),而num的值变为7。接下来在printf中进行后置自减运算“num--”,此时表达式的运算结果是num自减之前的值(即7,即第三个printf输出7),而num的值会改变为6,因此第4个printf 输出6。C代码2主要考查针对字符运算的单重循环控制。字符数据的内部表示是其编码, 例如字符'a'的ASCII码值为97,输出时的格式控制串为"%c:%d"时,要求以字符方式和十进制数值方式输出,因此可看到输出结果为a:97。字符集中对数字、字母的编码都是 连续的,因此ch表示字符'a'时,ch+2就表示字符'c',以此类推。C代码3主要考查针对字符运算的双重循环控制。外层循环控制变量raw取值范围为0~5(等于5时结束循环),内层循环控制变量ch的取值范围为符‘B’+row~‘B’+5(等 于‘B’+5即‘G’时结束内层循环),如下表所示。

第 3 题

阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。【说明】规定整型数组a中的元素取值范围为[0,N),函数usrSort( int n, int a[] )对非负整型数组a的前n个元素进行计数排序。排序时,用temp_arr[i]表示i在数组a中出现的次数, 因此可以从0开始按顺序统计每个非负整数在a中的出现次数,然后对这些非负整数按照从小到大的顺序,结合其出现次数依次排列。例如,对含有10个元素{0,8,5,2,0,1,4,2,0,1}的数组a[]排序时,先计算出有3个0、2 个1、2个2、1个4、1个5和1个8,然后可确定排序后a的内容为{0,0,0,1,1,2,2,4,5,8}。下面代码中用到的memset函数的原型如下,其功能是将p所指内存区的n个字节都设置为ch的值。

void*memset (void *p, int ch, size_t n);

【C代码】

#include#include#include

#define N 101

void printArr(int a[],int n);void usrSort(int n,int a[]);

int main(){      int a[10]={0,8,5,2,0,1,4,2,0,1};

       printArr (a,sizeof(a)/sizeof(int));     (   1  )     _;             //调用usrSort()对数组a进行升序排序printArr ( a,sizeof(a)/sizeof(int) );return 0;}void printArr (int a[],int n){     int i;     for(i=0;i

相关推荐: