填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 该程序从正文文件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={{U}} (1) {{/U}}; if(!ptr) return; ptr->number=hum; ptr->next=NULL; head=insertChain(head,ptr); } {{U}} (2) {{/U}}; 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; {{U}}(3) {{/U}} } if(ptr == head) head=k; else {{U}}(4) {{/U}}; {{U}}(5) {{/U}}; return head; }
填空题[说明] 设一个环上有编号为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) int i,c=0,color:s[start],step=(start>end)?-1:1; for(i=Start;s[i]==color;i+=step) if(step>0 return c; void main() char t,s[120]; int i,k,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;j<len;j++) (4) ; (5) ; printf("在第%d号珠子前面剪开,可以取走%d个珠子.\n",cut,maxc);
填空题1】
void sort(char *s,int num)
{int i,j--num;
char t;
while(j-->1)
for(i=0;i<j;i++)
if(s[i]>s[i+1])
{t=s[i];
s[i]=s[i+1];
s[i+1]=t;
}
void main()
{char *s="CEAedea";
sort(s,5);
printf("%s",s);
}
上述程序的结果是{{U}} (1) {{/U}}
【函数2.2】
void main()
{ union {int ig[6];
Char s[12];} try;
try. ig[0]=0x4542; try.ig[1]=0x2049;
try. ig[2]=0x494a; try.ig[3]=0x474e;
try. ig[4]=0x0a21; try.ig[5]=0x0000;
pintf("%s",try, s);
}
上述程序的结果是{{U}} (2) {{/U}}
【函数2.3】
void main()
{ char *letter[5]= { "ab","efgh","ijk","nmop","st"};
char **p;
int i;
p=letter;
for(i=0;i<4;i++) .
printf("%s",p[i]);
}
上述程序的结果是{{U}} (3) {{/U}}
【函数2.4】
main()
{int i=4,j=6,k=8,*p=
int x,y,z;
x=p==
y=3*-*p/(*q)+7;
z=*(r=
printf("x=%d,y=%d,z=%d",x,y,z);
}
上述程序的结果是{{U}} (4) {{/U}}
【函数2.5】
int a[]={5,4,3,2,1 };
void main()
{int i;
int f=a[0];
int x=2;
for(i=0;i<5;i++)
f+=f*x+a[i];
printf("%d",f);
}
上述程序的结果是{{U}} (5) {{/U}}
填空题[说明] 求树的宽度,所谓宽度是指在二叉树的各层上,具有结点数最多的那一层的结点总数。本算法是按层次遍历二叉树,采用一个队列q,让根结点入队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。 [函数] int Width ( BinTree *T int front=-1, rear=-1; /*队列初始化*/ int flag=0, count=0, p; /*p用于指向树中层的最右边的结点, flag 记录层中结点数的最大值*/ if ( T!=Null) rear++; (1) ; flag=1; p=rear; while ( (2) ) front++; T=q [front]]; if (T->lchild!=Null ) roar+-+; (3) ; count++; if ( T->rchild!=Null ) rear++; q[rear]=T->rchild; (4) ; if (front==p ) // 当前层已遍历完毕 if( (5) ) flag=count; count=0; p=rear, //p 指向下一层最右边的结点 return ( flag );
填空题
阅读以下说明和C函数,将应填入{{U}} (n) {{/U}}处的字句写在答题纸的对应栏内。 [说明]
某单位准备进行一次选举,对指定的n名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,n=8时所形成的文件如下:
01011000 10010100 10011000
11111111 00000000 00111000
其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第i行第j列为1,表示第i张选票上投了第j名候选人1票。函数statistic()的功能是读入选票数据,并统计每位候选者的得票数,函数返回有效选票数。
[C语言函数] int statistic (FILE *fp, int candidate[], int
n) { /*从文件中读入选票数据,n为候选人数量(n<80),
从有效选票中统计每位候选者的得票数并存入candidate[],函数返回有效选票数*/
char str[80]; /*str保存读入的一张选票数据*/
int i, tag=0;/* tag用于判断每张选票是否有效*/ int
q=0;/* q用于计算有效选票数*/ for (i=0;i<n;i++)
candidate[i]=0;
while ({{U}} (1) {{/U}}) {
fgets (str,80,fp); /*读入一张选票数据*/
for (tag=0,i=0; ({{U}} (2)
{{/U}});i++)
if (str[i]=='1') tag++; if
({{U}} (3) {{/U}}) {/*(若是有效选票,则进行统计*/
({{U}} (4) {{/U}});
for (i=0;i<n;i++)
if (str[i]=='1'){{U}} (5) {{/U}};
} } return
q; } /*statistic*/
填空题[说明]以下是一账号和密码输入的检验程序。对输入的账号和密码规定如下所述。(1)账号为不超过6位的数字,密码为4位字符,在本题中,密码假定为“Pass”。(2)密码输入时在屏幕上不显示输入的字符,而以“*”代替。(3)当输入不正确,如账号为非数字字符或密码不正确时,显示有关信息。(4)当输入正确时,关闭密码窗口,显示记事本窗口。按要求完成有关控件的其他属性的设置,编写确定按钮的单击事件过程。相关界面如下:(可能要用到的单词:MultiLlne,ScrollBars,PasswordChar,MaxLength)密码窗口frmPass控件设置如下表所示。控件控件名(Name)标题(Caption)其他属性帐号标签1blNo账号密码标签1blNo密码帐号文本框txtNo无定义密码文本框txtPas无定义确定按钮comOk确定记事本窗口frmNotepad控件设置如下表所示。控件控件名(Name)标题(Caption)其他属性文本框TxtNotepad无定义清除按钮CmdClear清除返回按钮cmdBack返回在密码窗口的属性窗口,对密码文本框设置属性MuniLine为False。[VisualBasic代码]PrivateSubcmdOK_Click()IftxtPas.Text="Pass"ThenLoadfrmNotePadfrmNotePad.ShowfrmPass.HideElseMsgBox"密码错误!",vbExclamation+vbRetryCancel,"重输入密码"txtPas.Text=""txtPas.SetFocus(1)EndSubPrivateSubForm_Load()txtPas.PasswordChar="*"xtNo.MaxLength=6EndSubPrivateSubtxtNoLostFocus(DimiAsInteger,sAsString*1Fori=1To(2)s=Mid(txtNo.Text,i,1)If(3)Or(4)ThenMsgBox"账号有非数字符号!",vbExclamation+vbRetryCancel,"1输入账号"(5)txtNo.SetFocusExitSubEndIfNextiEndSub
填空题阅读以下函数说明和C语言函数,将应填入 (n) 的字句写在答题纸的对应栏内。 [说明1] 函数int fun1(int m, int n)的功能是:计算并返回正整数m和n的最大公约数。 [函数1] int fun1(int m, int n) while ( (1) ) if (m>n) m=m-n; else n=n-m; (2) ; [说明2] 函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符形成一个十进制整数(最多8位)。 例如,若字符串str的值为“f3g8d5.ji2e3p12fkp”,则函数返回值为3852312。 [函数2] long fun2(char *str) int i=0; long k=0; char *p=str; while (*p!='\0' ++i; (5) ; return k;
填空题[说明] 假设银行整存整取存款不同期限的月息利率分别为:0.63%(1年),0.66%(2年),0.69%(3年),0.75%(5年),0.84%(8年),其中,利息=本金*月息利率*12*存款年限。 现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。 设2000元存20年,其中1年存i1次,2年存i2次,以此类推,则到期时存款人应得到的本利合计为: 2000*(1+rate1)i1*(1+rate2)i2*(l+rate3)i3*(l+rate5)i5*(l+rate8)i8 其中,rateN为对应存款年限的利率。年限还有如下限制条件: 0≤i8≤2 0≤i5≤(20-8*i8)/5 0≤13≤(20-8*i8-5*i5)/3 0≤i2≤(20-8*i8-5*i5-3*i3)/2 0≤i1=20-8*i8-5*i5-3*i3-2*i2 用穷举法穷举出所有的i8、i5、i3、i2、i1,代入求本利的公式计算出最大值。 [函数] #include<stdio.h> #include<math. h> void main() int i8, i5, i3, i2, i1, n8, n5, n3, n2, n1; float max=0, term; clrscr(); for (i8=0;i8<3;i8++) /*穷举所有可能的存款方式*/ for (i5=0; i5<= (20-8*i8)/5;i5++) for (i3=0; (1) ; i3++) for (i2=0; (2) ; i2++) i1=20-8 *18-5 *i5-3 *i3-2 *12: (3) ; /*计算到期时的本利合计*/ if( (4) ) (5) ; n1=i1; n2 =i2; n3 =i3; n5=i5; n8 =i8; printf("For maxinum profit, he should so save his money in a bank:/n"); printf(" made fixed deposit for 8 year: %d times /n",n8); printf(" made fixed deposit for 5 year: %d times/n",n5); printf(" made fixed deposit for 3 year: %d times/n",n3); printf(" made fixed deposit for 2 year: %d times/n",n2); printf(" made fixed deposit for 1 year: %d timesYn",n1); printf(" Toa1: %.2f/n", max); /*输出存款方式*/ puts ("/n Press any key to quit...”); getch();
填空题[说明]已知递推数列:a(1)=1,a(2s)=a(s),a(2s+1)=a(s)+a(s+1)(s为正整数)。试求该数列的第n项与前n项中哪些项最大?最大值为多少?算法分析:该数列序号分为奇数或偶数两种情况做不同递推,所得数列呈大小有规律的摆动。设置a数组,赋初值a(1)=1。根据递推式,在循环中分项序号s(2~n)为奇数或偶数作不同递推:每得一项a(s),即与最大值max作比较,如果a(s)>max,则max=a(i)。最后,在所有项中搜索最大项(因最大项可能多于一项),并打印最大值max。[问题]将流程图中的(1)~(5)处补充完整。注:流程图中(1)循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。[流程图]
填空题[说明] 编写一个Applet程序,接受HTML文件传递的整数参数,根据该参数指定Applet中文本框的长度。编写对应的HTML文件运行这个Applet。[Java 代码]import java. applet.*;import java. awt.*;public class chuangdics extends (1) TextField tf=new TextField (); int tfLength=0; public void init() try tfLength=Integer. parseInt( (2) ("length")); tf. setColumns (tfLength); add (tf); catch (NumberFormatException nfe) tf. (3) ("HTML 文件传人的参数格式错误。"); add(tf); [HTML 代码]<html><head> <title> (4) </title></head><body> <hr><applet code=chuangdics width=700 height=150><param name=length value=20> (5) <hr></body></htmI>
填空题[说明] 编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。 [Java 代码] import java. io.* ; public class abc public static void main ( (1) ) int i, n=10, max=0, min=0, temp=0; try BufferedReader br = new BufferedReader ( new InputStreamReader ( System.in ) ); max = min =Integer. parselnt ( br. readLine ( ) ); . (2) ( IOExccption e ) ; for ( i=2 ; i<=n ; i++ ) try BufferedReader br = new (3) ( new InputStreamReader ( System. in ) ); temp = (4) ( br. readLine ( )); if (temp>max ) max=temp; if (temp<min) (5) catch (IOException e ) ; System.out.println ( "max="+max+"/nmin="+min );
填空题[说明]下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。注:返回值用pos表示。[问题]将流程图的(1)~(5)处补充完整。
填空题[函数2.1说明] 将一个正整数分解质因数。例如:输入90,打印出90=2×3×3×5。 [函数2.1] fun 1 ( int n ) int i; for ( i=2;i<=n; i++) while (( (1) ) if (n %i==0 ) printf ( "%d*",i ); (2) else break; printf ( "%d",n ) ; [函数2.2说明] 下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第3、第4、第5只猴子都是这样做的,问海滩上原来最少有多少个桃子? [函数2.2] main ( ) int i, m, j, k, count; for ( i=4;i<10000;i+=4 ) count=0; (3) ; for ( k=0;k<5;k++ ) (4) ; i=j; if ( j%4==0 ) (5) ; else break; i=m; if ( count==4 ) printf ( "%d/n", count) ; break;
填空题阅读以下说明和C++程序,将应填入 (n) 处的字句写在对应栏内。 [说明] 下面程序输出一个矩形面积,以及矩形区域上的假想的作物产量。 [C++程序] #include <iostream.h> class crop_assessment int actual_crop; int ideal_crop; public: void set(int in_actual,int in_ideal) actual crop=in_actual; ideal_crop=in_ideal; int get_actual_crop(void) (1) ; int get_ideal_crop(void) (2) ;) ; Class lot_size int length; int width; (3) crop; public: void set(int 1,int w,int a,int i) length=1; width=w; crop.set(a,i); int get_area(void)return length*width; int get_data(void)return (4) ; int get_data2(void)freturn (5) ; int main() Los_size small,medium; small.set(5,5,5,25); medium.set(10,10,10,50); cout<<"For a small lot of area"<<smallget_area()<<“/n”; cout<<"the actual crops are$"<<small.get_data2()<<"/n"; cout<<"and ideal crops are$”<<small.get_data()<<"/n"; cout<<"For a medium Lot of area"<<medium.get area()<<:/n”; cout<<"the actual crops are$"<<medium.get_data2()<<"/n"; cout<<"and ideal crops are$"<<medium.get_data()<<"/n"; return 0;
填空题【说明】
本题给出四个函数,它们的功能分别是:
1.int push(PNODE*top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。
2.int pop(PNODE*top,int*e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。
3.int enQueue(PNODE*tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。
4.int deQueue(PNODE*tail,int*e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。
以上四个函数中,返回值为。表示操作成功,返回值为-1表示操作失败。
栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:
typedef struct node {
int value;
struct node * next;
} NODE, * PNODE;
【函数1】
int push(PNOOE * top,int e)
{
PNODE p = (PNODE) malloc (sizeof (NODE));
if (! p) return-1;
p->value=e;
{{U}} (1) {{/U}};.
*top=p;
return 0;
}
【函数2】
int pop (PNODE * top,int * e)
{
PNODE p = * top;
if(p == NULL) return-1;
* e = p->value;
{{U}} (2) {{/U}};
free(p);
return 0;
}
【函数3】
int enQueue (PNODE * tail,int e)
{ PNODE p,t;
t= *tail;
p = (PNODE) malloc(sizeof(NODE));
if(!p) return-1;
p->value=e;
p->next=t->next;
{{U}}(3) {{/U}};
* tail = p;
return 0;
}
【函数4】
int deQueue(PNODE * tail,int * e)
{ PNODE p,q;
if(( * tail)->next == * tail) return-1;
p= (* tail)->next;
q = p ->next;
* e =q ->value;
{{U}} (4) {{/U}}=q->next;
if(,tail==q){{U}} (5) {{/U}};
free(q);
return 0;
}
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明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是“完全数”。
[C函数1]
int factors(int n)
{ int i,S;
for(i=l,s=0;i<=n/2;i++)
if(n%i==O) {{U}}(1) {{/U}};
if({{U}} (2) {{/U}})return 0;
rerurn -1;
}
[说明2]
函数int maxint(int a[],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。
[C函数2]
int maxint(int a[],int k)
{ int t;
if({{U}} (3) {{/U}})return {{U}}(4) {{/U}};
t=maxint(a+1, {{U}}(5) {{/U}})j
return(a[0]t) ? a[0] :t;
}
填空题【说明】该应用程序是用来求一元二次方程和一元一次方程的,其运行如图2所示。当用户在对应方程系数的文本框(txt1、txt2和txt3)中输入数值后,单击“解方程”按钮(cmdcalculate),解方程并将解显示在Ⅺ和K2对应的文本框中(txt4和txt5)中。若是一个一元一次方程,只显示在X1对应的文本框中,若无解则弹出对话框。下面的代码是“解方程”按钮的Click事件的代码。【程序代码】PrivateSub{{U}}(1){{/U}}()a=Val(Txt1.Text):b=Val(Txt2.Text);c=Val(Txt3.Text)Ifa=0ThenIfb=0ThenMsgBox"方程无解!",vbOKOnly,"提示"Txt4.Text=""Txt5.Text=""ElseTxt4.Text={{U}}(2){{/U}}Txt5.Text=""EndIfElsedelta={{U}}(3){{/U}}If{{U}}(4){{/U}}ThenMsgBox"方程无解!",vbOKOnly,"提示"Txt4.Text=""Txt5.Text=""ElseTxt4.Text=Str$(((-1)*b+Sqr(delta))/(2*a))Txt5.Text={{U}}(5){{/U}}EndIfEndIfEndSub
填空题[说明]下面的流程图用来说明如何在数组中的指定位置插入一个数。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述;SIZE定义位数组的大小。[问题]将流程图的(1)~(5)处补充完整。
填空题【说明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[{{U}} (1) {{/U}}]
return 0;
Q->data[{{U}} (2) {{/U}}]=x;
Q->rear[i]=[{{U}} (3) {{/U}}];
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 /*若一棵为空一棵不为空,则不等*/
else if({{U}} (5) {{/U}}) return 1; /*若根结点值相等并且左、右子树*/
/*也相等,则两棵树相等,否则不等*/
else return 0;
}
填空题【说明】
在窗体上画一个名称为Combo1的组合框,画两个名称分别Labe11、Labe12及Caption属性分别为“城市名称”和空白的标签。程序运行后,当在组合框中输入一个新项后按回车键 (ASCII码为13)时,如果输入的项在组合框的列表中不存在,则自动添加到组合框的列表中,并在Labe12中给出提示“已成功添加输入项”;如果存在,则在Labe12中给出提示“输入项已在组合框中”。
【程序】
Private Sub Combo1{{U}} (1) {{/U}}(KeyAscii As Integer)
If KeyAscii={{U}} (2) {{/U}}Then
For i=0 To{{U}} (3) {{/U}}
If Combo1. Text={{U}} (4) {{/U}}Then
Labe12. Caption ="输入项已在组合框中"
Exit Sub
End If
Next i
Label2. Caption ="已成功添加输入项"
Combo1.{{U}} (5) {{/U}}Combo1.Text
End If
End Sub