要求函数的功能是在一维数组a中查找x值。若找到,则返回所在的下标值;否则,返回0。设数据放在数组元素的a[1]到a[n]中。在以下给出的函数中,不能正确执行此功能的函数是( )。

admin2014-10-20  27

问题 要求函数的功能是在一维数组a中查找x值。若找到,则返回所在的下标值;否则,返回0。设数据放在数组元素的a[1]到a[n]中。在以下给出的函数中,不能正确执行此功能的函数是(    )。

选项 A、funa(int*a,int n,int x)
{*a=x;
whlie(aEn]!=x)nm一;
return n;
}
B、funb(int*a,int n,int x)
{int k;
for(k=1;k<=n;k++)
if(a[k]==x)return k;
return 0;
}
C、func(int a[],int n,int x)
{int*k;
a[o]=x;k=a+n;
while(*k!=x)k一一;
return k—n:
}
D、fund(int a[],int n,int x)
{int k=0;
do k++;
while((kif((kelse return 0;
}

答案C

解析 在数组中找指定值是经常遇到的计算要求,有多种编程方法。在这里,数据预放在数组下标1至n的元素中,下标为0的元素没有放数据,程序可以利用这个位置简化查找函数。函数funa先将要查找的数放入a[0],从数据表的最后一个元素开始逆序向前查找。这样做的好处是循环条件不必担心因数组中原先没有值为x的元素而一直顺序查找下去,访问不是数表的元素,需插入条件n>0。在a[0]处放入x后,这个条件就不必要了,循环至少在访问了a[0]后终止,并返回0值。所以该函数能完成指定的功能。函数funb采用常规的办法编写,循环在a[1]与a[n]之间顺序寻找,一旦找到立即返回找到处的下标,直至查找循环结束,查不到指定的值而返回0值。函数func采用与函数funa相同的方法,不过是另外引入一个指针变量。但是该函数return语句后的表达式有严重的错误,应返回k—a,两指针的差,其值等于找到元素的下标。表达式k—n是指针k向前移n个位置的指针值。函数fund预置k为0,循环让k增1,并在k在界内和a[k]不等于x的情况下循环。循环结束有两种情况,或k已不在界内,或k在界内,并且a[k]等于x。若是后者,函数返回k,而若前者,函数返回比该函数也能正确完成查找工作。这样,不能正确完成查找工作的函数是函数{onec。所以正确选择是C。
转载请注明原文地址:https://kaotiyun.com/show/2lvR777K
0

最新回复(0)