阅读下列函举说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明4.1】
假设两个队列共享一个循环向量空间(如图1-2所示),其类型Queue2定义如下:
typedef struct {
DateType data [MaxSize];
int front[2],rear[2];
}Queue2;
对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。函数.EnQueue (Queue2*Q,int i,DaleType x)的功能是实现第i个队列的入队操作。
【函数4.1】
int EnQueue(Queue2 * Q, int i, DateType x)
{ /*若第i个队列不满,则元素x入队列,并返回1;否则,返回0*/
if(i<0‖i>1) return 0;
if(Q->rear[i]==Q->front[(1)]
return 0;
Q->data[(2)]=x;
Q->rear[i]=[(3)];
return 1;
}
【说明4.2】
函数BTreeEqual(BinTreeNode*T1,BinTtneNode*T2)的功能是递归法判断两棵二叉树是否相等,若相等则返回1,否则返回0。函数中参数T1和T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同,并且对应结点的值也相同时,才被认为相等。
已知二叉树中的结点类型BinTreeNode定义为:
struct BinTreeNode {
char data;
BinTreeNode * left, * right;
};
其中dau为结点值域,leR和risht分别为指向左、右子女结点的指针域,
【函数4.2】
int BTreeEqual(BinTreeNode * T1, BinTreeNode * T2)
{
if(Ti == NULL && T2 == NULL)return 1 /*若两棵树均为空,则相等*/
else if((4))return 0; /*若一棵为空一棵不为空,则不等*/
else if((5)) return 1; /*若根结点值相等并且左、右子树*/
/*也相等,则两棵树相等,否则不等*/
else return 0;
}
第1题
阅读以下说明和Visual Basic代码,将应填入(n)处的字句写在对应栏内。
[说明]
本程序实现的功能是查看磁盘上的图片及其基本信息。程序运行界面如下图所示,用户只要逐步选择适当的驱动器、目录和图片文件,图片内容随即显示在界面中央,文件的基本信息则呈现于右侧文本框中。用户还可以删除或复制选中的图片文件。
在开发过程中,驱动器列表框名为Drivel,目录列表框名为Dir1,文件列表框名为File1,图片的显示由Image控件对象Image1来实现,文件信息文本框名为Text1,按钮“删除文件”和“复制到…”分别名为CmdDel和CmdCpy。
[Visual Basic代码]
Dim filename As String
Dim fso As New (1), file As file
Private Sub Form_Load()
Set fso = CreateObject("Scripting.FileSystemObject")
Drivel.Drive = "F:"
End Sub
Private Sub Dir1_Change()
File1.path=Dirl.path ’更新文件列表框的路径
End Sub
Private Sub Drive1_Change()
Dir1.path =(2) ’更新目录列表框的路径
End Sub
Private Sub File1_Click()’文件列表框的单击事件响应代码
If Right(Dir1.path, 1) <>"\" Then
filename = Dir1.path & "\" & Filel.filename
Else
filename = Dir1.path & Filel.filename
End If
Image1.Picture =(3)
Set file = fso.GetFile(filename)
Text1. Text = "文件名称:" & file.Name & vbCrLf & _
"文件大小:" & file. Size & "字节" & vbCrLf & _
"文件类型:" & file.Type & vbCrLf & _
"创建日期:" & file. DateCreated & vbCrLf & _
"修改日期:" & file. DateLastModified
End Sub
Private Sub CmdCpy_Chck()’按钮“复制到…”的单击事件响应代码
Dim path As String
path = InputBox("请输入目标路径(含文件名):")
(4)
End Sub
Private Sub CmdDel_Click()’按钮“删除文件”的单击事件响应代码
(5)
End Sub
第2题
阅读下列函数说明和C函数,回答问题1~2,将解答填入栏内。
[说明]
若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。
[程序]
void saddle (int A[ ] [ ], int m, int n)
{ int i,j,min;
for (i=0;i <m;i + + )
{ min: (1);
for (j=1; j<n; j+ +)
if(A[i][j]<min) (2);
for (j=0; j<n; j+ +)
if ((3))
{ p=0;
while (p<m&&(4))p+ +;
if (p > = m)printf ("%d,%d,%d\n",i,j,min);
}
}
}
[问题1] 将函数代码中的(1)~(4)处补充完整
[问题2]在上述代码的执行过程中,若A为矩阵,则调用saddle(A,3,3)后输出是(5)。
第3题
阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。
【说明】
本应用程序是一个乘法计算器,其运行窗口如图2所示。
在该界面中,“被乘数”、“乘数”以及“积”等文字为标签,相应的3个输入输出数据框为文本框,此外还有3个命令按钮。用户在“被乘数”和“乘数”相应的文本框内输入数据,再单击“运算”按钮,便能在“积”对应的文本框中看到相乘的结果;当用户单击“清除”按钮时,就会清除各文本框中的数据;当用户单击“关闭”按钮时就会关闭该窗口并退出应用程序。用户不能在“积”对应的文本框中输入数据。
【属性设置】
各个对象、有关的属性名以及需要修改的属性值设计如下:
【程序】
Private Sub cmdMultiply_Click( )
txt3. Text =Trim(Str$ ((3)) '加法运算获得和数
End Sub
Private Sub (4) (
txt1. Text=" " '空字符串赋值给文本框txt1的内容
txt2. Text=" " '空字符串赋值给文本框txt2的内容
txt3. Text=" " '空字符串赋值给文本框txt3的内容
End Sub
Private Sub cmdClose_Click( )
(5) '退出应用程序
End Sub
第4题
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
【说明】
函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为
typedef struct node {
int key;
struct node * next;
} *LinkedList;
【函数】
int DelA_InsB ( LinkedList La, LinkdeList Lb,int key1,int key2,,int len)
{ LinkedList p,q,s,prep,pres;
int k;
if( ! La->next || ! Lb-> next ||| en <=0)return-1;
p = La -> next;prep = La;
while(p&&p- >key != key1) { /*查找表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 - t; /*表B中不存在键值为key2的结点*/
(4)=q-> next; /*将表A中的len个结点删除*/
q->next=(5);
pres -> next = p; /*将len个结点移至表B */
return 0;
}
第5题
阅读以下算法说明和C程序,根据要求回答问题1和问题2。
【说明】
【算法4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出相应的提示信息,如图1-18所示。
在【算法4-1】中,slack为一整数栈。算法中各函数的说明如表1-11所示。
【算法4-1】
将栈stack置空,置EOF为false
Ch<-nextch();
while(not EOF)
k←kind(ch);
if (k ==(1) ) {
push( (2) );
push( (3) );}
else if( k ==(4) )
if(not empty()){
pop();
pop();)
else{
显示错误信息(缺少对应左括号或右括号):
显示行号row:显示列号col:)
End if
End if
Ch<-nextch();
end while
if(not empty())
显示错误信息(缺少对应左括号或右括号):
While(not empty()){
row<-pop();
col<-pop():
显示行号row:显示列号col;)
End while
End if
为了识别更多种类的括号,对【算法4-1】加以改进后得到【算法4-2】。【算法4-2】能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(charch)的参数及其对应的返回值如表1-12所示。
【算法4-2】
将栈stack置空,置EOF为false
Ch<-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 if
end if
ch <- nextch();)
end while
if(not empty()){
显示错误信息(缺少对应左括号或右括号);
While(not empty()){
Pop();
row <- pop():
col <- pop();
显示行号row;显示列号col;))
end while
end if
请将【算法4-1】和【算法4-2】中,(1)~(7)空缺处的内容补充完整。
第7题
试题五(共15分)
阅读以下说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图5-1所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。
【C++代码】
include <iostream>
include <cmath>
using namespace std;
class GPoint {
private:
double x, y;
public:
void setX(double x) { this->x = x; }
void setY(double y) { this->y = y; }
double getX() { return this->x; }
double getY() { return this->y; }
};
class ComputeDistance {
public:
double distance(GPoint a,GPoint b) {
return sqrt《a.getX() - b.getX())*(a.getX() - b.getX())
+ (a.getY() - b.getY())*(a.getY() - b.getY()));
}
};
int main()
{
int i,j, numberOfPoints=0;
cout<<"输入点的个数:";
cin>>numberOfPoints;
(1) points= neW GPoint[numberOfPoints];//创建保存点坐标的数组
memset(points,0,sizeof(points));
cout <<"输入"<< numberOfPoints<<"个点的坐标:";
for(i=0;i<numberOfPoints; i++){
double tmpx, tmpy;
cin>>tmpx>>tmpy;
points[i].setX(tmpx);
points[i].setY(tmpy);
}
(2) computeDistance= new ComputeDistance();
int p1=0,p2=1;//p1和p2用于表示距离最近的点对在数组中的下标
double shortestDistance= computeDistance->distance(points[p1], points[p2]);
//计算每一对点之间的距离
for(i=0;i<numberOfPoints; i++){
for(j=i+1;j< (3) ;j++){
double tmpDistance=computeDistance-> (4) ;
if ( (5) ) {
p1=i; p2 =j;
shortestDistance= tmpDistance;
}
}
}
cout<<"距离最近的点对是:(";
cout"points[p1].getX()<<","<<points[pl].getY()<<")和(";
cout<<points[p2].getX()<<","<<points[p2].getY()<<")"<<endl;
delete computeDistance;
return 0:
}
第8题
阅读以下说明和流程图,回答问题将解答填入对应栏。
[说明]
本流程图实现采用递归函数来求一个整数数组中从元素0到元素n中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有n的元素的数组的最小值时,只要求将前n-1的元素的最小值与第n个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。
注:int min(int X,int y)为返回两数中最小数的函数。
int minInArray(int a[],int n)为返回数组中最小数的函数。
minA为数组中最小值。
[问题l]
将流程图的(1)~(4)处补充完整。
[问题2]
min()函数的定义为(5)。
第9题
阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。
【说明】
已知头指针分别为La和lb的有序单链表,其数据元素都是按值非递减排列。现要归并La和Lb得到单链表Lc,使得Lc中的元素按值非递减排列。程序流程图如下所示:
第10题
阅读以下说明和流程图,回答问题1至问题3。
[说明]
信息处理过程中经常需要将图片或汉字点阵做旋转处理。一个矩阵以顺时针方向旋转90°后可以形成另一个矩阵,如下图所示:
流程图2-1描述了对n*n矩阵的某种处理。流程图2-2是将矩阵A顺时针旋转90°形成矩阵B的具体算法。
请写出以下3*3单位矩阵沿顺时针方向旋转90°后所形成的矩阵。
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!