阅读以下说明和c函数,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明1】 函数Counter(int n,int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。例如,十进制数22的二进制表示

admin2010-04-12  41

问题 阅读以下说明和c函数,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明1】
函数Counter(int n,int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。例如,十进制数22的二进制表示为10110。对于该二进制数,l的个数为3,在w[O]中存入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】
函数smove(int A[],int n)的功能是将数组中所有的奇数都放到所有偶数之前。其过程为:设置数组元素下标索引i(初值为0)和j(初值为n-1),从数组的两端开始检查元素的奇偶性。若A、A[j]都是奇数,则从前往后找出一个偶数,再与A[j]进行交换;若A、A[j]都是偶数,则从后往前找出一个奇数,再与A进行交换;若A是偶数而A[j]是奇数,则交换两者,直到将所有的奇数都排在所有偶数之前为止。
【c函数2】
void Smove(int A[],in七n)(  int temp,i=0,j=n-1 ;
if(n<2)return;
while(iif(A%2==l&&A[j]%2==1)((3)  ;)
else if(A%2==0&&A[j]%2==0)  (    (4)    ;)
else(
if  (    (5)    )  {
ternp=A;A  =A[j];A[j]  =temp;
}
i十+,j一一;
}
}
}

选项

答案(1)n!=0 (2)k*=2 (3)i++ (4)j++(5)(A[j]%2==0)&&(A[j]%2 ==1)

解析 根据函数1的例子看出while循环中就是要把十进制整数n转换为二进制,并对为1的位数进行保存,所以循环的条件就是“n!=0”,一旦n=0,就说明n的二进制已经表示完毕,所以空(1)的答案为“n!=0”或者是“n>0”。每执行一次“n=n/2”,二进制的数就增加一位,因为要保存二进制数中l所在位置的权,所以k的值就需要乘以2来记录当前位置的权,故空(2)的答案为“k=k * 2”或者“k*=2”。空(3)是满足条件A和A[j]都是奇数时的处理过程,从“说明2”中我们知道这时候需要“从前往后找出一个偶数”,所以空(3)的答案为“i++”,向后寻找偶数;空(4)是满足条件A和A[j]都是偶数时的操作,这时需要“从后往前找出一个奇数”,所以空(4)的答案为“j--”,从后面向前寻找奇数;满足空(5)的条件之后的操作是将A和A[j]进行交换,从“若A是偶数而A[j]是奇数,则交换两者”这句话,可以看出满足将A和A[j]进行交换的条件是A是偶数而A[j]是奇数,即空(5)的答案为“(A%2==0)&&(A[j]%2==1)”。
转载请注明原文地址:https://jikaoti.com/ti/wXW7FFFM
0

最新回复(0)