阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【说明】
本程序利用非递归算法实现二叉树后序遍历。
【函数】
include<stdio.h>
include<stdlib.h>
typedef struct node{/*二叉树的结点数据结构类型*/
char data;
struct node *left;
struct node *right;
}BTREE;
void SortTreelnsert(BTREE **tree, BTREE *s)
{
if(*tree==NULL)*tree=s;
else
if(s->data<(*tree)->data)
SortTreelnsert((1),s);
else if(s->data>=(*tree)->data)
SortTreelnsert((2),s);
}
void TraversalTree(BTREE *tree)
{
BTREE *stack[1 000],*p;
int tag[1000],top=0;
p=tree;
do{
while(p !=NULL)
{
stack[++top]=p;
(3);
tag[top]=0; /*标记栈顶结点的左子树已进行过后序遍历*/
}
while(top>0&&(4))/*栈顶结点的右子树是否被后序遍历过*/
{
p=stack[top--];
putchar(p->data);
}
if(top>0)/*对栈顶结点的右子树进行后序遍历*/
{
(5);
tag[top]=1;
}
}while(top>0);
}
void PrintSortTree(BTREE *tree)
{
if(tree !=NULL)
{
printSortTree(tree->left);
putchar(tree->data);
pdntSortTree(tree->right);
}
}
main()
{
BTREE *root=NULL, *node;
char ch;
ch=getchar();
while(ch !='')
{
node=(BTREE*)malloc(sizeof(BTREE));
node->data=ch;
node->left=node->right=NULL;
SortTreelnsert(&root, node);
ch=getchar();
}
PrintSortTree(root);
putchar('\n');
TraversalTree(root);
}
第1题
阅读以下说明和Java代码,将解答写入对应栏内。
【说明】
下面的程序的功能是利用实现Runnable接口的方法来创建线程,并利用它来执行响应的一些操作。最后使得m的执行结果:100,如图3。
注意:请勿改动main()主方法和其他已有的语句内容,仅在下划线处填入适当的语句。
class ClassName (1) Runnable {
int n;
(2) {
try{
Thread. sleep (2000);
n=100;
}catch( (3) e) {}
}
public static void main(String[ ]args) {
try{
ClassName a = new ClassName( );
(4)
threadl. (5) ();
threadl, join( );
int m=a.n;
System. out. println("m=" + m);
}catch( (3) e){}
}
}
第2题
阅读以下说明和C语言函数,将应填入(n)。
【说明】
已知包含头结点(不存储元素)的单链表的元素已经按照非递减方式排序,函数 compress(NODE*head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。
处理过程中,当元素重复出现时,保留元素第一次出现所在的结点。
图2-1(a)、(b)是经函数compress()处理前后的链表结构示例图。
链表的结点类型定义如下:
typedef struct Node{
int data;
struct Node *next;
}NODE;
【C语言函数】
void compress(NODE *head)
{ NODE *ptr,*q;
ptr= (1); /*取得第一个元素结点的指针*/
while( (2)&& ptr->next) {
q=ptr->next;
while(q&&(3)) { /*处理重复元素*/
(4)q->next;
free(q);
q=ptr->next;
}
(5) ptr->next;
}/*end of while */
}/*end of compress*/
第3题
阅读以下说明和C语言函数,将应填入(n)处。
【说明】
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。
函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)表示year是(或不是)闰年。
【C语言函数】
int count_5_13(int year)
{
int date; /*date为0表示星期日,为1~6分别表示星期一至星期六*/
long days=0; /*days记录天数*/
int m,y,c=0; /*c用于表示黑色星期五的个数*/
if (year<1900) return-1;
/*计算从1900年1月1日起至给定年份year的1月13日间隔的天数*/
days=12;
for (y= 1900; y < year; y++) {
days +=365;
if (isLeapYear(y))(1);
}
date=((days%7) +1) %7; /*算出给定年份year的1月13日是星期几*/
c=((2)) ?1:0;
for(m=1;(3);m++) {
switch (m) {
case 1:case 3: case 5: case 7:case 8:case 10:case 12:
days=31; break;
case 4: case 6: case 9: case 11:
days=30; break;
case 2:days=28;
if((4)) days=29;
break;
}/*end of switch*/
date=((days%7)+ (5) )%7;
if (date==5) c++;
} /*end of for*/
return c;
}
第4题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表示,n粒珠子的颜色由输入的字符串表示)。从环上的某两粒珠子间剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。
本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如:10粒珠子颜色对应字符串为“aaabbbadcc”,在0号珠子前剪开,序列为aaabbbadcc,从左端取走3粒a色珠子,从右端取走2粒c色珠子,共取走5粒珠子。若在3号珠子前剪开,即bbbadccaaa,共取走6粒珠子。
[C函数]
int count(char*s,int start,int end)
{inti,c=0,color=s[start],step=(start>end)?-1:1;
for(i=start;s[i]==color;i+=step){
if(step>0 && i>end || (1) ) break;
(2) ;
}
return c;
}
void main()
{ char t,s[120];
int i,j,C,len,maxc,cut=0;
printf("请输入环上代表不同颜色珠子字符串:");
scanf("%s",s );
len=strlen(s);
for(i=maxc=0;i<len;i++){ /*尝试不同的剪开方式*/
c=count(s,0,len-1);
if(c<len) C+=count( (3));
if(c>maxc){cut=i;maxc=c; )
/*数组s的元素循环向左移动一个位置*/
t=s[0];
for(j=1;i<len;i++) (4);
(5);
}
printf("在第%d号珠子前面剪开,可以取走%d个珠子.\n",cut,maxc);
}
第5题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明1]
本程序输入一字符串,并将其中的大写字母变成小写字母。
[C函数1]
include<stdio.h>
void main()
{ int i=0;
char s[120];
printf("Enter a string.\n");
scanf("%s",s);
while( (1) ){
if( (2) )
s[i]=s[i]-'A'+'a';
i++;
}
printf("%s\n",S);
}
[说明2]
本程序用二分法,在已按字母次序从小到大排序的字符数组list[len]中,查找字符c,若c在数组中,函数返回字符c在数组中的下标,否则返回-1。
[C函数2]
int search(char list[],char c,int len)
( intlow=0,high=len-1,k;
while( (3) );
k=(10w+high)/2;
if( (4) ) return k;
else if( (5) )high=k-1;
else low=k+1;
return -1;
}
第6题
阅读以下说明和流程图,回答问题1和问题2。
【说明】
设8位二进制代码B0B1…B7中的最高位B0为奇偶校验位。对于任何给定的代码
B1B2…B7,可按下式计算偶校验位:
其中,“”表示“异或”运算。
下面的流程图描述了计算偶校验位的过程。
【流程图】
注:流程图中,循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。
将流程图中的(1)~(4)处补充完整。
第7题
内。
【应用说明】
某应用的登录界面如下:
登录界面中的文本框txtUserID和txtPassword分别用于接受用户输入的用户名和口令,命令按钮为“确定(cmdOk)”和“取消(cmdCancel)”。ADO数据控件Adodc1与数据库EmployeeData连接。在EmployeeData中,表“Users”的字段“UserID”和“Pswd”分别记录了所有的合法用户名和口令。
在登录界面中,输入正确的用户名和口令并单击“确定”按钮后,就会打开应用程序的主窗口fxmApp。用户名或密码输入错误时,给出提示信息并返回登录界面。
【Visual Basic程序代码】
Private Sub cmdOK Click()
Adodcl.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\data\EmployeeData.mdb;Persist Security Info=False"
Adodcl.RecordSource = "select *(1)"
Adodcl.Refresh
Do
usrname =(2)
pwd = Adodc1.Recordset("Pswd")
Adodc1.Recordset.MoveNext
Loop Until (usrname =(3)) Or (Adodc1.Recordset.EOF)
If usrname <> txtUserID.Text Then
MsgBox "无效的用户ID, 请重新输入!", , "提示信息"
Else
If (4)Then
MsgBox "欢迎进入系统主界面!", , "提示信息"
Unload me
(5)
Else
MsgBox "无效的用户密码, 请重新输入!", , "提示信息"
End If
End If
End Sub
第8题
阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
java.util库中提供了Vector模板类,可作为动态数组使用,并可容纳任意数据类型。该类的部分方法说明如下表所示:
【Java代码】
import (1);
public class JavaMain {
static private final int (2)= 6;
public static void main(String[] args){
Vector<Integer> theVector = new Vector< (3) >();
// 初始化 theVector, 将theVector的元素设置为0至5
for (int cEachItem = 0; cEachItem < ARRAY_SIZE; cEachItem++)
theVector.add((4));
showVector(theVector); // 依次输出theVector中的元素
theVector.removeElementAt(3);
showVector(theVector);
}
public static void showVector(Vector<Integer> theVector
if (theVector.isEmpty()) {
System.out.println("theVectcr is empty.");
return;
}
for (int loop = 0; loop < theVector.size(); loop++)
System.out.print(theVector.get(loop));
System.out.print(", ");
}
System.out.println();
}
}
该程序运行后的输出结果为:
0,1,2,3,4,5
(5)
第9题
阅读以下应用说明、属性设置以及Visual Basic程序代码,将解答写在对应栏内。
【应用说明】
本应用运行时,由用户输入一个正整数n后自动产生n个正整数,然后按照用户的指定要求对该组数进行处理。该应用的运行界面如下图所示:
1.窗体中有两个文本框。(txtSrc,txtObj)、两个标签(lblSrc,lblObj)、三个命令按钮(cmdGendat,cmdProc,cmdQuit)和一个弹出式菜单(procMenu,初始时不可见)。
2.文本框txtSrc(由标签lblSrc提示)用于显示产生的数据,文本框txtObj(由标签lblObj提示)用于显示处理结果,要求每行显示一个整数。
3.程序启动时,命令按钮cmdProc(运算要求)不可用。单击命令按钮cmdGendat(产生数据)后,提示用户输入一个n的值并生成n个正整数存入数组元素a(1)~a(n),然后将数据逐行显示在txtSrc中,并设置命令按钮cmdProc可用。
4.单击命令按钮cmdProc(运算要求)后弹出菜单。选择菜单项并单击后,进行相应处理并将结果显示在txtObj中,同时将lblObj的标题改为该菜单项表示的处理命令。
弹出式菜单“运算要求”的结构如下表所示:
一个整数序列的中位数是指对该序列进行非递减(增)排列后最中间位置上的元素。若序列长度为偶数,则取中间两个元素的平均值为其中位数。
【属性设置】
为实现单击命令按钮cmdProc后弹出“运算要求”菜单(procMenu),设计时需将 procMenu的(1)属性设置成false。
供(1)选择的属性:Default Enabled ScaleMode Style Visible
【Visual Basic程序代码】
Dim a() AS Integer, n As Integer
Private Sub Form_Load()
txtSrc.Text = "": txtObj.Text = "": (2) = False
End Sub
Private Sub cmdGendat_Click () '生成正整数序列并存入数组a
On Error GoTo Error handler
n = InputBox$ ("请输入数组元素个数:", "输入序列长度")
If (n < 1) Then
MsgBox "输入数据错误!", vbOKOnly, "提示:"
GoTo Error handler:
End If
ReDim a(n) As Integer
s = ""
For i = 1 To n '将生成的正整数存入a(1)~a(n)中
a(i) = Int(Rnd * 10000) : s = s & Str$(a(i)) & vbCrLf
Next
txtSrc.Text = s
(3) '设置运算要求命令按钮可用
Error handler:
End Sub
Private Sub cmdProc_Click()
PopupMenu procMenu
End Sub
Private Sub MidNum_Click() '求中位数
lblObj.Caption = MidNum.Caption & ":"
For i = 1 To round((n + 1)/2> '用选择排序法对数组a进行部分排序
a(0) = a(i):k = i 'a(0)用作临时变量,暂存第i次选出的最小元素
For j = i + 1 To n
If a(j) < a(0) Then
a(0)= a(j): k =(4)
End If
Next
If k <> i Then
a(k) = a(i): a(i) = a(0)
End If
Next
If n / 2 - n \ 2 > 0 Then 'n为奇数时,取中间一个数
txtObj.Text - Str$(a((5))
Else 'n为偶数时,取中间两个数的平均值
txtobj.Text = Str$(Int((a(n \ 2) + a(n \ 2 + 1)) / 2))
End If
End Sub
'其他代码略
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!