java编程题花园修路,2005年下半年程序员下午试题及答案

2005年下半年程序员下午试题

试题一至试题三是必答题

试题一(15分,每空3分)

阅读下列说明和流程图,将应填入___(n)___处的字句写在答题纸的对应栏内。

[流程图说明]

流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符的空白。例如,原字符串"

File Name ",处理变成"File Name" 。流程图1-2、流程图1-3

、流程图1-4分别详细描述了流程图1-1中的框A、B、C。

假设原字符串中的各个字符依次存放在字符数组ch 的各元素ch(1)

、ch(2) 、?、ch(n) 中,字符常量KB表示空白字符。

流程图1-1的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j)

,然后将ch(i) 、?、ch(j) 依次送入ch(1)

、ch(2)、?中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在流程图中,strlen

是取字符串长度函数。

[流程图1-1]

a4c26d1e5885305701be709a3d33442f.png

[流程图1-2]

a4c26d1e5885305701be709a3d33442f.png

[流程图1-3]

a4c26d1e5885305701be709a3d33442f.png

[流程图1-4]

a4c26d1e5885305701be709a3d33442f.png

[问题]  在流程图1-1中,判断框P中的条件可表示为:i

> ___(5)___

试题二(15,每空3分)

阅读以下函数说明和C语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。

[说明]

函数int find_Max_Min(int a[ ],int n)

的功能是:找出n个元素的数组a中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。查找方法如下:比较a[0]

和a[n-1], 若a[0] 大,则交换a[0] 和a[n-1] 的值;再比较a[1] 和a[n-2]

,若a[1] 大,则交换a[1] 和a[n-2]

的值;依此类推,直到所有的元素都比较完。然后在数组的前半区从前往后找出小元素,在后半区从后往前找出大元素。

[函数]  int find_Max_Min(int a[ ],int n) {

/*

找出n个元素的数组a中的最大元素、最小元素并输出,返回查找过程中元素的比较次数*/ int i,Count = 0;

int temp,Maxnum,Minnum;

for(i = 0; i < n/2; i++){ Count = Count + 1;      /*元素比较次数计数*/

if(a[i]>a[_____(1)_____ ]

{ /* 数组元素交换代码略*/ }

}

Maxnum=a[n-1];

Minnum=a[0];

for(i = 1; i < n/2+ n%2; i++){ Count = _____(2)_____ ;             /*

元素比较次数计数*/

Minnum = _____(3)_____ ?

a[i]:Minnum;      /*找出最小元素*/

Maxnum = _____(4)_____ ? _______(5)_____:Maxnum; /*

找出最大元素*/ } printf("Max=%d\n,Maxnum"); printf("Min=%d\n",Minnum);

return Count; }

试题三(15分,每空3分)

阅读以下说明和C语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。

[说明]

某种传感器的输出值Ratio

依赖于环境温度temp(-40℃≦temp≦50℃)。对一组环境温度值(ITEMS

个),人们已经测量得到了相应的Ratio

值(见表1)。该表粗略地描述了曲线Ration(temp) 。

表1曲线Ration(temp)

的列表值

环境温度temp

传感器的输出值Ratio

-40℃

0.20

-20℃

0.60

-10℃

0.80

0℃

1.00

10℃

1.17

30℃

1.50

50℃

1.80

表2曲线K(temp)的列表值

环境温度temp

校正系数K

-40℃

5.00

-39℃

4.55

-38℃

4.17

-37℃

3.85

-20℃

1.67

-19℃

1.61

-10℃

1.25

-9℃

1.22

50℃

0.56

校正系数K是Ratio

的倒数,因此也依赖于环境温度temp

。在数据处理中,人们需要用更多的列表值细致地描述曲线K(temp

),如表2所示。在表2中,各温度值所对应的K值是对表1进行线性插值再求倒数得到的,具体的计算方法如下:

1. 根据temp 值,在表1中用二分法查找;

2. 若找到相应的温度值,则按相应的Ratio 值求倒数得到K值;

3. 若没找到相应的温度值,则可确定temp 所在的温度区间[Tp1,Tp2]

,同时获得了相应的Ratio1 和Ratio2 ,再按如下公式计算K值:

Step = (Ratio1 - Ratio2)/(Tp1 - Tp2) K = 1.0/(Ratio1 + Step * (temp - Tp1))

在程序中,当temp 高于50℃或低于-40℃时,设定K=0。

[程序]

#include typedef

struct{ int Temp;   /*环境温度*/

double Ratio; /*传感器的输出值*/

}CURVE; #define ITEMS 7

double GetK(int,CURVE *,int); void main() { int Degree;

double k;

CURVE Curve[ITEMS] =

{{-40,0.2},{-20,0.60},{-10,0.8},{0,1.0}, {10,1.17},{30,1.50},{50,1.8}};

printf(" 环境温度校正系数\n"); for(Degree = -40;Degree <= 50; Degree++){

k = GetK(Degree,Curve,ITEMS); printf("%3d %4.2f\n",Degree,k); } } double GetK(int Temp,CURVE *p,int n) {  /* 用二分法在n个元素的有序表p中查找与Temp

对应的传感器输出值*/

int low,high,m;

double Step;

low = 0;

high = n-1;

if ((Temp < p->Temp)||(Temp >

(p+high)->Temp)) return 0.0;  /*

超出温度范围时返回0.0*/ while (low <= high){

m =_____(1)_____;

if (Temp == (p+m)->Temp) return _____(2)_____ ;

if (Temp < (p+m)->Temp) high = m-1;

else low = _____(3)_____ ; }

p += high; Step = (_____(4)_____)/((p+1)->Temp -

p->Temp);

return 1.0/(p->Ratio + Step *

(_____(5)_____)); }

试题四至试题五选答1道

试题四(15分,每空3分)

阅读以下应用说明以及用Visual Basic

开发过程中进行的属性设置和所编写的程序代码,将应填入_____(n)_____处的字句写在答题纸的对应栏内。

[应用说明]

启动某应用程序运行的登录窗口如下:

a4c26d1e5885305701be709a3d33442f.png

其中的标签(Label1)"用户名(U)"对应文本框 Username

,标签(Label2)"密码(P)"对应文本框"Password" 。当用户在Username

文本框中输入用户名"ali88" ,在Password文本框中输入"zmkm"(

显示的字符均为"*")

,并单击"确定"按钮时,就会弹出应用程序的主窗口frmAPP

,而该登录窗口就会卸载。

如果用户名或密码输入错误,则会弹出报警信息框。当用户单击其中的"确定"

按钮后,登录窗口"Password"

文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码,必要时用户还可以再修改用户名,再次做登录尝试。本应用程序允许发生3次输入错误。在第3次输入错误后,就会立即退出该应用程序。

在弹出登录窗口后,当按键"Alt+U" 时光标就会停留在Usename

文本框中;当按键"Alt+P"

时光标就会停留在Password文本框中。当用户按"Enter"

键时,就相当于单击"确定"按钮;当用户按"Esc"键时,就相当于单击"取消"按钮,立即退出该应用程序。

[属性设置] 在开发过程中,部分控件及属性设置如下:

对象

对象名

属性

属性值

标签

Label2

Caption

____(1)____

文本框

Username

Text

(空白)

文本框

Password

Text

(空白)

Password

*

命令按钮

CmdOK

Caption

确定

Default

____(2)___

命令按钮

CmdCancel

Caption

取消

Cancel

True

[程序代码]

Private Sub cmdOK_Click()

_____(3)_____ As Integer   '静态变量time 的说明

If ___(4)___ Then

Unload Me       '卸载本登录窗口

____(5)_____     '弹出应用程序主窗口frmAPP Else

MsgBox(" 用户名密码错!")

Times = times+1

Password.Text = ""  '清除密码框中的内容

Password.SetFocus   '将光标定位于密码框

If times = 3 Then

End End If End Sub Private Sub

cmdCancel_Click() End End Sub 试题五(共15分)

阅读以下说明和C语言函数,将应填入__(n)__

处的字句写在答题纸的对应栏内。

[说明] 二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:若它的左子树非空,则左子树上所有结点的值小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身就是两棵二叉排序树。

函数insert_BST(char *dtr) 的功能是:对给定的字符序列按照ASCII

码值大小关系创建二叉排序树,并返回指向树根结点的指针。序列中重复出现的字符只建一个结点,并由结点中的Count域对字符的重复次数进行计数。

二叉排序树的链表结点类型定义如下:

typedef struct BSTNode{

char Elem;    /* 结点的字符数据*/

int

Count;    /*记录当前字符在序列中重复出现的次数*/

struct BSTNode *Lch,*Rch;  /*

结点的左、右指针*/ } *BiTree; [函数]

BiTree insert_BST(char * str) {

BiTree root,parent,p; char _______(1)________;  /*变量定义及初始化*/

root = (BiTree)malloc(sizeof(struct BSTNode));

if (!root || *s=='\0') return NULL;

root->Lch = root->Rch = NULL;

root->Count = 1;

root->Elem = *s++;

for(;*s != '\0';s++){ ______(2)______;

parent = NULL;

while (p) {

/*p从树根结点出发查找当前字符*s所在结点*/

parent = p;

if (*s ==

p->Elem)  /*若树中已存在当前字符结点,则当前的字符计数值加1*/

{ p->Count++; break;}

else   /*否则根据字符*s与结点*p中字符的关系,进入*p的左子树或右子树*/

if (*s > p->Elem) p = p->Rch;

else p = p->Lch;

} /*while*/ if (______(3)_____) {

/*若树中不存在字符值为*s的结点,则申请结点并插入树中*/

p = (BiTree)malloc(sizeof(struct BSTNode));

if (!p) return NULL;

p->Lch = p->Rch = NULL;

p->Count = 1;

p->Elem = *s;

/*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树插入*/

if (p->Elem > parent->Elem) ______(4)_____ =

p;

else _________(5)________ = p;

}

}  /*for*/

return root;

}

从下列的3道试题(试题六至试题八)中任选1道解答。如果解答的试题数超过1

道,则题号小的1道解答有效。

试题六(共15分)

阅读以下说明和C++代码,将解答写入答题纸的对应栏内。

[说明]

类Stock的定义中有三处错误,分别在代码的第04、06、10行。请补齐下述代码中的空缺1,修改错误并给处修改后该行的完整代码,最后完善程序运行后的输出结果。

[C++ 代码]

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include

 using namespace std; class Stock{ protected: Stock(){shares=0; share_val=0.0;

Output();} Stock(int n=0, double pr=3.5):_____(1)______{// 初始化shares

值为n share_val=pr; Output(); };

void ~Stock(){}; void Output(){cout << shares <

share_val << endl;} public: //成员函数

private:

// 成员变量

int shares; double share_val; };

void main(){ //构造三个Stock 对象a,b,c

Stock a(1);

Stock b;

Stock c = Stock();

//其他代码省略,且代码无输出

}

程序运行后的输出结果为:

1:3.5

_____(2)_____

_____(3)_____

试题七(15分)

阅读以下应用说明以及用Visual Basic

编写的程序代码,将应填入_____(n)_____

处的字句写在答题纸的对应栏内。

[应用说明]本应用程序的运行窗口中将显示一个简单的模拟时钟如下:

a4c26d1e5885305701be709a3d33442f.png

该圆形钟面上有时针、分针和秒针在运动,不断显示系统的当前时间。

在开发该喁喁时,首先建立一个圆形Shape

控件作为钟面(背景为白色)。设圆心为象素坐标(X0,Y0),半径为940。再在圆心处建立一个小的实心圆Shape控件作为轴心。钟面上的刻度3,6,9,12为四个标签。时针、分针、秒针(红色)为线型控件,名称分别为LineH

、LineM、LineS

,线宽属性值分别为:3,2,1,线长属性值分别为500,700,900。这三个线型控件的起点坐标都固定在(X0,Y0)其终点坐标随转角θ而动态变化:

a4c26d1e5885305701be709a3d33442f.png

设置定时器Timer1

使该时钟能反映系统的当前时间,其定时间隔为0.5秒,该定时器的Interval

属性值应设置为_____(1)_____

。每隔0.5秒,秒针需要调整位置,但分针和时针只是在初始显示时以及在每次秒计数为0时才需要调整位置(可节省计算量)。

[程序代码]  Const Pi =

3.1416 Const X0 = 1750

Const Y0 = 1150

Const LH = 500, LM = 700, LS = 900 Public first As

Boolean Private Sub Form_Load()

LineS.X1 = X0  '秒针的起点位置

LineS.Y1 = Y0

LineM.X1 = X0  '分针的起点位置

LineM.Y1 = Y0

LineH.X1 = X0  '时针的起点位置

LineH.Y1 = Y0

first = True End Sub Private Sub Timer1_Timer()

S = Second(Time)

S_seta = Pi *

______(2)______  '秒针的转角

LineS.X2 = X0 + LS * Sin(S_seta)   '秒针的终点位置

LineS.Y2 = Y0 -LS * Cos(S_seta)

If (____(3)_____) Then M = Minute(Time)

LineM.X2 = X0 + LM * Sin(Pi*M/30)  '分针的终点位置

LineM.Y2 = Y0 - LM * Cos(Pi*M/30)

H = Hour(Time)

If (H >= 12) Then H = H -12

H_seta = Pi * (______(4)______)  '时针的转角

LineH.X2 = X0 + LH * Sin(H_seta) '时针的终点位置

LineH.Y2 = Y0 - Lh * Cos(H_seta)

first = ________(5)________

End If

End Sub

试题八(共15分)

阅读以下说明和Java代码,将解答写入答题纸的对应栏内。

[说明]

已知类Stock和类JavaMain 都定义在JavaMain.java 文件中,类Stock

的定义中有四处错误,分别在代码的第01、02、06、07行。请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。

[Java 代码]

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public class

Stock{ static { shares = 0;

share_val = 0.0;

}

private Stock(){getData();}

private Stock(int n, double pr=0){ shares = n;

share_val = pr;

getData();

}

pbulic void getData(){ System.out.print(shares + ":" + share_val + " ");

}

private int shares;    // 非静态变量

private double share_val; // 非静态变量

}; public class JavaMain{ public static void main(String args[]){

Stock a = new Stock();

Stock b = new Stock(1,67.5);

// 其他代码省略,且代码无输出

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值