5.下列程序输出的结果是(
)。
#include
voiddel( char*str )
{
inta, b ;
for(a = b = 0 ; str[a]!='\0'; a++ )
if(*(str+a)!='c’)
*(str+b++)=*(str+a);
str='\0';
}
void main( )
{
charstr[] ="abcdef" ;
del(str);
printf("str[ ]=%s " , str );
}
提示:在函数del中str+a地址上的内容不为字符’c’时不复制,实际上是指删除指针str所指的字符串中的字符’c’。
6.以下程序输出的结果是(
)。
#include
#include
voidfun( char*w ,intm)
{
chars, *p1 , *p2;
p1 = w;
p2= w+m-1;
while(p1
void main()
{
inta[3][3] = {{2,0,8},{4},{6}};
inti,*p = &a[0][0];
for(i = 0;ia[mid])
(3)
;
else
(4) ;
}
return(-1);
}
提示:用low、high、mid分别表示数组a低地址端、高地址端、中间元素的下标,只要低地址端下标小于高地址端下标循环一直持续,如果中间元素大于所查找的数,表示所查找的数在以low、high为边界的左侧,如果中间元素小于所查找的数,表示所查找的数在以low、high为边界的右侧,如都不是表示已找到。
9.下述函数从一个数组v中删除值为key的元素。数组的元素个数由指针n指明,请填空。
voiddelnode(doublev[],int *n)
{int i,j,k=-1;
for(i=
(1)
;
(2)
;i--)
if(v==key)
{
k++;
for(j=i; (3)
;j++)
v[j]=v[j+1];
}
if(k>=0)
*n=
(4)
}
提示:由于在第1个for循环中为i--,因而循环一定是从数组下标最大的元素*n-1开始,循环的条件是i>=0,如果找到要删除的元素,后面的元素依次向前移,一直移到最后v[*n-1],k标记删除的次数,*n存放最后数组中元素的个数。
|