齐乐娱乐在线 > 复习指导 > 2015年自考“高级语言程序设计”习题答案详解(34)
2014
10-30

2015年自考“高级语言程序设计”习题答案详解(34)

2015年自考“高级语言程序设计”习题答案详解(34) 5.要求函数的功能是在一维数组a中查找x值。若找到,则返回所在的下标值;否则,返回0.设数据放在数组元素的a[1]到a[n]中。在以下给出的函数中,不能正确执行此功能的函数是( )
① funa(int *a,int n, int x)
{ *a=x;
whlie(a[n]!=x) n——;
return n;
}
② funb(int *a, int n, int x)
{ int k ;
for( k=l; k =n; k++)
if(a[k]==x) return k;
return 0 ;
}
③ func(int a[], int n, int x)
{ int * k;
a[O]=x; k=a+n;
while(*k!=x)k——;
return k-n;
}
④ fund(int a[], int n, int x)
{ int k=0;
do k++;
while((k N+1) (A[K]! =X));
if((k N+1) [K]==X)) RETURN K;
else return 0;
}
「解」在数组中找指定值是经常遇到的计算要求,有多种编程方法。在这里,数据预放在数组下标1至n的元素中,下标为0的元素没有放数据,程序可以利用这个位置简化查找函数。函数funa先将要查找的情放入a[0],从数据表的最后一个元素开始逆序向前查找。这样做的好处是循环条件不必担心因数组中原先没有值为x的元素而一直顺序查找下去,访问不是数表的元素,需插入条件n>O.在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,而若前者,函数返回比该函数也能正确完成查找工作。这样,不能正确完成查找工作的函数是函数fonc.所以正确选择是③。
6.以下程序的输出结果是( )
# include
subl(char a,char b) {char c;c=a;a=b;b=c;}
sub2(char *a,char b){ char c;c=*a;*a=b;b=c;}
sub3(char *a,char *b) { char c;c=*a;*a=*b;*b=c;}
main()
{ char a, b;
a=‘A’; b=‘B’; sub3( a, b); putchar(a); putchar(b);
a=‘A’;b=‘B’ ;Sub2( a,b);putchar(a); rutchar(b);
a=‘A’; b=‘B’; sub1(a,b); putchar(a);putchar(b);
}
①BABBAB ②ABBBBA
③ BABABA ④ BAABBA
「解」在上述程序中,函数subl完成两形参值的交换,这个交换不影响实参变量,这是一个没有意义的函数。函数sub2将第二个形参的值置入由第一个指针形参所指的变量中,指针形参所指的变量由调用时的实参提供。函数sub3完成将两个形参所指的变量的值交换。程序调用sub3,使变量a和b的值交换输出BA;调用subZ,使变量b的值传送到a,输出BB;调用subl,变量a和b的值不改变,输出AB.所以程序输出BABBAB.正确解答是①。
最后编辑:
作者:齐乐娱乐在线