本栏目下题库来源于互联网,轻速云承诺对于用户导入平台的题库是严格保密的,不会在此呈现!
轻速云给您提供更好的在线考试系统服务!
2009年下半年程序员下午试卷
1、【 简答题
试题一(共15分)阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】求连续函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法。为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与f(b)符号相反(a<b),则在区间(a, b)中必然存在f(x)的根。因为当x从a变到b时,连续函数的值将从正变到负(或从负变到正),必然要经过0。区间(a, b)就是根的初始范围。
        取该区间的中点m,如果f(m)=0,则根就是m。如果f(a)与f(m)符号相反,则根一定在区间(a, m)中;如果f(m)与f(b)符号相反,则根一定在区间(m, b)中。因此,根的范围缩小了一半。
        依此类推,将区间一半一半地分下去,当区间的长度很小(达到根的精度要求,例如0.001)时,或者当区间中点处的函数值几乎接近于0(即绝对值小于预先规定的微小量,例如0.001)时,近似计算就可以结束了。
        以下流程图描述了用二分法近似计算区间(a, b)中f(x)的根的过程。
【流程图】
    [15分]
解析:
(1) (a+b)/2 
(2) f(x) 
(3) fabs(y) 
(4) b 
(5) a
2、【 简答题
试题二(共15分)阅读以下说明和C函数,将应填入(n)处字句写在答题纸的对应栏内。
【说明1】
      函数Counter(int n, int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。
        例如,十进制数22的二进制表示为10110。对于该二进制数,1的个数为3,在w[0]中存入2(即21)、w[1]中存入4(即22)、w[2]中存入16(即24)。
【C函数1】
int Counter(int n, int w[])
      {    int i=0, k=1;
while(  (1)  ){
                    if (n%2)  w[i++]=k;
                    n=n/2;    (2)    ;
            }
            return I;
      }
【说明2】函数Smove(int A[], int n)的功能是将数组中所有的奇数都放到所有偶数之前。其过程为:设置数组元素下标索引i(初值为0)和j(初值为n-1),从数组的两端开始检查元素的奇偶性。若A[i]、A[j]都是奇数,则从前往后找出一个偶数,再与A[j]进行交换;若A[i],A[j]都是偶数,则从后往前找出一个奇数,再与A[i]进行交换;若A[i]是偶数而A[j]是奇数,则交换两者,直到将所有的奇数都排在所有偶数之前为止。
【C函数2】
void Smove(int A[],int n)
{ int temp, i=0, j=n-1;
  if(n<2)return;
  while(i<j){
      if(A[i]%2==1&&A[j]%2==1){  (3)  ;}
      else if(A[i]%2==0&&A[j]%2==0){  (4)  ;}
        else{
                if(  (5)  ){
                  temp=A[i];A[i]=A[j];A[j]=temp;
                }
                  i++,j--;
            }
    }
} [15分]
解析:
(1) n!=0   
(2) k*=2   
(3) i++   
(4) j++
(5) (A[i]%2==0)&&(A[j]%2==1)
3、【 简答题
试题三(共15分)阅读以下说明、C函数和问题,将解答写入答题纸的对应栏内。
【说明1】函数test fl (int m,int n)对整数m、n进行某种运算后返回一个整数值。
【C函数1】
int test_fl (int m, int n)
{  int k;
    k=m>n?m:n;
    for(;(k%m!=0)||(k%n!=0);k++);
    return k;

【问题1】(5分)
            (1)请写出发生函数调用test_fl(9,6)时,函数的返回值;
            (2)请说明函数test_fl的功能。
【说明2】设在某C系统中为每个字符分配1个字节,为每个指针分配4个字节,sizeof(x)计算为x分配的字节数。函数test_f2()用于测试并输出该C系统为某些数据分配的字节数。
【C函数2】
void test_f2()
{  char str[]="NewWorld";  char *p=str;    char i='\0';
void *ptr=malloc(50);
    printf("%d\t",sizeof(str));        printf("%d\n",sizeof(p));
    printf("%d\t",sizeof(i));          printf("%d\n”,sizeoqptr)),
}
【问题2】(4分)
            请写出函数test_f2()的运行结果。
【说明3】函数test_f3(char s[])的功能是:将给定字符串s中的所有空格字符删除后形成的串保存在字符数组tstr中(串s的内容不变),并返回结果串的首地址。
【C函数3】
char *test_f3 (const char s[])
{  char tstr[50]={'\0'};  unsigned int i,k=0;
    for(i=0;i<strlen(s);i++)
        if(s[i]!= ' ')tstr[k++]=s[i];
    return tstr;

【问题3】(6分)
            函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。 [15分]
解析:
    问题1:
(1) 18 
(2) 求m和n的最小公倍数
    问题2:
    9  4
    1  4
    问题3:
    局部数组存放字符串作为函数的返回值是不可取的。应使用 maloc{}动态分配函数来进行分配空间,存储字符串结果,返回其首指针。
4、【 简答题
试题四(共15分)阅读以下说明和C函数,将解答填入答题纸的对应栏内。
【说明】函数del_substr(S,T)的功能是从头至尾扫描字符串S,删除其中与字符串T相同的所有子串,其处理过程为:首先从串S的第一个字符开始查找子串T,若找到,则将后面的字符向前移动将子串T覆盖掉,然后继续查找子串T,否则从串S的第二个字符开始查找,依此类推,重复该过程,直到串S的结尾为止。该函数中字符串的存储类型SString定义如下:
    typedef struct{
        char *ch;                /*串空间的首地址*/
        int length;                /*串长*/
}SString;
【C函数】
void del substr(SString*S, SString T)
{
int i, j;
          if(S->length<1||T.length<1||S->length<T.length)
                  return;
        i=0;                          /* i为串S中字符的下标 */
          for(;;){
              j=0;                      /* j为串T中字符的下标 */
            while(i<S->length&&j<T.length){
/* 在串S中查找与T相同的子串 */
                    if(S->ch[i]==T.ch[j]){
                              i++; j++;
                      }
                      else{
                            i=  (1)  ;  j=0;
/* i值回退,为继续查找T做准备*/
                      }
              }
            if(  (2)  ){          /* 在S中找到与T相同的子串 */
                    i=  (3)    ;      /* 计算S中子串T的起始下标 */
                    for(k=i+T.length; k<S->length; k++)
    /* 通过覆盖子串T进行删除 */
                          S->ch[  (4)  ]=S->ch[k];
                        S->length=  (5)  ; /* 更新S的长度*/
              }
            else break;              /* 串S中不存在子串T */
      }
[15分]
解析:
(1) i-j+1 
(2) j==T.length 
(3)i-T.length 
(4) i++
(5) S->length-T.length
5、【 简答题
试题五(共15分)阅读以下说明和C++代码,将应填入(n)处字句写在答题纸对应栏内。
【说明】
        已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElement()、numberOfElement()以及removeLastElement()。四个方法的含义分别为:
        void addElement(Object):在列表尾部添加一个对象;
        Object lastElement():返回列表尾部对象;
        int numberOfElement():返回列表中对象个数;
        void removeLastElement():删除列表尾部的对象。
        现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。
【C++代码1】
class Stack :public LinkedList{
public:
    void push(Object o){addElement(o);};      //压栈
    Object peek(){return  (1) ;};             //获取栈顶元素
    bool isEmpty(){                              //判断栈是否为空
        return numberOfElement()==0;
    };
    Object pop() {                              //弹栈
        Object o=lastElement();
              (2) ;
          return o;
    };
};
【C++代码2】
class Stack{
private:
      (3) ;
public:
    void push(Object o){                      //压栈
        list.addElement(o);
    };
    Object peek(){                              //获取栈顶元素
        return list. (4) ;
    };
    bool isEmpty() {                          //判断栈是否为空
        return list.numberOfElement()==0;
    };
    Object pop(){                              //弹栈
        Object o=list.lastElement();
        list.removeLastElement();
        return o;
    };
};
【问题】
        若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?  (5)  (A.继承B.组合) [15分]
解析:
(1) lastElement() 
(2) removeLastElement() 
(3) LinkedList list
(4) lastElement() 
(5) A
6、【 简答题
试题六(共15分)阅读以下说明和Java代码,将应填入(n)处字句写在答题纸对应栏内。
【说明】
        已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElemen()、numberOfElement()以及removeLastElement()。四个方法的含义分别为:
      void addElement(Object):在列表尾部添加一个对象;
        Object lastElement():返回列表尾部对象;
        int numberOfElement():返回列表中对象个数;
        void removeLastElement():删除列表尾部的对象。
        现需要借助LinkedList来实现一个Stack栈类,Java代码1和Java代码2分别采用继承和组合的方式实现。
【Java代码1】
public class Stack extends LinkedList{
    public void push(Object o){                 //压栈
          addElement(o);
    }
    public Object peek(){                      //获取栈顶元素
          return  (1)  ;
    }
    public boolean isEmpty(){                      //判断栈是否为空
          return numberOfElement()=0;
    }
    public Object pop(){                          //弹栈
          Object o=lastElement();
              (2)  ;
            return o;
    }

【Java代码2】
public class Stack{
    private  (3)  ;
    public Stack(){
        list=new LinkedList();
    }
    public void push(Object o){
          list.addElement(o);
    }
    public Object peek{                          //获取栈顶元素
        return list.  (4)  ;
    }
    public boolean isEmpty(){                  //判断栈是否为空
        return list.numberOfElement()==0;
    }
    public Object pop(){                          //弹栈
        Object o=list. lastElement();
        list.removeLastElemento;
        return o;
    }

【问题】
若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?  (5)  (A.继承B.组合) [15分]
解析:
(1) lastElement() 
(2) removeLastElement() 
(3) LinkedListlist
(4) lastElement() 
(5) A
1
1页,共6个题库
1页,共6个题库
轻速云给您提供更好的在线考试系统服务!
推荐
推荐题库
众多企事业单位的信赖之选
36万+企事业单位的共同选择
查看更多合作案例
众多企事业单位的信赖之选
开始使用轻速云组织培训考试
四步组织一场考试答题,一键搭建企业培训平台
免费使用 免费使用 预约演示
咨询热线
400-886-8169
周一到周日 8:00-22:00
©2023 轻速云 苏ICP备16049646号-1 轻速云科技提供专业的在线考试系统、在线培训系统
联系我们
客服热线客服热线:400-886-8169 | 周一至周日 8:00-22:00
©2023 轻速云 苏ICP备16049646号-1
轻速云科技提供专业的在线考试系统、在线培训系统
在线咨询 400-886-8169