软考程序员考试试题及分析与解答(二)

程序员 责任编辑:小狐狸 2016-05-05

添加老师微信

备考咨询

加我微信

摘要:软考程序员考试试题及分析与解答(二)

       >>>>点击进入了解程序员培训视频

 >>>>点击进入了解程序员在线辅导

 >>>>点击进入了解程序员考试教材

       程序员考试是全国软考的初级考试,通过程序员考试的合格人员具有助理工程师(或技术员)的实际工作能力和业务水平。希赛软考网整理了一些程序员考试历年真题,供大家练习。

       试题二

   阅读以下说明和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,或其等价形式

     希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库软考历年真题)、软考培训教材软考视频教程,多样的培训方式包括在线辅导面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。

 相关推荐

 2016年希赛教材大放送 

   程序员教程

   程序员考试考前串讲

   程序员考试知识点分析与真题详解(第4版 )

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

软考备考资料免费领取

去领取