试题一
<函数1.1说明>
函数strcpy(char *to,char *from)将字符串from复制到字符串to.
<函数1.1>
void strcpy(char *to,char *from)
{while (____(1)____);}
<函数1.2说明>
函数merge(int a[],int n,int b[],int m,int *c)是将两个从小到大有序数组,a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数.
<函数1.2>
void merge(int a[],int n,int b[],int m,int *c)
{ int i,j;
for (i=j=0;i<n&&j<m;)
*c++=a[i]<b[j]?a[i++]:b[j++];
while (____(2)____) *c++=a[i++];
while (____(3)____) *c++=b[j++];
}
<函数 1.3说明>
递归函数sum(int a[],int n)的返回值是数组a[]的前n个元素之和
<函数 1.3>
int sum(int a[],int n)
{ if (n>0) return ____(4)____ ;
else ____(5)_____;
}
试题二
阅读下列函数说明和C代码,将应填入____(n)____处的子句写在答卷的对应栏内.
<函数 2说明>
本题中的函数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; op=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)