程序员考试真题及答案试题一(15分)阅读下列函数说明和C代码,将应填入其中__(n)__处的字句写在答卷的对应栏内
1说明】设链表结点的类型为typedefstructelem{intval;structelem*next;}intNode;函数merge(int*a,int*b)是将两个升序链表a和b合并成一个升序链表
1】intNode*merge(intNode*a,intNode*b){intNode*h=a,*p,*q;while(b){for(p=h;p&&p->val<b->val;q=p,p=p->next);if(p==h)__(1)__;else__(2)__;q=b;b=b->next;__(3)__;}returnh;}【函数1
2说明】递归函数dec(inta[],intn)判断数组a[]的前n个元素是否是不递增的
不递增返回1,否则返回0
2】intdec(inta[],intn){if(na[0])__(3)__;}【函数2
2说明】函数combine(a,b,c)是计算两个整数的组合数
由于计算结果超出longint的表示范围,故用本题【函数2
1说明】的方法存储计算结果
设整数a和b(a>=b),它们的组合c(a,b)=a
/((a-b)
计算a和b的组合可采用以下方法:a
/(a-b)
=a*(a-1)*(a-2)*…*(a-b+1)/b
=u1*u2*…*ub/(d1*d2*…*db)其中u1=a,u2=a-1,…,ub=a-b+1;d1=1,d2=2,…,db=b
从而计算a和b的组合c(a,b),可变成计算上述分式
为计算上述分式,先从u1,u2,…,ub中去掉所有d1*d2*…*db的因子,得到新的u1,u2,…,ub
然后再将它们相乘
以下函数中调用的外部函数gc