软件水平考试(初级)程序员下午(应用技术)模拟试卷33

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:6次
  • 作答时间:150分钟
试卷简介
试卷预览
1

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

  【说明】

 本题中的函数encode()和decode()分别实现对字符串的变换和复原。其中变换函数encode()顺序考查已知字符串的字符,按以下规则逐组生成新字符串:

 (1)若已知字符串的当前字符不是数字字符,则将该字符复制在新字符串中。

 (2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中。

 (3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中。

 (4)以上述一次变换为一组,在不同组之间另插入一个下划线“_”用于分隔。例如,encode()函数对字符串26a3t2的变换结果为666_a_tttt_2。

 复原函数decode()做与变换函数encode()相反的工作。即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中略过变换函数,为不同组之间添加的一个下划线字符。

 假定调用变换函数encode()时的已知字符串中不含下划线字符。

 【函数】

 int encode(char *instr, char *outstr){

   char *ip, *op, c; int k,n;

   ip=instr; p=outstr;

   while(*ip){

     if(*ip>='0' && *ip<='9' && *(ip+1)){

       n=(1);

       c=(2);

       for(k=0; k<n;k++)

         *op++=c;

     }

     else (3);

     *op++='_';

     ip++;

   }

   if(op>outstr)op--;

    (4);

   return op-outstr;

 }

 int decode(char *instr, char *outstr){

   char *ip, *op, c; int n;

   ip=instr; p=outstr;

   while(*ip){

     c=*ip; n=0;

     while(*ip==c&&n<10){

       ip++; n++;

     }

     if((5))*op++='0'+n-1;

     *op++=c;

     if((6))ip++;

   }

   *op='\0';

   return op-outstr;

 }