摘要:软考程序员考试试题及分析与解答(二)
程序员考试是全国软考的初级考试,通过程序员考试的合格人员具有助理工程师(或技术员)的实际工作能力和业务水平。希赛软考网整理了一些程序员考试历年真题,供大家练习。
试题二
阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。
【说明1】
函数Counter(intn,intw[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。
例如,十进制数22的二进制表示为10110.对于该二进制数,1的个数为3,在w[0]中存入2(即21)、w[1]中存入4(即22)、w[2]中存入16(即24)。
【C函数1】
intCounter(intn,intw[])
{intI=0,k=1;
while((1)){
if(n%2)w[i++]=k;
n=n/2;(2);
}
returni;
}
【说明2】
函数Smove(intA[],intn)的功能是将数组中所有的奇数都放到所有偶数之前。其过程为:设置数组元素下标索引i(初值为0)和j(初值为n-1),从数组的两端开始检查元素的奇偶性。若A[i]、A[j]都是奇数,则从前往后找出一个偶数,再与A[j]进行交换;若A[i],A[j]都是偶数,则从后往前找出一个奇数,再与A[i]进行交换;若A[i]是偶数而A[j]是奇数,则交换两者,直到将所有的奇数都排在所有偶数之前为止。
【C函数2】
voidSmove(intA[],intn)
{inttemp,i=0,j=n-1;
if(n<2)return;
while(i<j){
if(A[i]%2==1&&A[j]%2==1){(3);}
elseif(A[i]%2==0&&A[j]%2==0){(4);}
else{
if((5)){
temp=A[i];A[i]=A[j];A[j]=temp;
}
i++,j--;
}
}
}
试题二分析
本题考查C程序控制结构的应用。
根据题目描述,函数Counter(intn,intw[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。要计算n的二进制形式中1的个数,基本方法是计算n的二进制数时进行计数,题中的函数Counter采用的就是此方法。十进制数转换为二进制数的方法是辗转除以2取余数,直到被除数为0时为止。
例如,十进制数26的二进制形式为11010,计算步骤为:
①被除数是26,除数是2,商为13,余数为0;
②被除数是13,除数是2,商为6,余数是1;
③被除数是6,除数是2,商为3,余数是0;
④被除数是3,除数是2,商为1,余数是1;
⑤被除数是1,除数是2,商为0,余数是1.
计算结束。
从上例可知,二进制数的各位是从低到高依次计算出来的。
因此,函数Counter中的空(l)处应填入n或n!=O.显然,代码中用k记录二进制数各位的权值,其初始值为1,每算出1位,其值要改为上一位权值的2倍。因此空(2)处应填入k=k*2或k*=2.
对于函数Smove(intA[],intn),其功能是将数组中所有的奇数都放到所有偶数之前。分析题中给出的处理过程,交换动作发生在A[i]为偶数而A[j]为奇数时,因此空(5)处应填入"A[i]%2==0&&A[j]%2!=0"(或其等价表示方式),其他情况下都是修改i和(或)j的值。下面举一例进行说明,设数组A中的元素初始排列为15,20,23,30,77,62,45,68,34,61.
初始时i=0,j=n-1=9.A[0]=15,A[9]=61,A[0]是奇数,所以其值保持不动,A[9]也是奇数,需要将其前移,实质上是要找出前面的一个偶数与其对调,这就需要增加下标i的值,从而向后找偶数。对应的代码是i++,j不变,因此空(3)处应填入i++或等价表示方式。接下来找到的偶数是A[1],将其与A[9]对调,数组中的元素排列情况为15,61,23,30,77,62,45,68,34,20.之后i++,j--,对应的数组元素为A[2](值为23,是奇数)和A[8](值为34,是偶数),这种情况下显然不需要进行对调,因此将i增1、j减1,找到A[3]和A[7].由于A[3](值为30)和A[7](值为68)都是偶数,因此需要从后面找出一个奇数,将其与A[3]对调。因此,空(4)处应填入j--(或等价表示方式)。接下来找到A[6],交换A[3]和A[6]的值,数组元素的排列情况为15,61,23,45,77,62,30,68,34,20.
这样,数组中的奇数全部排在偶数之前。
试题二答案
(l)n!=0,或其等价形式【若考生解答为n>0,给1分】
(2)k=k*2,或k*=2,或k+=k,或k=k+k,或其等价形式(3分)
(3)i++,或++i,或i+=1,或i=i+1,或其等价形式(3分)
(4)j--,或--j,或j-=1,或j=j-1,或其等价形式(3分)
(5)A[i]%2==0&&A[j]%2==1(3分)
或A[i]%2==0&&A[j]%2
或!(A[i]%2)&&A[j]v2,或其等价形式
希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库(软考历年真题)、软考培训教材和软考视频教程,多样的培训方式包括在线辅导、面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。
相关推荐
软考备考资料免费领取
去领取