问题 填空题

阅读以下说明和C函数,将应填入______处的语句或语句成分写在对应栏内。
[说明1]
函数deldigit(char*s)的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成~个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再复制给s。
[C函数]
void deldigit(char*s)

char*t=(char*)malloc(______); /*申请串空间*/
int i,k=0;
if(!t) return;
for(i=0;i<strlen(s);i++=
if(!(*(s+i)>=’0’&&*(s+i)<=’9’))
t[k++]=______;

______=’\0’ /*设置串结束标志*/
strcpy(s,t);
free(t);

[说明2]
函数reverse(char*s,int len)的功能是用递归方式逆置长度为len的字符串s。例如,若串s的内容为“abcd”,则逆置后其内容变为“dcba”。
[C函数]
void reverse(char*s,int len)

char ch;
if(______)

ch=*s;
*s=*(s+len-1);
*(s+len-1)=ch;
reverse(______);


答案

参考答案:s+A,len-B

解析:函数deldigit(char*s)的思路是先申请一个与s等长的临时字符串空间并令t指向它,则第一空完成该步骤。s的长度用strlen()函数求得,这个函数在题“i<strlen(s)”中亦有提及。将非数字字符按次序暂存入该空间,则程序的for循环完成该步骤。“*(s+i)>=’0’&&*(s+i)<=’9’”表示用ASCI码逐个判断s中的字符是否为数字,如果是非数字,则该字符暂存入该空间t。因此第二空中应填“s[i]”。因为每次赋值之后,k都自动加1,所以,设置串尾结束符时,k不必再加1,直接将第三空填为“t[k]”。
函数reverse(char*s,int len),函数中又有reverse函数,说明本程序是个递归函数。那么需要判断该串是否为只含有1个字母的串。当长度大于1时,才需要继续递归,因此,第四空中应填“len>1”。本函数逆置字符串的做法是将串的第一字符和最后一个字符对换。然后递归剩下的字符串。因此,第五空中应填“s+1,len-2”。

单项选择题 A1/A2型题
判断题