阅读以下应用说明及Visual Basic程序代码,根据要求回答问题1至问题4。
[说明]
某文件管理系统的图片浏览器如图3-19所示。运行程序时,用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名后,在图像框中将显示出相应的文件图像。
在开发过程中,假设驱动器列表框名为drvFile,目录列表框名为 dirFile,文件列表框名为filFile,选择文件类型组合框名为cboFile,图像框名为IMG nClick=over(this) title=放大Show。
图3-19 图片浏览器
[Visual Basic程序]
Private Sub Form_Load ()
IMG nClick=over(this) title=放大Show.Stretch=True
cboFile.Addltem "位图文件(*.bmp)"
cboFile.Addltem "图标文件(*.ico)"
cboFile.Addltem "图元文件(*.wmf)"
cboFile.Addltem "JPEG文件(*.jpg)"
cboFile.Addltem "GIF文件(*.gif)"
cboFile.ListIndex = 0
(1)
End Sub
Private Sub drvFile_Change ()
(2)
End Sub
Private Sub dirFile_Change ()
(3)
End Sub
Private Sub cboFile_Click ()
(4)
Case 0
filFile. Pattern= "*.bmp"
Case 1
filFile. Pattern= "*.ico"
Case 2
filFile. Pattern= "*.wmf"
Case 3
filFile. Pattern= "*.jpg.
Case 4
filFile. Pattern= "*.gif"
End Select
End Sub
Private Sub filFile_Click()
If (5) Then
IMG nClick=over(this) title=放大Show. Picture= LoadPieture(filFile. Path+ filFile.FileName)
Else
IMG nClick=over(this) title=放大Show. Picture= LoadPicture((6) + "\" + (7) )
End If
End Sub
请根据[说明]和图3-19的显示结果,从以下备选答案中为程序(1)~(7)空缺处选择正确的答案。
[备选答案]
A. filFile.path B. dirFile.Path=drvFile.Drive
C.Right(filFile.Path,1) = "\" D.filFile.Pattern ="*.bmp"
E.filFile.Path = dirFile.Path F.filFile.FileName
G.Select Case cboFile.ListIndex
第1题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
该程序从正文文件test.txt中读入一批整数,并将它们按照递增的顺序存放在一个链表中。其中,函数struct Link*insertChain(struct Link*head,structLink*k)用来寻找结点k在链表head中的插入位置,并插入该结点。
[C程序]
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)
{print("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;
}
struct Link *insertChain(struct Link *head,struct Link *k)
{ struct Link *ptr,*u;
ptr=head;
while(ptr && k && k->number>ptr->number)
{ u=ptr; (3) }
if(ptr == head) head=k;
else (4);
(5);
return head;
}
第2题
读以下说明和流程图,回答问题将解答填入对应栏。
[说明]
下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。
注:返回值用pos表示。
[问题]
将流程图的(1)~(5)处补充完整。
第3题
阅读以下说明和C++ 程序,将应填入(n)处的字句写在对应栏内。
[说明]
试从含有n个int 型数的数组中删去若干个成分,使剩下的全部成分构成一个不减的子序列。设计算法和编写程序求出数组的不减子序列的长。
[C++ 程序]
include<stdio.h>
define N 100
int b[]={9,8,5,4,3,2,7,6,8,7,5,3,4,5,9,1};
int a [N];
define n sizeofb/sizeofb[0]
void main ( )
{
kit k,i,j;
(1)
(2)
for (i=1;i<n; i++ )
{
for ( j=k;(3); j--);
(4); /*长为 j+1 的子序列的终元素存储在 a[j+1]*/
if ((5)k++; /*最长不减子序列长 k 增1*/
}
printf ( "K = %d\n ",k );
}
第4题
阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
【函数】
void Locate( int &x)
{ <结点类型说明>
* p =first -> next;
while(p!=frist&&(1))P=P->next;
if(p! =first) /*链表中存在x*/
{(2);
<结点类型说明>
* current = P; /*从链表中摘下这个结点*/
Current -> prior -> next = current -> next;
Current -> next -> prior = current -> prior;
P = current -> prior; /*寻找重新插入的位置*/
While(p! =first &&(3))p=p->prior;
Current-> next =(4); /*插入在P之后*?
Current -> prior = P;
P -> next -> prior = current;
P->next=(5);
}
else printf("Sorry. Not find! \n"); /*没找到*/
}
第5题
阅读以下说明和java代码,将应填入(n)处的字句写在对应栏内。
[说明]
本程序使用类来管理员工的通讯地址信息。已知程序的输出为:
输出记录:5
姓名:王丽华
街道地址:中华路15号
市:襄樊市
省:湖北省
邮政编码:430070
[Java代码]
public class Employee{
protected String (1);
protected String street;
protected String city;
protected String prov;
protected String post;
protected int no;
public Empbyee(){}
public Employee(String name,String street,String city,String prov,String post, (2) ){
this.name=name;
this.street=street;
this.city=city;
this.prov=prov;
this.post=post;
this.no=no;
}
public static void main(String[]args){
Employee emp=new Employee(“王华”,“中华路15号”,“武汉市”,“湖北省”,“430070”,1);
emp.changeName(“王丽华”);
(3) (“襄樊市”);
emp.changeNo(5);
(4);
}
void changeName(String name){this.name=name;}
void changeStreet(String street){this.street=street;}
void changeCity(String city){this.city=city;}
void changeProv(String prov){this.prov=prov;}
void changeNo(int no){(5);}
void display(){
System.out.println(“输出记录:”+this.no);
System.out.Println(“姓名:”+this.name);
System.out.println(“街道地址:”+this.street);
System.out.println(“市:”+this.city);
System.out.println(“省:”+this.prov);
System.out.println(“邮政编码:”+this.post);
}
}
第6题
阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内[说明]
设有一张学生成绩表scores存放在Access数据库Student中,其中包括学生编号、姓名以及各科目考试成绩。下面的应用程序利用ADO Data和DataGrid控件实现了对成绩数据的基本管理,其操作包括:
(1)添加新记录:单击“添加”按钮,光标将指向最后一条数据记录,在其后编辑好新的数据记录后,再单击“更新”按钮,该数据即被加入成绩表;
(2)删除记录:单击“删除”按钮将删除当前所指记录,其后的数据记录依次上移;
(3)更新记录:直接编辑某条已有记录,再单击“更新”按钮将更新成绩表;
(4)记录排序:选中单列字段后,单击“排序”按钮,记录集将按该字段升序排列。
程序的运行界面为:
在开发过程中,数据库连接对象使用了名为Adodc1的ADO Data控件,数据显示区域使用了名 DataGnd1的DataGrid控件,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDel、CmdUpdate、 CmdRefresh、CmdSort和CmdExit。
[Visual Basic代码]
Dim conn, database, table As String
Private Sub Form_Load()
database ="E:\Student.mdb" ’设置要访问的数据库
conn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Souse=" & database
Adodc1.ConnectionString=conn ’设置连接字符串
table = "scores"
Adode1. (1)= table ’设置所要访问的数据表
Set DataGrid1. (2)= Adodc1
End Sub
Private Sub CmdAdd_Click() ’“添加”按钮的单击事件响应过程
Adodc1.Recordset. (3)
End Sub
Private Sub CmdDel_Click() ’“删除”按钮的单击事件响应过程
Adodc1.Recordset.Delete
Adodc1.Reeordset.MoveNext
End Sub
Private Sub CmdUpdate_Click() ’“更新”按钮的单击事件响应过程
Adode1.Reeordset.UpdateBatch adAffectAll
End Sub
Private Sub CmdRefresh_Cliek() ’“刷新”按钮的单击事件响应过程
Adodc1.Refresh
End Sub
Private Sub CmdSort_Cliek() ’“排序”按钮的单击事件响应过程
If DataGrid1.SelStartCol < 0 Or DataGridl. SelStartCol (4) DataGrid1. SelEndCol Then
MsgBox “请选择某一字段(列)!”
Exit Sub
End If
Adodc1. RecordSource = "SELECT * FROM" & table & "order by" & _
DataGrid1. Columns((5)).DataField
Adodc1.Refresh
End Sub
Private Sub CmdExit_Click() ’“退出”按钮的单击事件响应过程
End
End Sub
第7题
阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。
[说明]
设学生某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图读取该文件,统计出全部成绩中的最高分max和最低分min。
第8题
阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。[说明]
下面的词典类Dic实现了简单的英译汉功能。程序运行后的输出为“我是一个学生”。
[C++程序]
include <iostream.h>
include <string.h>
define Max 100
class Dic
{ int top;
char words[Max] [12];
char mean[Max] [20];
public:
Die(){top=0;}
void add(char w[],char m[]){
strcpy(words[top],w);
strcpy(mean[top],m);
(1);
}
void trans(char str[]) {
int i=0,j=0,k=0,s;
char w[12],h[200];
while(l) {
if(str[i]! =''&&str[i]! ='\0')
w[j++]=str[i]; //读取单词的一个字符,记录在w中
else {
w[j]='\0';
for(s=0;s < top;s++)
if(strcmp(words[s],w) (2) 0) break;
if(s<top) //找到了,翻译成对应的mean[s]
{ strcpy(w,mean[s]); j=(3);}
else //未找到,翻译成(unknown)
{ strcpy(w,"(unknown)"}; j=9; }
for(s=0;s<j;s++)
h[k++]=w[s];
if(str[i]=='\0') { (4); break;}
j=0;
}
i++;
}
cout<<h<<endl;
}
};
void main()
{ Dic obj;
obj.add("I","我");
obj.add("am","是");
obj.add("student","学生");
obj.add("a","一个");
obj.trans("(5)");
}
第9题
阅读以下应用说明和Visual Basic程序,根据要求回答问题1问题2。
【说明】
某机动车驾驶员模拟考试系统的“交通禁令标志识别”窗体中,共有1个按钮(CmdTest)、6个标签、 1个包含10个单选按钮的控件数组(OptPicture),如图2-15所示。其中,标签(LblPrompt1)“禁令标志”与标签(LblTest)相对应,标签(LblPrompt2)“图片答案”与标签(LblAnswer)相对应,标签(LblEvaluate)为结果提示。
窗体(Frm001)对象和单选按钮控件数组(OptPicture)对象的部分属性及属性值如表2-15所示。
该程序运行时,单击【测试】按钮(CmdTest),在标签(LblTest)中随机显示一个交通禁令标志名称,用户单击控件数组(OptPicture)相应单选按钮后,程序在标签(LblAnswer)给出用户所击单选按钮对应的交通禁令标志名称,在标签(LblEvaluate)给出正确或错误的提示结果,如图2-15和图2-16所示。
【Visual Basic 程序】
Dim (4) As String
Private Sub cmdTest_Click()
Dim i As Integer
For i = 0 To 9
(5)
Next i
lblPrompt2.Visible = False
lblAnswer.Visible = False
lblEvaluate.Visible = False
i = Int(Rnd * 10)
lblTest.Caption = tname(i)
End Sub
Private Sub Form_Load()
Dim i As Integer
For i = 0 To 9
optPicture(i).Value = False
(6)
lblPrompt2.Visible = False
lblAnswer.Visible = False
lblEvaluate.Visible = False
tname(0)= "禁止向左向右转弯"
tname(1)= "禁止直行和向右转弯道"
tname(2)= "禁止直行和向左转弯"
tname(3)= "禁止驶入"
tname(4)= "禁止掉头"
tname(5)= "禁止车辆长时停放"
tname(6)= "禁止机动车通行"
tname(7)= "禁止非机动车通行"
tname(8)= "禁止超车"
tname(9)= "禁止车辆临时或长时停放"
End Sub
Private Sub optPicture_Click(Index As Integer)
lblPrompt2.Visible = True
lblAnswer.Visible =(7)
lblEvaluate.Visible = True
lblAnswer. Caption=(8)
If (9) Then
lblEvaluate.ForeColor = vbRed
lblEvaluate.Caption = " 恭喜你!回答正确!"
Else
lblEvaluate.ForeColor = vbBlue
lblEvaluate.Caption= "很遗憾,回答错误。"
End If
End Sub
请根据图2-15和图2-16的显示效果和【Visual Basic程序】,将表2-15中窗体对象、单选按钮控件数组对象的(1)~(3)空缺处的属性值填写完整。
第10题
阅读以下函数说明和C代码,将C程序中(1)~(5)空缺处的内容补充完整。
【说明】
对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图6-15所示的最优二叉树,以及相应的结构数组Ht(如表6-14所示,其中数组元素Ht[0]不用)。
结构数组Ht的类型定义如下:
define MAXLEAFNUM 20
struct node{
char ch; /*扫当前节点表示的字符,对于非叶子节点,此域不用*/
Int weight; /*当前节点的权值*/
int parent; /*当前节点的父节点的下标,为0时表示无父节点*/
int lchild, rchild;
/*当前节点的左、右孩子节点的下标,为0时表示无对应的孩子节点*/
)Ht[2*MAXLEAFNUM];
用“0”或“广标识最优二叉树中分支的规则是:从一个节点进入其左(右)孩子节点,就用“0”(或“1”)标识该分支,如图6-15所示。
若用上述规则标识最优二叉树的每条分支后,从根节点开始到叶子节点为止,按经过分支的次序将相应标识依次排列,可得到由“0”、“1”组成的一个序列,称此序列为该叶子节点的前缀编码。例如,图6-15所示的叶子节点a、b、c、d的前缀编码分别是110、0、111、10。
函数void LeafCode(int root,int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子节点,为所有的叶子节点构造前缀编码。其中,形参root为最优二叉树的根节点下标;形参n为叶子节点个数。在函数void LeafCode(int root,int n)构造过程中,将Ht[p].weight域用做被遍历节点的遍历状态标志。
函数void Decode(char *buff,int root)的功能是:将前缀编码序列翻译成叶子节点的字符序列,并输出。其中,形参root为最优二叉树的根节点下标;形参buff指向前缀编码序列。
【函数4.1】
char **HC;
void LeafCode(int root, int n)
{ /*为最优二叉树中的n个叶子节点构造前缀编码,root是树的根节点下标*/
int I,p=root,cdlen=0;
char code[20];
Hc = (char **)malloc((n+1)*sizeof(char *)); /*申请字符指针数组*/
For(i = 1;i<= p;++I)
Ht [i]. weight = 0; /*遍历最优二叉树时用做被遍历节点的状态标志* /
While (p) { /*以非递归方法遍历最优二叉树,求树中每个叶子节点的编码*/
If(Ht[p].weight == 0) { /*向左*/
Ht[p].weight = 1;
If(Ht[p].lchild != 0) {
p = Ht[p].lchild;
code[cdlen++] = '0';
}
else if(Ht[p].rchild == 0) { /*若是叶子节点,则保存其前缀编码*/
Hc[p] = (char *)malloc((cdlen+1)*sizeof(char));
(1);
strcpy (Hc [p],code);
}
}
else if(Ht[p].weight == 1) { /*向右*/
Ht [p].weight = 2;
If(Ht[p].rchild != 0) {
p = Ht [p].rchild;
code[cdlen++] ='1';
}
}
else { /*Ht[p].weight == 2,回退/
Ht [p].weight = 0;
p =(2);
(3); /*退回父节点*/
}
} / *while .结束* /
}
【函数4.2】
void Decode(char *buff,int root)
{ int pre = root,p;
while(*buff != '\0') {
p = root;
&
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!