2003年度初级程序员级下午试卷

试题一

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

流程图1描述了自然数1到N(N≥1)之和的计算步骤。
[流程图1]

·完善流程图1。(a)处应是__(l)__;(b)处应是__(2)__。

·为了使流程图1能计算1’+2’+…+N2,应将c框改成__(3)__。

·如果输入的N是奇数,为了使流程图1能计算

1+3+5+…+(2k-1)+·…+N (1≤k≤(N+1)/2)
应将d框改成__(4)__。

·如果流程图1中c框的内容改为“S+I*(I+1)→S”,则流程图1实现__(5)__计算。

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

试题二

阅读下列函数说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[函数2.1说明]

函数voidprintd(int n)的功能是将整数n转换为字符串并输出。转换的方法是从低位到高位依次取得整数n的各位数值,将其转换成数字字符后存入字符数组s中,然后输出。
[函数2.1]

void printd(int n)

{ char s[lO]; int i;

if (n < O) {

putchar('-'); n = -n;

}

i=9;

s[i] = '\0';

do s[--i] = __(l)__ + '0';

while((n /= 10) > 0);

printf('%s\n', __(2)__);

}
[函数2.2说明]

函数void revstr(char*s)将字符串s逆置。例如字符串“abcde”,经过逆置后变为“edcba”。
[函数2.2]

void revstr(char *s)

{ char *p, c'

if(s == NULL) return;

p = __(3)__; /* p指向字符串s的最后一个有效字符 */

while ( s < p ) {

/* 交换并移动指针 */

C = *S;

__(4)__ = *p;

__(5)__ = c;

}

}

试题三

以下是用 VisualBasic 开发应用有关的 5 个问题。对每一个问题,请将解答填入答题纸的对应栏内。

(1)复选框(CheckBox)的状态有哪些?

(2)若命令按钮cmdOK初始时是灰色的,表示用户当前不能使用。在应用程序运行时,为使该命令按钮变成可用的,应使用什么语句?

(3)若主窗口内有一个按钮“自定义…”,单击该按钮就会弹出一个自定义对话框(另一窗体frmD),用户必须在其中做出响应,程序才能继续运行。请写出该命令按钮的单击事件过程中的程序代码。

(4)设一个名称为fraInput的框架(Frame)控件包含了两个文本框(名称分别为txt1和txt2),请写出使fralnput的两个子控件txt1和txt2不可见的程序代码。

(5)已知某窗体中有两个文本框(名称分别为txt1和txt2),现要求在txt1中输入完毕后按回车键就能使焦点(当前光标)跳到txt2,而不用Tab键进行切换。请补充下面txt1的KeyDown(按键)事件过程中程序代码的空缺。

If KeyCode = 13 Then

txt2.________

End If

 

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

试题四

阅读下列函数说明和 C 代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[函数4.1说明]

函数int factors(int n)的功能是判断整数n(n≥2)是否为完全数。如果n是完全数,则函数返回0,否则返回-1。

所谓“完全数”是指整数n的所有因子(不包括n)之和等于n自身。例如28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28是“完全数”。
[函数4.1]

int faetors(int n)

{ int i, s;

for (i = l, s = O; i (= n/2' i++)

if (n % i == O)__(1)__;

if (__(2)__) return O;

return -1;

}
[函数4.2说明]

函数int maxint(int a1],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。
[函数4.2]

int maxint(int a[], int k)

{

int t;

if(__(3)__) return__(4)__;

t = maxint(a+l, __(5)__)'

return (a[0] > t) ? a[0] : t;

}

试题五

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

在窗体中建立一个文本框Txtl、框架Fral、复选框Chkl及两个命令按钮Cmdok和Cmdcancel。Fral中的两个单选按钮的名称分别为Optsong和Opthei,相关的属性设置如下表所示:

对象

对象名

属性名

属性值

窗体

Frm1

Caption

框架应用示例

框架

Fral

Caption

字体

单选按钮

0ptsong

Caption

宋体

单选按钮

0pthei

Caption

黑体

复选框

Chk1

Caption

斜体

命令按钮

Cmdok

Caption

确定

命令按钮

Cmdcancel

Caption

取消

文本框

Txt1

Text

字体字形

应用程序的运行窗口如下图所示:

用户在选择“宋体”或“黑体”以及设置或取消“斜体”字形后,单击“确定”按钮,文本框中的文字就会按所选字体和字形显示。

若运行时使文本框不接收用户的输入,则需要设置Txtl的__(1)__属性值为False;若按下Esc键时就能执行命令按钮Cmdcancel的单击事件过程,则应设置Cmdcancel的Cancel属性值为__(2)__。
[程序代码]

Private Sub Cmdol__(3)__()

If __(4)__=True Then

Txtl.FontName="宋体"

Else

Txtl.FontName="黑体"

End lf

lf __(5)__ Then

Txtl.Fontltalic=True

Else

Txtl.Fontltalic=False

End lf

End Sub

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

试题六

阅读下列说明和 C 代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[程序6说明]

本程序从正文文件test.txt中读入一批整数,并将它们按照递增的顺序存放在一个链表中。

其中,函数insertChain(struct Link*head,struct Link*k)用来寻找结点k在链表head中的插入位置,并插入该结点。
[程序6]

#include <stdio.h>

#include <stdlib.h>

struct Link {

int number;

struct Link *next;

};

struct Link * insertChain(struct Link *head, struct Link *k);

void main()

{ struct Link *ptr, *head;

FILE *fd;

int hum;

if((fd = fopen("test.txt"', "r")) == NULL) { /*打开一个文件 */

printf('Cannot open this file!\n"); return ;}

head = NULL;

while(fscanf(fd, "%d", &hum) == 1) {

ptr = __(1)__;

if (!ptr) return;

ptr->number = hum;

ptr->next = NULL;

head = insertChain(head, ptr);

}

__(2)__;

return ;

}

struet Link * insertChain(struet Link *head, struct Link *k)

{ struct Link *ptr, *u;

ptr = head;

while (ptr ~d~ k->number > ptr->number)

{ u =ptr; __(3)__; }

if(ptr == head) head = k;

else __(4)__

__(5)__;

return head;

}

试题七

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

设某应用程序运行时窗口中有两个文本框(txtNumber和txtChinese)和一个命令按钮(cmdChange)。当单击cmdChange时,txtChinese中将显示txtNumber中数值的中文大写格式。例如,若在txtNumber中输入“012340”,单击命令按钮后,txtChinese中将显示“壹万贰仟叁佰肆拾”,如下图所示。

程序中调用的函数CChinese(Strdigit As String)的功能是先删除数字串Strdigit的所有前导0,再调用函数Transfer(Strdigit As String),将数字串Strdigit转换为中文大写格式。

文本框txtNumber响应按键事件的过程是以空字符代替所输入的非数字有形字符。
[程序代码]

Private Sub cmdChange_Click()

txtChinese. Text= CChinese(__(1)__)   '调用CChinese函数

End Sub

Private Function CChinese(Strdigit As String) As String

intLen = Len(Strdigit)

If Strdigit () "' Then

intCounter = 0

Do    '过滤数字串Strdigit的前导0

intCounter = intCounter + 1

Loop Until Mid(Strdigit,__(2))__ <> "0"

intLen = __(3)__

Strdigit =__(4)__(Strdigit, intLen)

CChinese = Transfer(Strdigit)

Endif

End Function

Private Sub txtNumber_KeyPress(KeyAscii As Integer)

Select Case KeyAscii  '按输入字符的ASCII码值分情况处理

Case KeyAscii < 32    '保留输入的控制字符

Case 48 To 57         '保留输入的数字字符

Case Else             '其他情况以空字符代替

__(5)__= 0

End Select

End Sub