2004年上半年程序员下午试题

试题一是必答题

试题
  阅读下列说明、流程图和算法,将应填入__(n)__处的字句写在答题纸的对应栏内.
[
流程图说明]
(此括号内不是试题部分。欢迎访问软件考试网www.hbsoft.net)
  下面的流程图用N—S盒图形式描述了数组A中的元素被划分的过程.其划分方法是:
  以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动.当划分结束时,基准数定位于A[i],并且数组中下标小于i的元素的值均小于基准数,下标大子i的元素的值均大于基准数。设数组A的下界为low,上界为high,数组中的元素互不相同。例如,对数组(42836),以4为基准数的划分过程如下:
[
流程图]
(此括号内不是试题部分。欢迎访问软件考试网www.hbsoft.net)
  
[
算法说明]
  将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数int p(int A[]int lowint high)实现了上述流程图的划分过程并返回基准数在数组A中的下标。递归函数void sort(int A[]iht Lint H)的功能是实现数组A中元素的递增排序。
[
算法]
 void sort(int A[]iht lint H) {
 if ( L < H ) {
  k=p(ALR)     //p()返回基准数在数组A中的下标
  sort(__ (4)__     //小于基准数的元素排序
  sortl__ (5)__);    //大于基准数的元素排序
  }
 }

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


试题二(此括号内不是试题部分。欢迎访问软件考试网www.hbsoft.net)
  阅读下列函数说明和C函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[
函数2.1说明]
  函数palindrome(chars[])的功能是:判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:“LEVEL”是回文字符串,而“LEVAL”不是。
[
函数2.1]
 int palindrome(char S[])
 { char *pi*pj
  piSpjs+strlen(S)-1
  while ( pi<pj && __(1)__){
   pi++ pj--
  }
  if(__ (2)__)return-1
  else return 0
 }
[
函数2.2说明]
  函数f(char *strchar del)的功能是;将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。
  例如若str的值为33123333435”del的值为3’,调用此函数后,将输出三个子字符串,分别为12”4”5”
[
函数2.2]
 void f(char*strchar del)
 { int ijlen
  len = strlen(str)
  i = 0
  while (i<len){
   while (__(3)__) i++;    /*忽略连续的标志字符*/
  /*寻找从str[i]开始直到标志字符出现的个子字符串*/
   j = i + 1
  while (str[j] !=del && str[j] !='\0') j++
  __ (4)__"\0"         /*给找到的字符序列置字符串结束标志*/
  printf(" %s\t"&str[i])
  __ (5)__
  }
 }

试题三
  以下是与Visual Basic开发应用有关的5个问题.对每一个问题,请将解答填入答题纸的对应栏内。
  (1)Visual Basic中,工程文件、窗体文件和标准模块文件的扩展名是什么?
  请从下列选项中选择:
  prgprjexevbpromfrmwinfrastdbasvbsVbm

  (2)设某窗体上有一个命令按钮,其名称为 CmdSave,运行时该按钮上显示有保存(S)”字样的信息。为使热键 ALT+S 与该命令按钮相关联,应该对按钮 CmdSave Caption属性设置什么样的属性值?

  (3)设某窗口内有一个图像框 Image1,以及两个命令按钮放大缩小。单击放大按钮就会使该图像框的长和宽都放大10%;单击缩小按钮就会使该图像框的长和宽都缩小10%(该图像框的左上角不动)。请分别写出这两个命令按钮的单击事件过程中的程序代码。

  (4)为使某个单选按钮初始时默认被选中,在开发时应怎样做?

  (5)若有语句 Tmpval=MsgBox(非法操作!ybOKCancel+vbCritical"提示"),请简要描述程序运行时弹出的消息框的主要特征。

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

试题四
  阅读以下说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[
说明]
  函数 MultibaseOutput(long nint B)的功能是:将一个无符号十进制整数 n 转换成 B2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入,转换结束后再把 B 进制数从中输出。有关操作的诸函数功能见相应函数中的注释。C代码中的符号常量及的类型定义如下:
 #define KAXSIZE 32
 typedef struct{
  int *elem;  /* 的存储区 */
  int max;   /* 的容量,即找中最多能存放的元素个数 */
  int top;   /* 顶指针 */ 
 }Stack
[C
代码]
 int lnitStack(Stack *Sint n)  /* 创建容量为n的空 */
 { S->elem = (int *)matloc(n * sizeof(int))
  if (S->elem == NULL) return -1
  S->max = n__(1)__= 0return 0
 }
 int Push(Stack*Sint item)   /* 将整数item压入 */
 { if(S->top == S->max){ printf("Stack is full!\n")return -1}
  __(2)__itemreturn 0
 }
 int StackEmpty(Stack S){ return(!S.top) ? 10) /* 判断是否为空 */
 int Pop(Stack*S)        /* 顶元素出 */
 { if (!S->top){ printf("Pop an empty stack!\n")return -1)
  return __(3)__
 }
 void MultibaseOutput(long nint B)
 { int mStack S
  if (init Stack(&SMAXSIZE)) { printf("Failure!\n")return}
  do {
   if (Push(&s__(4)__)) { printf("Failure!\n")return}
   n = __(5)__
  } while (n != 0)
  while (!StackEmpty(S)) {     /* 输出B进制的数 */
   m = Pop(&S)
   if (m < 10) printf("Kd"m);  /* 小于10,输出数字 */
   else printf("%cm + 55);    /* 大于或等于10,输出相应的字符 */
  }
  printf("\n")
 }

试题五
  阅读以下应用说明及Visual Basic程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[
应用说明5.1]
  本应用程序的窗体中有一个下拉式列表框(名称为Combol)和两个文本框(名称分别为TxtlTxt2)。运行时,用户从Combol的列表中进行选择,程序就会将选中条目的内容以及编号(从0开始)分别在文本框 Txt1 Txt2 中显示出来。
[
程序代码5.1]
 Private Sub Combol_C1ick()
  Txtl.Text = Combol.__(1)__
  Txt2.Text = Combol.__(2)__
 End Sub
  (注:可供(2)处选择的选项:ListIndexListlndexListCountNumber
[
应用说明5.2]
  本应用程序的运行窗口如下图所示:

  当用户在输入框(名为Txtln)中输入数值数据,并从下拉式列表框(名为CmbOp)中选择所需的运算后,输出框(名为TxtOut)中就会显示运算的结果。用户单击清除按钮(名为CmdClear)后,输入框和输出框都清空。
开发该应用的部分程序代码如下:
[
程序代码5.2]
 Private Sub CmbOp_Click()
  Dim DataIn As DoubleDataOut as Double
  DataIn = __(3)__
  Select Case __(4)__
   Case "取整数部分"
    DataOut = Int(Dataln)
   Case "求平方根"
    If Dataln < O Then
     MsgBox$("负数不能开平方!")
    Else
     DataOut = Sqr(Dataln)
    End If
   Case "取绝对值"
    DataOut = Abs(Dataln)
    (TxtOut.Text = str$(DataOut)
    __5)__
 End Sub

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

试题六
  阅读下列函数说明和 C 函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[
函数6说明]
  函数DelAInsB(LinkedList LaLinkedList lbint key1int key2int len)的功能是,将线性表A中关键码为keyl的结点开始的len结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为:
 typedef struct node{
  int key
  struct node*next
 }*Linkedhist
[
函数6]
 int DelllnsB(LinkedLiSt LaLinkedList Lbint keylint key2int len)
 { LinkedList pqSpreppres
  int k
  if (!La->next || !Lb->next || len<=0) return-1
  p = La->next prep = La
  while (p && p->key != keyl){   /* 查找表A中键值为key1的结点 */
   prep = p p = p->next
  }
  if (!p) return -1;        /* A中不存在键值为key1的结点 */
  q = p k = 1
  while (q && __(1)__){       /* 在表A中找出待删除的len个结点 */
   __(2)__ k++
  }
  if (!q) return -1;        /* A中不存在要被删除的len个结点 */ ·
  S = Lb->next__ (3)__
  while (s && s->key != key2){   /* 查找表B中键值为key2的结点 */
  pres = s s = s->next
  }
  if (!s)return -1;        /* B中不存在键值为key2的结点 */
  __(4)__q->next;         /* 将表A中的len个结点删除 */
  q->next__(5)__
  pres->next = p;         /* len个结点移至表B */
  return 0
 }
(此括号内不是试题部分。欢迎访问软件考试网www.hbsoft.net)


试题七
  阅读以下应用说明、属性设置及VisualBasic程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[
应用说明7]
  本应用程序的运行窗口如下图所示:

  只要用户单击闪烁按钮,文字欢迎光临就会以0.3秒消失、0.3秒显示反复进行闪烁;单击停止按钮时,闪烁停止,恢复图示的初态。
  在开发过程中,需要设置的属性如下:
[
属性设置7]

对象

对象名

属性名

属性值

窗体

Frm1

Caption

闪烁显示演示

标签

Labe1

Caption

欢迎光临

命令按钮

CmdF

Caption

闪烁

命令按钮

CmdT

Caption

停止

定时器

Timer1

Enabled

__(1)__

 

 

Interval

__(2)__

  在开发过程中,需要编写的程序代码如下;
[
程序代码7]
(此括号内不是试题部分。欢迎访问软件考试网www.hbsoft.net)
 Private Sub CmdF Click()
  Timerl.__(3)__ = True
  Label.Visible = False
 End Sub
 Private Sub Timerl_ Timer()
  __(4)__ = not Label.Visible
 End Sub
 Private Sub CmdT Click()
  Timerl.Enabled = __(5)__
 
  Label.Visible = true
 End Sub

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

试题八
  阅读下列程序说明和C程序,将应填入__(n)__处的字句写在答题纸的对应栏内。
[
程序8说明]
  程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额。职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。
  假设个人所得税法规定;个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额,适用税率如下表所示。

级数

月应纳税所得额

适用税率()

1
2
3
4
5
6
7
8
9

 不超过500元的部分
 501元~2000元的部分
 2001元~5000元的部分
 5001元~20000元的部分
 20001元~40000元的部分
 40001元~60000元的部分
 60001元~80000元的部分
 80001元~100000元的部分
 超过100000元的部分

5
10
15
20
25
30
35
40
45

  上表表明,个人收入所得税是按照超额累进的税率来征收的。
  设一个人的月应纳税所得额为K(),用下面的公式计算其应缴纳的个人所得税额S():
  若0<K≤500,则S=K×5%;
  若500<K≤2000,则S=500×5+(K—500)×10%:
  若2000<K≤5000,则S=500×5+1500×10+(K-2000)×15%:
  若5000<K≤20000,则S=500×5+1500×10+3000×15+(K-5000)×20%:
  例如,某人某月工资总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5+1500*10+1300*15=370元。
[
程序8]
 #include <stdio.h>
 #define MaxNum 50
 #define BASE 800     /*免税金额基数*/
 int paylevel[]={05002000500020000400006000080000100000100000¨
 int taxPrate[]={51015202530354045) /*税率表*/
 typedef struct{
  int ld;    /*职工的工号*/
  long Salary;  /*职工的工资*/
 }Info
 /* 查找工号为Id的职工在数组employee中的下标,返回值为0表示没有 */
 int find(int ldInfo employee[]int m){
  int j
  employee[0].Id=Id
  for(jm__(1)__j--)
   return j
 }
 void main(void)
 { Info employeeCHaxNum+1]
  long Wage
  double sum s 0KS
  int ijN0Code
  scanf("Mld"&Code&Wage);   /*读入职工号、工资或薪金*/
  while(Code>0) {
   ifind(CodeemployeeN)
   if (i>0)employee[i].Salary += Wage
   else{ __ (2)__
   employee[N].IdCodeemployee[N].SalaryWage
   }
   scanf("dld"&Code&Wage)
  }
  for (i1i<Ni++){
   K = __(3)__         /*计算月应纳税所得额*/
   S0             /*月应纳税额赋初值*/
   if (K > 0) {
    for (j1j<9j++)
     if(__(4)__)        /*月应纳税所得额超过第j*/
      SS+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100
     else{ SS+(__ (5)__)*taxPrate[j-1]/100break}
   }
   printf("职工%d应缴纳的个人所得税额:%10.21f\n"employee[i].IdS)
   sum += S
  }
  printf("全体职工个人所得税总额:%1021f\n"sum)
 }

试题九
  阅读以下应用说明及VisualBasic程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内.
[
应用说明9]
(此括号内不是试题部分。欢迎访问软件考试网www.hbsoft.net)
  本应用程序的运行窗口如下图所示:

  窗口中的三个文本框和两个按钮名称分别为Txt_salaryTxt_baseht_taxCmd computeCmd_quit.运行时,文本框Txt_base中存放的是免税金额基数(应扣除的基本费用)。当用户在文本框ht_salary中输入月收入(工资或薪金)并单击计算按钮Crud_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_baseTxt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。
  个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算.目前的免税金额基数为800元,税率如下表所示:
  个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算.目前的免税金额基数为800元,税率如下表所示:

级数

月应纳税所得额

适用税率()

1
2
3
4
5
6
7
8
9

  不超过500元的部分
  501元~2000元的部分
  2001元~5000元的部分
  5001元~20000元的部分
  20001元~40000元的部分
  40001元~60000元的部分
  60001元~80000元的部分
  80001元~100000元的部分
  超过100000元的部分

5
10
15
20
25
30
35
40
45

  设一个人的月应纳税所得额为K(),用下面的公式计算其应缴纳的个人所得税额S()
  若0<K≤500,则S=K×5%;
  若500<K≤2000,则S=500×5+(K—500)×10%:
  若2000<K≤5000,则S=500×5+1500×10+(K-2000)×15%:
  若5000<K≤20000,则S=500×5+1500×10+3000×15+(K-5000)×20%:
  例如,某人某月工资总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5+1500*10+1300*15=370元。
  在开发过程中,需要编写的程序代码如下:
[
程序代码]
 Option Base 0
 Private Sub Cmd compute-C1ick()
  Dim payleveltaxPrate
  paylevelArray(050020005000200004000060000800001000001000001)
  taxPrateArray(51015202530354045)
  K__(1)__
  S 0
  If (K>0) Then
   For j1 To 9
    If __(2)__ Then
     SS+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100
    Else
     SS+(__(3)__)*taxPrate(j-1)/100
     Exit For
    End lf
   Next j
  End lf
  __(4)__Str$(S)
 End Sub

 Private Sub Cmd_quit_C1ick()
 End
 End
Sub

 Private Sub Form_Load()
  Txt_tax.Text = " "
  Txt_salary.Text = " "
  Txt_base.Text = 800
  Txt_tax.Locked = True
  Txt_base.Enabled =__(5)__
 End Sub

©2005Copyright By hbsoft.net,All rights Reserved |联系我们 鄂ICP备05009730号