视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
2005年下半年计算机软考程序员下午真题及答案(word)+
2025-09-30 22:55:07 责编:小OO
文档
05下半年软考程序员下午试题及答案

试题一(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] 

[流程图1-2] 

[流程图1-3]  

[流程图1-4]  

[问题]

  在流程图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; 

  }

 

[NextPage]

 

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

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

[说明]

  某种传感器的输出值Ratio 依赖于环境温度temp(-40℃≦temp≦50℃)。对一组环境温度值(ITEMS 个),人们已经测量得到了相应的Ratio 值(见表1)。该表粗略地描述了曲线Ration(temp) 。 

  校正系数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)_____));

  }  

 

[NextPage]

 

  试题四至试题五选答1道

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

  阅读以下应用说明以及用Visual Basic 开发过程中进行的属性设置和所编写的程序代码,将应填入_____(n)_____处的字句写在答题纸的对应栏内。

[应用说明] 

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

  其中的标签(Label1)"用户名(U)"对应文本框 Username ,标签(Label2)"密码(P)"对应文本框"Password" 。当用户在Username 文本框中输入用户名"ali88" ,在Password文本框中输入"zmkm"( 显示的字符均为"*") ,并单击"确定"按钮时,就会弹出应用程序的主窗口frmAPP ,而该登录窗口就会卸载。

  如果用户名或密码输入错误,则会弹出报警信息框。当用户单击其中的"确定" 按钮后,登录窗口"Password" 文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码,必要时用户还可以再修改用户名,再次做登录尝试。本应用程序允许发生3次输入错误。在第3次输入错误后,就会立即退出该应用程序。

  在弹出登录窗口后,当按键"Alt+U" 时光标就会停留在Usename 文本框中;当按键"Alt+P" 时光标就会停留在Password文本框中。当用户按"Enter" 键时,就相当于单击"确定"按钮;当用户按"Esc"键时,就相当于单击"取消"按钮,立即退出该应用程序。

[属性设置] 

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

[程序代码]

  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;

  } 

 

[NextPage]

 

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

  试题六(共15分)

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

[说明] 

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

[C++ 代码]  

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

  1:3.5

  _____(2)_____

  _____(3)_____  

  试题七(15分)

   阅读以下应用说明以及用Visual Basic 编写的程序代码,将应填入_____(n)_____ 处的字句写在答题纸的对应栏内。

[应用说明] 

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

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

  在开发该喁喁时,首先建立一个圆形Shape 控件作为钟面(背景为白色)。设圆心为象素坐标(X0,Y0),半径为940。再在圆心处建立一个小的实心圆Shape控件作为轴心。钟面上的刻度3,6,9,12为四个标签。时针、分针、秒针(红色)为线型控件,名称分别为LineH 、LineM、LineS ,线宽属性值分别为:3,2,1,线长属性值分别为500,700,900。这三个线型控件的起点坐标都固定在(X0,Y0)其终点坐标随转角θ而动态变化: 

   设置定时器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 代码] 

 

[NextPage]

 

  参

  试题一

(1) i <= n

(2) ch (j) = KB

(3) k <= j

(4) ch(k-i+1)

(5) n

  试题二

(1) n-i-1

(2) Count + 2

(3) a[i] < Minnum

(4) a[n-i-1] >Maxnum

(5) a[n-i-1]

  试题三

(1) (low + high) / 2

(2) 1.0 / (p+m)->Ratio

(3) m + 1

(4) (p+1)->Ratio - p->Ratio

(5) Temp - p->Temp

  试题四

(1) 密码(&p)

(2) true

(3) Static times

(4) Username.Text = ″ali88″ and Password.Text = ″zmkm″

(5) frmApp.Show

  试题五

(1) *s = str

(2) p = root

(3) p = = NULL

(4) parent->Rch

(5) parent->Lch

  试题六

(1) shares (n)

04代码行修改结果:public:

06代码行修改结果:Stock (int n,double pr=3.5):shares (n){

10代码行修改结果:~Stock () {}

输出结果

(2) 0∶0

(3) 0∶0

  试题七

(1) 500

(2) S/30

(3) S = 0 or first

(4) H/6 + M/360

(5) False

  试题八

01代码行修改结果:class Stock{

02代码行修改结果:{

06代码行修改结果:public Stock (){getData();}

07代码行修改结果:public Stock (int n,double pr){

程序运行的输出结果为:

0∶0.0 1∶67.5下载本文

显示全文
专题