2009年下半年程序员考试下午真题

程序员 责任编辑:YLM 2017-08-16

添加老师微信

备考咨询

加我微信

摘要:以下是由希赛网整理的2009年下半年程序员考试下午真题,希望对备考程序员考试的考生有所帮助。

2009年下半年程序员考试下午真题:

>>>点击进入软考初级程序员历年真题下载

● __(1)__(共15分)
阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】
求连续函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法。为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与f(b)符号相反(a 取该区间的中点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)的根的过程。

【流程图】

1.png

● __(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--;

}

}

}

● __(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()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。

● __(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 */

● __(5)__ (共15分)
阅读以下说明和C++代码,将应填入(n) 处的字句写在答题纸的对应栏内。
【说明】
已知类LinkedList表示列表类,该类具有四个方法:addElement__(6)__、lastElement__(7)__、numberOfElement__(8)__以及removeLastElement__(9)__。四个方法的含义分别为:
void addElement(Object):在列表尾部添加一个对象;
Object lastElement__(10)__:返回列表尾部对象;
int numberOfElement__(11)__:返回列表中对象个数;
void removeLastElement__(12)__:删除列表尾部的对象。
现需要借助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) (

(5)A.继承B.组合)

● __(6)__ (共15分)
阅读以下说明和Java代码,将应填入(n) 处的字句写在答题纸的对应栏内。
【说明】
已知类LinkedList表示列表类,该类具有四个方法:addElement__(7)__、lastElemen__(8)__、numberOfElement__(9)__以及removeLastElement__(10)__。四个方法的含义分别为:
void addElement(Object):在列表尾部添加一个对象;
Object lastElement__(11)__:返回列表尾部对象;
int numberOfElement__(12)__:返回列表中对象个数;
void removeLastElement__(13)__:删除列表尾部的对象。
现需要借助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) (

(6)A.继承B.组合)

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取