阅读以下说明和C函数,回答问题1和问题2,将解答填入对应栏内。 [说明] 对于具有n个元素的整型数组a,需要进行的处理是删除a中所有值为0的数组元素,并将a中所有非0元素按照原顺序连续地存储在数组空间的前端。 下面分别用函数compact

admin2012-01-13  63

问题 阅读以下说明和C函数,回答问题1和问题2,将解答填入对应栏内。
   [说明]
   对于具有n个元素的整型数组a,需要进行的处理是删除a中所有值为0的数组元素,并将a中所有非0元素按照原顺序连续地存储在数组空间的前端。
   下面分别用函数compactArr_v1和compactArr_v2来实现上述处理要求,函数的返回值为非零元素的个数。
   函数CompactArr(int a[],int n)的处理思路是:首先申请一个与数组a的大小相同的动态数组空间,然后顺序扫描数组a的每一个元素,将遇到的非0元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组a中。
   函数CompactArr_v2(int a[],int n)的处理思路是:利用下标i(初值为0)顺序扫描数组a的每一个元素,下标k(初值为0)表示数组a中连续存储的非0元素的下标。扫描时,每遇到一个数组元素,i就增1,而遇到非0元素并将其前移后k才增1。
   [C函数1]
   int CompactArr vl(int a[],int n)
   {
   int i, k;
   int *temp=(int*)malloc(n*  (1)  );
   if(!temp)
   return-1;
   for(i=0, k=0; i<n; i++)
   if(a!=0){
     (2)   =a;
   }
   for(i=0;  (3)  ; i++)
   a=temp;
   return k;
   }
   [C函数2]
   intCompactArr v2(inta[],intn)
   {
   int i, k;
   for(i=0, k=0; i<n; i++)  {
   if(a!=0){
     (4)  =a;
   }
   }
   return k;
   }

请根据说明中函数CompactArr_v1的处理思路填补空缺(1)~(3),根据CompactArr_v2的处理思路填补空缺(4)。

选项

答案sizeof(int) tenlp[k++] 或*(temp+k++) 或等价表示 i<k 或等价表示 a[k++] 或*(a+k++) 或等价表示

解析 本题考查C程序设计和分析能力。
   本问题考查C程序结构、数组及运算的应用知识。
   根据题目中对函数CompactArr_v1的处理思路描述,空(1)处应填入sizeof(int)。
   以下代码将数组a中的非0元素复制到动态数组temp中。
   for(i=0, k=0; i<n; i++)
   if(a!=0){
     (2)  =a;
   }
   显然,k应作为temp的下标索引变量使用,因此空(2)处应填入temp[k++],当该循环语句结束后,k的值也就是a中非0元素的个数。据此,空(3)处应填入i<k。
   根据题目中对函数CompactArr_v2的处理思路描述,空(4)处应填入a[k++]。
转载请注明原文地址:https://kaotiyun.com/show/f6jZ777K
0

最新回复(0)