【模考】2022年下半年程序员下午题之三
摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【【模考】2022年下半年程序员下午题】部分试题的详解,一起来看看吧~1、试题三(共10分,每空2分)【说明1】函数Counter(intn,int w[])
1、试题三(共10分,每空2分)【说明1】函数Counter(intn,int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。例如,十进制数22的二进制表示为10110。对于该二进制数,1的个数为3,在w[0]中存入2 (即21)、w[1]中存入4 (即22)、w[2]中存入16 (即24)。【C函数 1】int Counter(int n, int w[]){ int i = 0, k = 1;while ( (1) ) {if (n % 2) w[i++] = k;n = n / 2; (2) ;}return i;} 【说明2】函数Sm0Ve(int A[], int n)的功能是将数组中所有的奇数都放到所有偶数之前。其过程为:设置数组元素下标索引i (初值为0)和j (初值为n-1),从数组的两端开始检 查元素的奇偶性。若A[i]、A[j]都是奇数,则从前往后找出一个偶数,再与A[j]进行交换; 若A[i]、A[j]都是偶It则从后往前找出一个奇数,再与A[i]进行交换;若A[i]是偶数而A[j]是奇数,则交换两者,直到将所有的奇数都排在所有偶数之前为止。【C函数 2】void Smove(int A[], int n){ int temp, i = 0, j = n-1;if ( n < 2 ) return;while ( i < j ) {if ( A[i] % 2 == 1 && A[j] % 2 == 1 ) { (3) ; }else if ( A[i] % 2 == 0 && A[j] % 2 == 0 ) { (4) ; }else {if ( (5) ) {temp = A[i]; A[i] = A[j]; A[j] = temp;}i++, j--;}}}
答案:
(1)n!=0,或其等价形式
(2)k=k*2,或k*=2,或k+=k,或k=k+k,或其等价形式
(3)i++,或++i,或i+=1,或i=i+1,或其等价形式
(4)j--,或--j,或j-=1,或j=j-1,或其等价形式
(5)A[i]%2=0&&A[j]%2!=1,或A[i]%2!=0&&A[j]%2,或!(A[i]%2)&&A[j]%2,或其等价形式
答题解析:
本题考查c程序控制结构的应用。
根据题目描述,函数Counter(int n, int w[])的功能是计算整数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中的空(1)处应填入n或n!=0。显然,代码中用k记录二进制数各位的权值,其初始值为1,每算出1位,其值要改为上一位权值的2倍。因此空(2)处应填入k=k*2或k*=2。
对于函数Smove(intA[], int n),其功能是将数组中所有的奇数都放到所有偶数之前。分析题中给出的处理过程,交换动作发生在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,6......
查看完整试题>>>
软考资料: 2024年软考论文范文> 软考考试核心重点难点汇总> 查看更多>
备考刷题:章节练习+每日一练> 软考历年试题+模拟题>查看更多>