当前位置: 首页icon 51CTO软考 > 软考资讯 >考试科目 >2023年5月程序员 模拟二 下午之三

2023年5月程序员 模拟二 下午之三

作者:mb60efa0d0657ac2023-12-25 01:00:15
备考咨询 刷题指导
添加专属学姐
下载资料 2024上半年软考备考资料+考试大纲
下载按钮 下载
引号

摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2023年5月程序员 模拟二 下午】部分试题的详解,一起来看看吧~1、试题三(共15分,每空3分)【说明1】函数deldigit(char*s)的功能是将字

引号
摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2023年5月程序员 模拟二 下午】部分试题的详解,一起来看看吧~



1、试题三(共15分,每空3分)【说明1】函数deldigit(char*s)的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再复制给s。【C函数】【C函数】void deldigit(char *s){  char *t = (char *)malloc(   (1)   );    //申请串空间  int i, k = 0;  if (!t)  return;  for(i = 0; i < strlen(s); i++)if ( !(*(s+i)>='0' && *(s+i)<='9') ) {    t[k++] =   (2)  ;    }    (3)   = '\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 (   (4)   )  {ch = *s;    *s = *(s+len-1);    *(s+len-1) = ch;    reverse(   (5)   );  }}
答案:

(1) strlen(s)+1

(2) *(s+i),或s[i],或其他等价表示

(3) *(t+k),或t[k],或其他等价表示

(4) len>1,或len>=1,或其他等价表示

(5) s+1,len-2


答题解析:

函数deldigit(char *s)的思路是先申请一个与S等长的临时字符串空间并令t指向它,则(1)完成该步骤。S的长度用strlen(s)+1求得,其中加1的原因是函数strlen(s)计算s所指向字符串的长度时,没有包含串结束标志字符“\0”。当然申请比strlen(s)+1更大的存储区也可以,但是没有必要。这个函数在题“i=’0’*(s+i)=’9’ ”表示用ASCI 码逐个判断s中的字符是否为数字,如果是非数字,则该字符暂存入该空间t.,因此(2)中应该填写s[i]。因为每次赋值之后,k都自动加1,所以,设置串尾结束符时,k不必再加1,直接将(3)填为t[k]。

函数reverse(char *s, int len),函数中又有reverse函数,说明本程序是递归函数。那么需要判断该串是否为只含有1的字母的串。当长度大于1时,才需要继续递归,因此,(4)中应填“len1”。本函数逆置字符串的做法是将串的第一字符和最后一个字符对换。然后递归剩下的字符串。因此,(5)中应该填“s+1,len-2”。



查看完整试题>>>


代理合作学习群