2005年上半年程序员下午试题
添加时间: 2007-4-8 5:40:14 作者: 程序员认证参考 阅读次数:24 来源: http://www.d9soft.com
试题一(15分,每空3分)
阅读以下说明和流程图,回答问题1至问题2将解答填入答题纸的对应栏内。
[说明]
设8位二进制代码 b0b1...b7中的最高位b0为奇偶校验位。对于任何给定的代码b1b2...b7,可按下式计算偶校验位:
b0= b1⊕b2⊕…⊕b7
其中," "表示"异或"运算。
下面的流程图描述了计算偶校验位的过程。
[流程图]

注:流程图,循环开始的说明按照"循环变量名:循环初值,循环终值,增量"格式描述。
[问题1]
将流程图中的(1)~(4)处补充完整。
[问题2]
若按下式计算奇校验位,则上述流程图中的(1)处应填(5) 。
b0= b1⊕b2⊕…⊕b7⊕1
试题二(15,每空3分)
阅读以下函数说明和c语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。
[函数2.1说明]
函数int funl (int m, int n)的功能是:计算并返回正整数m和n的最大公约数。
[函数2.1]
int funl (int m, int n)
{
while (___(1)___){
if(m﹥n) m=m-n;
else n= n-m;
}
___(2)___;
}
[函数2.2说明]
函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符形成一个十进制整数(最多8位)。
例如,若字符串str的值为"f3g8d5.ji2e3p12fkp",则函数返回值为3852312。
[函数2.2]
long fun2(char *str)
{ int i=0;
long k=0;
char *p=str ;
while (*p != '/0'&& (3) ) {
if(*p ?='0'&& *p ?='9'){
k=___(4)___+*p-'0';
++i;
}
___(5)___;
}
return k;
}
试题三(15分,每空3分)
阅读以下说明和c语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
一棵非空二叉树中"最左下"结点定义为:若树根的左子树为空,则树根为"最左下"结点;否则,从树根的左子树根了发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的"最左下"结点。例如,下图所示的以a为根的二叉树的"最左下"结点为d,以c为根的子二叉树中的"最左下"结点为c。

二叉树的结点类型定义如下:
typedef struct bstnode{
int data;
struct bstnode *lch ,*rch; //结点的左、右孩子指针
}*bstree;
函数bstree find_del (bstree root)的功能是:若root 指向一棵二叉树的根结点,则找出该结点的右子树上的"最左下"结点*p,并从树下删除以*p为根的子树,函树返回被删除子树的根结点指针;若该树根的右子树上不存在"最左下" 结点,则返回空指针。
[函数]
bstree find_del (bstree root)
{ bstree p,pre;
if (!root)return null; /*root指向的二叉树为空树*/
___(1)___; /*令p指向根结点的右子树*/
if (!p) return null; /*设置pre的初值*/
___(2)___; /*查到"最左下"结点 */
pre=p;p=___(3)___;
}
if (___(4)___ == root) /*root的右子树根为"最左下"结点*/
pre -> rch = null;
else
___(5)___ = null; /*删除以"最左下"结点为根的子树*/
return p;
}
试题四至试题五选答1道
试题四(15分,每空3分)
阅读以下说明和c语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
假设一个剧场有n*n个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[n] [n],模拟剧场中的座位,a[i] [j]等于0表示第i排第j列(0≤i,j≤n-1)的票尚未售出。
函数 int find(int a [][n],int r,int*row,int *col)的功能是:在部分票已售出的情况下,找出剧场中的r*r个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方左上角的行、列号;若未找到,返回0。
例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出的3×3正方形空座位如图(c)中斜线区所示。

[函数]
int find(int a[][n],int r ,int *row,int*col)
{ int i,j,k,c,t;int found=0;
for (i=0;!found && i <n-r+1;i++){ /*从第0排开始查找
___(1)___;
while(j<n-r+1 && !found) {
for(k=0;___(2)___ && a[i][j+k]==0;k+1; /*查找第i排连续的r个空座位*/
if(k>=r){ /*找到第i排连续的r个空座位*/
for(c=0;c<r;c++){ /查找其余的r*(r-1)个座位*/
for(t=1;t<r; t++)
if (a[___(3)___][j+c] != 0break;
if (t<r) break;
}/*for*/
if (___(4)___) found=1;
} /* if*/
___(5)___;
} /*while*/
} /*for i*/
if (found){
*row = i-1; *col = j-1; /*计算正方形区域的左上角坐标*/
return 1;
}
return 0;
}
试题五(15分,没空3分)
阅读以下说明及visual basic 程序代码,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
甲乙两地之间的铁路线上有二十多个火车站,为方便乘客查询票价,特开发了火车票价查询程序,其运行窗口如下图所示,乘客只要通过两个下拉列表框分别选择起点与终点站名,再单击"查询"按钮,则票价文本框中就会显示相应的票价。

在开发过程中,设选择起点和终点站名的组合框(combobox)名分别为st和sp,显示票价的文本框(textbox)名为price,"查询"按钮(commandbutton)名为query;设st与sp中的诸列表项完全相同,且都是从甲地开始依次排列,从第i站到第j站的票价存放在二维对称矩陈p的元素p(i,j)中,假设从甲地到第i站行驶的距离存放在d(i)中,火车票价等于其行驶距离乘以c(常数)。
[visual basic代码]
dim p(30,30) as single '通用声明
const c=0.2
private sub form load()
dim d(30) as single
___(1)___="甲地" '在st组合框中设置首个列表项
…… '在st和sp中设置其他列表项(若干行语句)
…… '对数组d(i)赋值(若干行语句)
for i=0 to st.___(2)___ -1 '对st中各列表项循环
for j=0 to sp.___(2)___ -1 '对sp中各列表项循环(这两处填写内容相同)
p(i,j)= ___(3)___
next j
next i
end sub
private sub query_click()
i= ___(4)___ '组合框st中选择的当前项编号
j=…… '组合框sp中选择的当前项编号 (语句略)
___(5)___ = str﹩(p(i,j))
end sub
试题六至试题八选答1道
试题六(15分,每空3分)
阅读以下说明、 java 代码和html文档,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
当用户启动html浏览器并首次打开下面的html文档时,java applet小程序在显示面板上显示字符串"welcome!";当html页面被其它窗口遮挡后再次显示时,小程序在显示面板上显示"welcome back!"。
[java代码]
import java.awt.*;
import java.applet.*;
public class helloapplet extends ___(1)___{
public void paint( ___(2)___){
g.drawstring(message,10,20);
message ="welcome back!";
}
public void ___(3)___(){
message="welcome!" ;
}
private ___(4)___ message;
}
[html文档]
<html>
<head>
<title>html test helloapplet page</title>
</head>
<body>
test helloapplet 小程序〈br>
<applet
codebase="."
code=" ___(5)___ "
name="testapplet"
width="400"
height="300"
>
</applet>
</body>
</html>
试题七(15分,每空3分)
阅读以下说明及visual basic 程序代码,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
某个文本件中存放了若干个非零数值有效数据,每个数据占一行,最后一行以数字"0"作为结束标志。下面的程序用于计算该文件中这些数据之和,其运行窗口如下:

用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名,再单击"累计"按钮,就能在"总计"文本框中看到该文本文件中的数据之和。
在开发过程中,设驱动器列表框名为drivel,目录列表框名为dirl,文件列表框名为filel,存放数据的文本文件名为d:/text/vb7/data.txt,"累计"按钮名为sum,"总计"文本框(textbox)名为textl。
[visual basic 代码]
private sub drivel_change()
dirl.path=___(1)___'用户选择的驱动器反映到目录列表框中
end sub
private sub dirl_change()
filel.path=___(2)___'用户选择的文件改变文件列表框内容
end sub
private sub sum_click()
dim ___(3)___ as new filesystemobject,___(4)___ as textstream
'创建自己的文件系统对象,说明自己的文本流对象
if right(dirl.path,1)=″/″ then
setmytextfile=fso.opentextfile(dirl.path+filel.filename)
else
setmytextfile=fso.opentextfile(dirl.path+″1″+filel.filename)
end if
s=0
do
d=val(mytexfile.readrow)
s= s+d
loop while ___(5)___
textl.text=str$(s)
end sub
试题八(15分,每空3分)
阅读以下说明和c++程序,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
下面程序的功能是计算并输出某年某月的天数。
[c++程序]
#include<iostream>
using namespace std;
___(1)___ month{jan,feb,may,jun,jun,jul,aug,sep,oct,nov,dec};
class date{
public;
date(int year, month m_month){
___(2)___ = year;
if(m_month<jan m_month>dec)month=jan;
else month=m_month;
};
~date(){};
bool isleap year(){
return ((year % 4 == 0 && year % 100 != 0year % 400==0);
};
int caculatedays(){
switch (___(3)___){
case feb: {
if (___(4)___)return29;
else return28;
}
case jan: case mar: case may: case jul: case aug: case oct:
case dec:return31:
case apr: case jun: case sep: case nov: return30;
}
};
private:
int year;
month month;
};
void main (){
date day (2000,fed);
cort << day.___(5)___();
上一篇文章: 04年上半年软件设计师(高级程序员)上午试题 下一篇文章: 04年上半年软件设计师(高级程序员)下午试题

