[说明]
设计一程序,输入16个整数到一个数组中,将数组位序颠倒重新排序,使每个数字不再按原j的顺序排列,而是按j的二进制数颠倒后得出的数排列,例如,将第1个(0001)数与第8个(1000)数交换,将第3个数(0011)与第12个数(1100)交换。
[C++程序]
#include<iostream.h>
#define SIZE 16
#define SWAP (a,b) temper=(a); (a)= (b); (b) =temper;
void maln()
int data[SIZE];
int n:
cout<<"请输入"<<SIZE<<"个整数:";
for (n=0;n<SIZE;n++)
(1) ;
int j=0,m;
for (int i=0; i<n; i++)
if(j>i)
(2) ;
(3) ;
while( (4) ) &&j>=m)
j-=m;
m>>=1:
(5) ;
cout<<endl<<"排序后:";
for(n=0;n<SIZE;n++)
cout<<data [n]; <<" ";
参考答案:j+=m
解析: 本题考查的是用C++程序编程。
题目要求将数组中的数按照位序倒序重新排列,根据给出的语句,并经过分析我们可知,程序首先是读入了一个数组,所以空(1)应填入cin>>data[n]。接着求从0到SIZE-1住序倒序后的值,并将对应的数组中的两数交换,这里多了一项比较,只有求出的位序倒序数大于本身时才做交换,而小于本身时说明已经作了一次交换,而不再交换,所以,空(2)应填入SWAP(data[j],data[i])。while循环内是求位序倒序数的主要部分,空(3)处应填入m=SIZE/2。由于m要进行右移一位的操作,也就是除2,那么m就必须大于等于2,因此空(4)应填入m>=2。最后,在对m进行过移位操作后,要将其变化反映到j上,所以,空(5)处应填j+=m。