下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、初级程序员下午试题-87(总分:106.00,做题时间:90分钟)一、试题一(总题数:1,分数:15.00)1.【说明】喜迎2008年北京奥运会!以下【C程序】能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转 90°,并输岀旋转前后的点阵数据及字形。图1-15是汉字“会”字的16X16点阵字形,用数字0表示空白位置,用数字 1表示非空白位置,“会” 字的第1行即可表示成如下的0, 1序列:0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0如果把它看做一个字的16个位,“会”字的第1行可以用十六进制数 0100来表示。同理,“会”字的第 2行可以用十六进制数 02
2、40表示,第3行可以用十六进制数 0420表示依此类推,用 16个双字节整型 数即可存放一个汉字点阵字形。“会”字的点阵数据及字形如图1-15的左半部分所示。将一个汉字逆时针旋转 90°,就是把该汉字点阵的最右列作为旋转后新点阵的第1行,次最右列作为旋转后新点阵的第2行依此类推来形成一个旋转后的点阵字形。图1-15的右半部分就是将“会”字逆时针旋转90°后的点阵数据和字形(提示:读者可将书本顺时针旋转90°,以查看旋转90°后的点阵字形)。在【C程序】中,数组old存放着“会”字的16个双字节整型点阵数据。函数 turnleft能将该点阵数据逆时针旋转9
3、0°,旋转后的点阵数据存放在数组new中。函数display能将旋转前后的点阵数据加以编辑,用字符“.”表示值为0的位,用字符“ x”表示值为1的位,从而将旋转前后的点阵按行输岀其十六进制 的数据和字形,如图1-15所示。【C程序】#include < stdio.h >#define EMPTY '.'#define NONEMPTY 'x'#define LEFT 0#define RIGHT 1main ()static unsigned old16=0x0100,0x0240,0x0420,0x0810,0x1004,0x23c2,
4、0x4001,0x8ff8,0x0100,0x0200,0x0400,0x0800,0xl000,0x2004,0x7ffe,0x0001unsigned new16;turnleft (old, new);display (old,new);turnleft (old,new)unsigned old,new;int row, k;for (row=0;row < 16;row+)for ( (1) ;k < 16;k+)newrow|=(oldk >> (2) )&1)<< (3);display (old, new) unsigned *old
5、,*new;char out2 17,letter2;int row, col;letterO = EMPTY;letter1 = NONEMPTY;outLEFT 16=outRIGHT 16= (4) ; for (row = 0;row < 16;row+,old+,new+) for (col = 0;co1< 16;+col)outLEFT col = letter ( (5) ) &1;outRIGHT col = letter ( (6) ) &1;printf("/n %4x %s",*old,&outLEFT 0);pr
6、intf("%4x %s",*new, &outRIGHT 0);(分数:15.00 ) 正确答案:(1)k=0,newlrowl=0(2) row(3) 15-k"/O'(5) *old >> (15-col)或 oldrow>> (15-col)(6) *new >> (15-col)或 newrow >> (15-col)解析:要点解析这是一道要求读者掌握数组应用的程序设计题。本题的解答思路如下。阅读程序说明后可知,本程序可将一个给定汉字的点阵逆转90。后输岀。用16个元素的元素数组表示汉字点阵
7、,每个无符号整数有16位, 0表示空白位置,为1表示非空白位置。该 C程序的功能是将上述表示形式的汉字点阵("会"字)逆时针旋转90°后存储在数组new中,并输岀旋转前后的十六进制点阵数据和 字形。函数turnleft完成点阵数据逆时针旋转90°,并将旋转后的点阵数据存放在数组New中。在函数turnleft的for循环中,语句“ newrow|=(01dk>>(2) )&1)<<”用于实现“将一个汉字逆时针旋转90°,就是把该汉字点阵的最右列作为旋转后新点阵的第1行,次最右列作为旋转后新点阵的第2行"
8、,即装配新点阵中的第row行。其中,地址运算符“ &"是一个返回操作数地址的单目操作符,运算符“|=”是进行位逻辑或赋值运算。由于新点阵的第row行的各位来自原点阵中各行的第 (15-row)位,而且此处用&1运算来取出该位,因此 空缺处所补充的内容是“ row”,(3)空缺处所填写的内容是“15 -k”。由于(1)空缺处是内循环初始化的部分,且内循环的结束条件是“ k<16”,而每个汉字是16X16点阵字形,因此该空缺处所填写的内容是“ k=0,newrow=0 ”。函数display把旋转后的汉字点阵与原点阵一同输岀,也是通过使用双重for循环语句来实现输岀
9、。由于输岀是一行一行进行的,可知out数组中存放的是每次输岀的原点阵和新点阵的一行数据,而输岀时printf语句中使用“ %s格式的outLEFT和outRIGHT是两个字符串:在 C语言中规定,一个字符串数据总是 以/0 '为结束标志。因此(4)空缺处所补充的内容是“/0 '”。函数display能将旋转前后的点阵数据加以编辑,用字符“."表示值为 0的位,用字符“ x”表示值为1 的位。换言之,函数display输出的符号是'.'和'x',即为数组letter中的2个元素。由此可知(5)、(6) 空缺处所在的语句是对汉字点阵进行输岀
10、转换。由于输岀时是高位在前、低位在后,因此在输岀时排在第 col位的是点阵中每一行的第col位。而外循环中有“ old+ "和“new+的赋值,&1运算只表示判断(5)、(6)空缺处第15位上的值为0或1。而要区分第0位至第14位是0还是1,只要将oldrow右移15-col 位就能对其进行判断。因此(5)空缺处所填写的内容是“ 正确答案:(1)k=0(2) j v =N或其等价形式(3) k=k+1或其等价形式(4) di+6或其等价形式)解析:要点解析本试题的题干说明中已将无线网卡分布问题建模(如图1-16所示)。其中,直线表示无线网卡所在的直线,实心正方形表示无线网卡。
11、而要求解的问题是要求如何在该直线上布局无线AP,使其能覆盖所有的无线网卡,并且所用无线 AP的数量要尽可能的少。这是一个通过进行一系列选择求最优解的问题。分析该问题,发现其具有最优子结构,并且具有贪心选择性质,故该问题可以用贪心算法来求解。贪心算法思想是:问题的规模为N,从第1个无线网卡(最左端)开始布局无线 AP,把第1个无线AP放置在该无线 网卡右方的6m处,此时该无线AP会覆盖从第1个无线网卡到该无线网卡右方直线长度为12m的所有无线网卡,假设覆盖了 Ni个无线网卡。此时问题规模变成了N-N1,接着把第1个无线AP覆盖的无线网卡去掉,再从N-N中选择第1个(最左端)无线网卡开始布局无线
12、AP,将第2个无线AP放置在该无线网卡右方的 6m 处。依此布局,直到覆盖所布的无线网卡。图1-20是问题解的模型。其中,直线表示无线网卡所在的直线,实心正方形表示无线网卡,实心圆形表示无线AP,虚线圆以对应无线 AP为圆心,直径为无线 AP的覆盖范围,即对应无线 AP的覆盖范围(12米)o 实现贪心算法的流程见图1-17。由于“算法结束后 k的值为无线AP的总数”,因此在算法开始处需要对变量k赋初值,即(1)空缺处所填写的内容是“ k=0”。该贪心算法中,N表示无线网卡的总数,且无线网卡的编号按照无线网卡到通道A端的距离从小到大进行编号,di1 <i WN)表示第i个无线网卡到通道 A
13、端的距离。当判断第i个无线网卡未超过无线网卡总数 N,而求解下一个无线网卡(即第i+1个无线网卡,或第j个无线网卡)所归属的无线AP时,也需要判断第 j个无线网卡是否超过无线网卡总数N,以及第j个无线网卡与第j个无线网卡之间的距离是否超过12米,因此空缺处所在的判断条件是“ j v =N&&di-div=12',即该空缺处所填写的内容是“ j v=N或其等价形式。若第j个无线网卡未超过无线网卡总数N,且第j个无线网卡与第j个无线网卡之间的距离未超过12米,old >> (15- col) ”或“oldrow >> (15- col) ” <
14、 同理,只要将newrow右移15-col位就能对adw进行判断,即(6)空缺处所填写的内容是“ *new>>(15- c01)”或“newrow >> (15- col) ”。二、试题二(总题数:1,分数:15.00)【说明】某大学城图书馆需要在无线阅览厅的某些位置上放置无线接入点AP(Access Poin)。假设每个无线AP覆盖范围的半径是6米,因此必须使得每台笔记本电脑上的无线网卡到某个无线AP的直线距离不超过 6米。为了简化问题,假设所有无线网卡在同一直线上,并且无线AP沿该直线放置。该问题可以建模为如图1-16所示,其中直线表示无线网卡所在的直线,实心正方形
15、表示无线网卡。现利用贪心策略实现用尽可能少的 无线AP覆盖所有的无线网卡。实现贪心算法的流程如图1-17所示。其中,di(1 <i WN)表示第i张无线网卡到通道 A端的距离,N表示无线网卡的总数,无线网卡的编号按照无线网卡到通道A端的距离从小到大进行编号;sk表示第k(k >1)个无线 AP到通道A端的距离。算法结束后 k的值为无线AP的总数。1.【问题1】请填补图1-17流程图中(1)-(4)空缺处的内容。(分数:15.00 )I(1) . I (分数:7.50 )则可以求解再下一个无线网卡 (即第i+2个无线网卡,或第j+1个无线网卡)所归属的无线AP。反之,则需 要记录无线
16、AP的总数k,即(3)空缺处所填写的内容是“ k=k+1”或其等价形式; 以及记录第A(A)1)个无线 AP到通道A端的距离,即 空缺处所填写的内容是“ di+6 ”或其等价形式。当求解完第k个无线AP(覆盖了 N个无线网卡)的布局后,需要把第 A个无线AP覆盖的无线网卡去掉,再 从N-M中选择第1个(最左端)无线网卡开始布局第 k+1个无线APo依此不断求解,直到覆盖所有的无线网 卡。正确答案:(5)0(N)或0(n)解析:要点解析虽然该贪心算法中包含两个循环,但实际上只是遍历所有无线网卡一次,因此算法复杂度是0(N) o三、试题三(总题数:1,分数:15.00)2.说明】以下【C程序】的功
17、能是从文件 text_01.ini中读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到文件word_xml.out中。该C程序采用一棵有序二叉树存储这些单词及其岀现的次数,一边读入一边建立。然后中序遍历该二叉树,将遍历经过的二叉树上节点的内容输岀。程序中的外部函数int getword(FILE *fpt ,char *word)从与fpt所对应的文件中读取单词置入word,并返回1 ;若已无单词可读,即到文件尾部时,则函数返回0oC程序】#include< stdio.h>#include< malloc.h >#incl
18、ude< ctype.h>#include< string.h>#define INF "TEXT_01.INI"#define OUTF "WORD_XML.OUT"typedef struct treenodechar *word;int count;struct treenode *left, *right;BNODE;int getword(FILE *fpt,char *word);void binary tree(BNODE *t,char *word)BNODE *ptr, *p;int cmpres;p = NUL
19、L;(1) ;while (ptr) /* 寻找插入位置*/cmpres = strcmp(word, (2) ); /*保存当前比较结果 */if (!cmpres)(3) _return;else;ptr = cmpres > 0 ? ptr- > right : ptr- > left;ptr = (BNODE *)malloc(sizeof(BNODE); ptr- > right = ptr- > left = NULL;ptr- >word = (char *)malloc(strlen(word)+1); strcpy(ptr- > wo
20、rd,word);ptr- > count = 1;if (p = NULL)(5) ;elseif (cmpres > 0)p- > right = ptr;elsep- > left = ptr;void midorder(FILE *fpt, BNODE *t)if ( (6 _return;midorder(fpt , t-> left);fprintf(fpt , " %s %d/n " , t-> word , t-midorder(fpt , t-> right);void main()FILE *fpt;char w
21、ord40;BNODE *root = NULL;if (fpt = fopen(INF , "r") = NULL) printf("Can't open file %s/n",INF); return;while (getword(fpt,word) = 1) binary_tree( (7 fclose(fpt);fopen(OUTF,"w"); midorder(fpt, root); fclose(fpt);(分数:15.00 ) 正确答案:(1)ptr=*t(2) ptr- > word(3) ptr- &g
22、t; count+或其等价形式 P=ptr(5) *t=ptr(6) t=NULL 或!t(7) &root , word)解析:要点解析> count);本题的解答思路如下。这是一道要求读者掌握二叉树应用的程序设计题。对于以下结构体定义语句。typedef struct treenode char *word ;int count ;struct treenode *left , *right ;BNODE显然,这是定义了一个用于构造二叉树的数据结构,从结构成员的名字上看,字符指针成员word是用来保存单词的,整型成员 count是用来保存该单词在文章中出现次数的。通过快速浏览
23、程序,不难发现函数 binary_tree()大体上是在二叉树中为单词寻找位置并插入,由于没有其他函数进行显式的二叉树创建工作,因此该函数可能还要承担创建二叉树的任务。函数midorder是一个典型的递归算法的中序遍历二叉树,对函数binary_tree()处理的结果进行中序遍历,并将每一个节点的内容写入文件word_xml.out中。而函数mam()则调用这两个函数完成全部处理工作。首先从main()函数读起。(7)空缺处所在的语句是一个循环的循环体,是对函数binary_tree() 的调用。我们看,在这个循环体中,函数getword()每从文章中抽取一个单词,便由函数binary_tre
24、e()插入二叉树中,循环结束时已经完成了创建二叉树以及把所有单词都插入二叉树的工作。因为此后已经是对二叉树的中序 遍历了。由于已经明确空缺处需要填写的是函数binary_tree()调用的实际参数表,因此就需要研究函数binary_tree()的形式参数“ BNODE*t,char*word ”。首先,该函数的第2个参数(即char *word) 是要插入的单词(这从函数对该参数的使用中也可以看出)。考虑到实际参数是一个数组 (即char word40;),而形式参数需要的是一个字符串指针,只要把数组首地址传入即可。因此(7)空缺处所填写的实际参数就应该是“ word”。函数binary_tr
25、ee() 的第1个参数要求是 BNOD类型的,通读函数 main(),只有一个BNOD类型的变量 root(即BNODEroot=NULL ;),那么在(7)空缺处是以何种方式将root传入函数binary_tree() 中的()呢?由于形式参数需要一个二级指针,而实际参数是一个指针,因此(7)空缺处所对应的实际参数只能填写"&root",即把root的地址作为一个常量二级指针传递给函数binary_tree()。综上所述,(7)空缺处所填写的实际参数是“ & root,word”。阅读函数binary_tree() 可知,所传入的BNOD类型变量(*roo
26、t)需要被函数中的BNOD型变量(*prt)接收。 那么这个操作应该在何处完成 ?由于语句“ ptr=cmpres > 0? ptr- > right : ptr- > left ; ”是在二叉树中查 找的典型算法。因此BNOD类型变量接收问题是在进入 while循环之前完成的,即(1)空缺处所填写的内容 是完成该BNOD类型变量接收任务的语句。 综合考虑形式参数中所传入变量的类型和ptr的类型可知,(1)空缺处所填写的语句是“ ptr=*t ”。在C语言中,如果要比较两个字符串,则可以使用库函数Strcmp()。该函数可以比较两个字符串并根据结果返回一个整数值,具体语法如下
27、:int strcmp(string str1, string str2) ;其中,str1和str2是两个已声明并已初始化的字符数组,该函数返回负数表示str1小于str2 ;返回正数表示str1大于str2 :返回0表示两个字符串相同。空缺处所在的语句中“ word"要和谁比较,当然是ptr- >word 了,即空缺处所填写的内容是“ ptr ->word”。若比较结果相同时,则需要把该单词的计数加1,即 空缺处所填写的语句是“ ptr ->count+"或其等价形式。空缺处所填写的语句作用比较模糊,可以暂时跳过,继续阅读之后的程序。很明显,(4)、(
28、5)空缺处之间的语句是建立了一个新节点,并将左右链接置空,写入word,写入计数1。对于(5)空缺处所在的条件判断语句,即if (p = NULL) (5) ;elSe if (cmpres > 0) p- > right = ptr ;elSe p- > left = ptr ;其中,(5)空缺处所在的这个if判断也比较难理解。而 else部分的if.else 体(即p- > right=ptr ;和 p- > left =ptr ;),显然是将新建节点接入二叉树的操作,指针p到底指向哪里?从该句可以判断指针p是查找位置而未找到时的最后一个节点,即ptr由此执行
29、p- >fight=ptr或者p- > left=ptr,操作后ptr值为NULL,然后退出while循环。那么指针p和ptr的这种关系是怎样建立起来的?从程序的流程来看,只能是在遍历二叉树的过程中建立起来的,因为p需要随时跟踪ptr的变化。而遍历二叉树部分的C代码并没有实现这样的功能,因此需要在(4)空缺处填写完成这个任务的语句,即“ p=ptr ”。有了以上的理解,就不难理解条件判断“ p=NULL的含义了。 因为只有在没有进入 while循环而直接执行 循环以后的语句才会形成这种情况。换言之,p=NULL表示这是第一次调用函数,即 ptr是新建的树。此时就需要将新建树的树根回
30、传,以便以后程序调用时使用,因此(5)空缺处所填写的语句是“ *t=ptr ” (提醒读者想一想,为什么不是 t=ptr?)。(6)空缺处是判断一个条件,以结束对递归函数 midorder()的调用。递归函数midorder()何时结束呢?显然 当传入的t为空时结束,因为这包含以下两种可能要求结束调用的条件:1)首次传入的二叉树为空。对于一棵空的二叉树,自然是无须遍历的。2)遍历结束。遍历结束后再调用递归函数midorder()时,传入的t- >left或者t- >fight为空,自然遍历就应该就此结束。其实以上两个条件表达的意思一样,即(6)空缺处所填写的判断条件是“ t=NUL
31、L或“!t ”。四、试题四(总题数:1,分数:15.00)【说明】【算法4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号 或者右括号,则给出相应的提示信息,如图1-18所示。在【算法4-1】中,slack为一整数栈。算法中各函数的说明如表1-11所示。表1-11各函数的功能说明表函数名函数功能push(i nt i)将整数i压入栈stack中Pop()stack的栈顶元素出栈Empty()判断stack栈是否为空。若为空,函数返回1,否则函数返回0Nextch()读取文本文件中的下一个字符,并返回该字符的ASCII值,将字符所 在的行号及字符在行中的位置
32、分别存储到变量 row和col中,若遇到 文件结束符,则将变量EOF置为trueKin d(charch)判断字符ch是左括号还是右括号,若是左括号,函数返回1:若是右括号,函数返回2;若两者都不是,函数返回0【算法4-1】将栈stack置空,置 EOF为falseCh< -nextch();while(not EOF)kJkind(ch);if (k =(1)push( (2);push( (3);else if( k =(4)if(not empty()pop();pop();)else显示错误信息(缺少对应左括号或右括号):显示行号 row :显示列号 col :)End ifEn
33、d ifCh< -nextch()end whileif(not empty()显示错误信息(缺少对应左括号或右括号):While(not empty()row < -pop();col < -pop():显示行号 row :显示列号 col ;)End whileEnd if为了识别更多种类的括号,对【算法 4-1】加以改进后得到【算法 4-2】。【算法4-2】能够识别圆括 号、方括号和花括号(不同类型的括号不能互相匹配 )。改进后,函数kind(charch)的参数及其对应的返回 值如表1-12所示。ch()其他返回值1234567表 1-12 函数 kind(charc
34、h) 的参数及其对应的返回值【算法4-2】将栈stack置空,置 EOF为falseCh< -nextch();while(not EOF)k< - kind(ch);if(k > 0)if(判断条件1)push(5);push(6);push(7);else if( 判断条件2 and判断条件3)pop();pop();pop();else显示错误信息(缺少对应左括号或右括号);显示行号 row ;显示列号 col ;)end ifend ifch < - nextch() ;)end whileif(not empty()显示错误信息(缺少对应左括号或右括号);Wh
35、ile(not empty()Pop();row < - pop():col < - pop();显示行号 row ;显示列号 col ;)end whileend if1.【问题1】请将【算法4-1】和【算法4-2】中,(1)(7)空缺处的内容补充完整。(分数:15.00 )正确答案: (1)1(2) col(3) row(4) 2(5) col(6) row(7) k)解析:正确答案: (8)C 或字符是左括号 (9)E 或栈不空(10)A 或栈顶元素的是与当前字符匹配的左括号 )解析:试题 4 要点解析 这是一道要求读者用创建 Thread 类的子类的方法实现多线程的编程题。
36、本题的解答思路如下。 通常把限定只能在一端进行插入和删除操作的线性表称为栈,所以栈又称为运算受限的线性表。把可以进 行插入和删除操作的一端称为栈顶 ( 习惯用 top 指针指示 ) ,而另一端称为栈底。当栈中不包含任何数据元 素时,这个栈就为空栈。由于栈具有“后进先出”的运算特点, 因此在程序设计中应用十分广泛。 例如进制转换、 括号匹配的检验、 表达式求值及迷宫求解等。【算法 4-1 】的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者 右括号,则给出图 1-18 所示的提示信息。从图 1-18 给出的信息可知,程序不但要求检查出是否有括号匹 配错误,而且还需要
37、给出具体的出错位置。通常,括号匹配的规则是把最近的左右括号配成一对,所以括 号匹配最常用的方法是遇到左括号则入栈,遇到右括号则出栈。这样,出栈的左括号与当前的右括号是匹 配的。【算法 4-1 】分析:1) 栈置空,置EOF为FALSE并从文件中读取第一个字符到ch,然后进入循环。循环体执行一次处理一个ch。进入循环,利用 kind函数算出ch的类型k。2) 虽然【算法4-1】中有(1)空缺处,但其基本结构却很明显,大致流程如下。当k等于什么的时候把什么入栈;当 k 等于什么且栈不为空的时候,进行出栈操作。如果栈为空,则打印错误信息:如果都不是,则读文件 的下一个字符再次进入循环。根据以上所提到
38、的算法可知,入栈操作应该发生在类型A为1(即ch为左括号)时,而出栈操作应该发生在类型A为2(即ch为右括号)时。因此(1)空缺处所填写的内容是“ 1”,(4)空缺处所填写的内容是“ 2”。由于在 (4) 空缺处之后的出栈操作中, 并没有用到栈的内容。 因此可能有些读者理所当然地认为栈中的内容 没有什么用,可以在(2)、(3)空缺处随便压个ch,即两个空缺处均填写“ ch”。但换个角度思考,从逻辑 上就可以推翻这种解答。如果 (2) 、 (3) 空缺处压的是同样的数据,又是在同一位置出栈,算法大可只用一 个 push 、 pop 就可以了。由语句“ rowv -pop() ; col v-po
39、p();”可知,(2)、(3)空缺处应该把row和col压入堆栈。由于是先弹出FOW后弹出col,并且根据栈的“后进先出”规则可知,应先将 col压入栈,再压入row。因此(2)空缺 处所填写的内容是“ col”,(3) 空缺处所填写的内容是“ row”。【算法 4-2 】分析:同理,由【算法4-2】中的语句“ rowv -pop根据栈的“后进先出”规则可知, ();col < -pop():”可知, (5)、(6)空缺处应该把row和col压入堆栈。应先将 col压入栈,再压入row,即(5)空缺处所填写的内容 是“ col ”,(6)空缺处所填写的内容是“ row”。由于判断条件 1
40、 为真时,需要进行入栈操作,因此判断条们:1 应是判断字符是不是左括号,如果是就入栈,即(8)空缺处应选择选项 C的“字符是左括号”。判断条件 2 和判断条件 3 是相关联的,当两个判断条件都为真时,要进行出栈操作,因此要判断栈是否为 空。由此可以得出在判断条件 2 和判断条件 3 中,至少有一个必定是用来判断栈是否为空的。可以用判断 栈顶元素来确定当前括号是否和栈中压入括号是同一类型的, 但前提是左括号类型入了栈, 而且要在栈顶。如果(7)空缺处压入的是k,则正好符合这一条件。所以(7)空缺处所填写的内容是“ k”。同时,判断括号是否匹配的条件也就可以确定了,如果当前ch是右括号且当前栈顶的
41、左括号(只有左括号入了栈)类型与ch匹配,则匹配成功。根据试题说明中的提示信息:若“判断条件2”的逻辑判断结果为假,就无须对“判断条件 3”进行判断,所以应把“栈不空”作为判断条件2,“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3,即(9)空缺处应选择选项 E的“栈不空”,(10)空缺处应选择选项 A的“栈顶元素表示的是与当前字符匹配的左括号”。五、试题五(总题数:1,分数:16.00)【说明】某学期成绩管理系统的“增、删、改数据表中的记录”对话框如图1-19所示。图1-19对话框中共定义了 6个标签、6个文本框、4个命令按钮和1个Data数据控件。其中Data数据控 件是Visua
42、l Basic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,并实现对数据资源的 访问。【添加】(cmdAdd)按钮用于向学生成绩数据表添加一条空记录:【修改】(cmdEdit)按钮用于修改当前所显示的一条数据记录:命令按钮【删除】(cmdDelete)用于删除当前显示的一条数据记录;单击【退出】(cmdExit)按钮,系统将退出图1-19所示的对话框。表1-13是学生成绩表结构的示例;表 1-14是学生成绩表的示例。图1-19将表1-14数据库中的记录信息显示到相应的文本框中。要在各文本框(txtStu(i) ,i=0,1,2,3,4,5)中显示Data数据控件所连接的数据表中的数
43、据,必须将文本框与Data数据控件进行绑定。表1-13学生成绩表结构字段名类型大小字段名类型大小班级:Text6语文In teger:2(默认)学号Text8数学In teger2(默认)姓名Text10英语In teger2(默认)表1-14学生成绩示例表班级学号姓名语文数学英语AP A40001张薇958690BB40001谢新677181AA40002刘红948986CP C40001张斌788886 【Visual Basic程序】Private Sub Form_Load()Fori = 0 To 5txtStu(i)丄ocked = TrueNext iEnd SubPrivate
44、 Sub cmdAdd Click() cmdEdit.Enabled = Not cmdEdit.Enabled (1_Fori = 0 To 5txtStu(i)丄 ocked = Not txtStu(i).Locked Next iIf cmdAdd. Caption =" 添加"Then(2) _Datal.Caption =" 新记录" cmdAdd.Caption =" 保存" cmdExit.Caption =" 取消" txtStu(0).SetFocusElse(3) _cmdAdd.Capti
45、on =" 添加"End IfEnd SubPrivate Sub cmdEdit_Click()cmdAdd. Enabled = Not cmdAdd. EnabledcmdDelete. Enabled = Not cmdDelete. EnabledFori = 0 To 5txtStu(i).Locked = Not txtStu(i).LockedNext iIf cmdEdit.Caption =" 修改"ThencmdEdit.Caption =" 保存" cmdExit.Caption =" 取消"
46、; Else(4) _cmdEdit.Caption =" 修改"End IfEnd SubPrivate Sub cmdDelete_Click()answer = MsgBox("确实删除该记录吗?", vbYesNo + vbQuestion," 警告")If answer = vbYes Then(5) _(6) _End IfEnd IfEnd SubPrivate Sub cmdExit_Click()If cmdExit.Caption =" 退出"ThenEndElse(7_cmdAdd. Enab
47、led= TruecmdEdit.Enabled = TruecmdDelete. Enabled= TrueFori = 0 To 5txtStu(i).Locked = Not txtStu(i).LockedNext icmdExit.Caption =" 退出"cmdAdd.Caption =" 添加"cmdEdit.Caption =" 修改"(8)End IfEnd SubPrivate Sub Datal_Reposition()Datal.Caption ="第"& (9) .Absolut
48、ePosition + 1& "条记录"End Sub1.【问题1】请根据【说明】和图1-19的显示结果,从以下备选答案中为(1)(9)空缺处选择正确的答案。(以下部分选项可重复选择)【备选答案】*A.Datal.RefreshB.Datal.Recordset.UpdateC.Datal.RecordsetD.Datal.Recordset.CancelUpdateE.Datal.Recordset.AddNewF.Datal.Recordset.MoveNextG.Datal.Recordset.MoveLastH.cmdDelete.Enabled=Notcm
49、dDelete.Enabled(分数:16.00)(1) .(分数:4.00)正确答案:(1)H 或 cmdDelele.Enabled = Not cmdDelete.Enabled(2) E 或 (3) G 或 (4) B 或 (5) F 中 (6) G 或 (7) D 或 (8) A 或 Datal.Refresh(9) C 或 DataI.Recordset)解析:要点解析 这是一道要求读者掌握用Data数据控件访问数据库的综合应用题。本题的解答思路如下。Data数据控件是Visual Basic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,并实现对数据资源的访问。为了在程
50、序运行时,使Data数据控件能够访问指定表中的记录信息,应设置该控件的DatabaseName属性和RecordSource属性。要在图1-19各文本框中显示 Data控件所连接的数据表中的数 据,必须将文本框与Data数据控件进行绑定。本程序开始部分,通过以下语句设置文本框不可编辑,使某条记录成为当前记录后,触发此事件。For i = 0 TO 5txtStu(i).Locked = TrueNext i在程序运行中,应注意各命令按钮之间的互相制约关系。例如,单击【添加】按钮后,不允许再单击【修 改】、【删除】等按钮。因此本案例在【添加】按钮的 Click 事件中,用“ cmdEdit.En
51、abled = Not cmdEdit.Enabled ”、“ cmdDelete.Enabled=NotcmdDelete.Enabled ”等语句分别实现【修改】、【删除】 按钮不可用状态的设置。因此 空缺处所选择的语句是选项 H的“cmdDelete.Enabled=Not cmdDelete.Enabled ”。对于添加记录的操作,需单击两次【添加】按钮才能完成。第 1 次单击该按钮时,执行 (1) 空缺处的语句。 而该语句所要完成的功能是将一条空记录添加到记录集的末尾,因此(2)空缺处所选择的语句是选项 E的“”。 由语句“ txtStu(i).Locked=Not txtStu(i
52、).Locked ”可知, 第 1 次单击【添 加】按钮后,就可以在文本框 (txtStu(i),i=0,1,2,3,4,5)中输入各字段的数值。第 2 次单击【添加】按钮时,执行语句“ ”,其作用是确认添加操作后,再将新 记录添加到数据库中。 通常, 新添加的记录是数据表中的最后一条记录, 因此(3) 空缺处语句所要完成的功 能是,将记录指针移到最后一条记录上,即该空缺处所选择的语句是选项G的“”。对于修改记录中的语句“ ”, 其作用是调用 Recordset 的 Edit 方法, 使当前记录成 为可编辑的状态。在完成修改操作后,还需执行语句“ ”,以确认所要做的修改 操作,即空缺处所选择的
53、语句是选项B的“ ”。对于删除记录的操作,删除当前记录的语句是“ ”。删除当前记录后应使下一条记录成为当前记录,因此(5)空缺处所选择的语句是选项F的“”。删除当前记录后, 如果记录指针指向最后一条记录的后面, 则需要重新将记录指针移动到最后一条记录上,使之成为当前记录。语句“ 用于判断记录指针是否指向最后一条记录的后面。其中,EOF是Recordset的一个属性,当值为True时,表明记录指针已移到最后一条记录的后面。(6)空缺处语句所要完成的功能是,使最后一条记录成为当前记录,即该空缺处所选择的语句是选项G的“”。(7) 空缺处语句所要完成的功能是放弃添加的新记录 (或对数据的修改 ),选
54、择的语句是选项 D的“"。取消所添加的新记录 (或对数据修改)的操作 后,还需要刷新与 Datal 相连接的记录集,同时把记录集中的第一条记录设置为当前记录。因此,(8) 空缺处所选择的语句是选项 A的“ Datal.Refresh ”。最后(9)空缺处所选择的语句用于设置当前记录数,即选项C的“ Datal.Recordset "。在 Datal的Reposition 事件中, Recordset 是 Datal 控件所控制的记录集对象,通过此对象对数据表中的记录进行浏 览和操作。访问数据库的记录集可用 Datal.Recordset 实现。另外补充说明一点,对于本试题中
55、,学生成绩表的建立步骤如下。1) 启动数据管理器,选择【外接程序】-【可视化数据管理器】命令。2) 建立数据库,即单击工具栏中的【数据库窗口】按钮。3) 建立数据表结构。在数据库窗口中单击鼠标右键,从弹出的快捷菜单中选择【新建表】命令,打开如图1-21 所示的“表结构”对话框。“表名称”栏输入:学生成绩表。按表1-13 给出的学生成绩表结构定义表中的各个字段。*4) 编辑数据表中的数据。在数据库窗口的数据表名处单击鼠标右键,从弹出的快捷菜单中选择【打开】命 令。在打开的记录操作对话框按表 1-14 所给出的信息添加各个学生的成绩。正确答案: (10)D 或 bas)解析: 要点解析 Visua
56、l Basic 应用程序有 4 种类型的文件, 包括单独的窗体文件、 标准模块文件、 类模块文件和工程文件。 单独的窗体文件的扩展名为frm ;公用标准模块文件的扩展名为bas ;类模块文件的扩展名为cls ;工程文件的扩展名为vbp。工程文件由若干个窗体和模块组成。正确答案:(将【退出】按钮的 Caption属性设置为“退出(&C)",将 Cancel属性设置为“ True”)解析: 要点解析 Visual Basic 的任何一个控件,只要它有 Caption 属性,就可以为其指定访问热键。对于一般控件 (非菜 单项 ) ,可以在设计阶段通过属性窗口,在 Caption 属
57、性中加符号“ &”设置访问热键。访问键只能是一个 字符,通常用键盘上存在的西文字符作为访问键,否则就没有实际意义。如果用汉字作为菜单项或控件的 标题,则通常把访问键放在标题后面的括号中。若要使图1-19对话框中的【退出】按钮新增如下的功能:运行时该按钮上显示有“退出(C)”字样的信息, 按【Alt+C】组合键或按【ESC键都相当于单击该按钮,则需要在开发时,将命令按钮“退出”的Caption属性设置为“退出(&C)”,将 Cancel属性由默认的“ False ”更改为“ True”。正确答案:(执行所本试题所给岀的MsgBox语句时,将弹岀一个消息框,该消息框的标题为“数据错”;该消息框内的正文为“清检查修改输入数据!”;该消息框中有一个错误图标,还有一个【 0K按钮;如果 用户按【Enter】键,则相当于单击【0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 荆州市监利县2025-2026学年第二学期五年级语文第五单元测试卷(部编版含答案)
- 焦作市武陟县2025-2026学年第二学期四年级语文第五单元测试卷(部编版含答案)
- 宜昌市西陵区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 来宾市武宣县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 那曲地区班戈县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 昌吉回族自治州玛纳斯县2025-2026学年第二学期三年级语文第六单元测试卷(部编版含答案)
- 汉中市城固县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 邢台市柏乡县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 服装市场营销策划方案
- 深度解析(2026)《CBT 4002-2005 J类法兰铸钢1.0MPa截止阀》
- 老年人摄影与艺术创作指导
- 2024-2025学年度洛阳职业技术学院单招《职业适应性测试》综合提升测试卷含答案详解【新】
- 蒙牛校园招聘在线测评题
- (2025年)(新版)低压电工证职业技能考试题库(含答案)
- 规范参股公司管理制度
- 幕墙施工防坠落方案
- 工厂防错培训课件
- 2025人教版三年级数学上册 第六单元 分数的初步认识 单元分层作业
- 止水钢板施工人员配置
- 无人吊装施工方案(3篇)
- 湖南公务员面试必-备知识要点集锦
评论
0/150
提交评论