填空题【说明2.1】
以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。
【函数2.1】
void fun1 (int a[])
{ int i,j,k,r,x,m;
for(i=2;i<=n;i++)
{ {{U}} (1) {{/U}};
k=1;r=i-1;
while(k<=r)
{ m=(k+r)/2;
if(x<a[m])r=m-1;
else{{U}} (2) {{/U}};
}
for(j=i-1;j>=k;j--)
a[j+l]=a[j];
{{U}} (3) {{/U}};
}
}
【说明2.2】
以下程序可以把从键盘上输入的十进制数(long型)以二~十六进制形式输出。
【程序2.2】
#include<stdio.h>
main()
{ charb[16]={'0','l','2','3 ,4,'5','6','7','8','9','A','B','C','D','E','F'};
int c[64],d,i=0,base;
long n;
printf("enter a number:/n");
scanf("%1d",
printf("enter new basc:/n");
scanf("%d",
do
{ c[i]={{U}} (4) {{/U}};
i++; n=n/base;
} while(n!=0);
printf("transmite new base:/n");
for(--i;i>=0;--i)
{ d=c[i];
printf("%c",{{U}} (5) {{/U}});
}
}
填空题阅读以下说明和流程图回答问题,将解答填入对应栏。[说明]“直接插入法”排序是一种N2运算量的例程,只能用在N较小的时候,其方法是:挑出第二个数将它按与第一个数大小的顺序插入,然后挑出第三个数将它按大小顺序插入到前两个数中,如此下去,一直到最后一个也插入。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述。[问题]将流程图的(1)~(5)处补充完整。
填空题[说明]如图所示的一圆圈上分布6个环,请在每个环中填一个数字,使得从任一环开始按顺时针所得的六位数与按逆时针所得的6位数都为素数。[函数]main(){inti,j,a,b,k;longm,m1,n,t,u,v;for(n=100001;n<999999;n+2)/*n穷举所有6位奇数*/{a=0;{{U}}(1){{/U}};/*设m为一个顺转6位数*/for(i=1;i<=6;i++){t=-m/1000000;{{U}}(2){{/U}};for(v=u,m1=0,k=1;k<=5;k++){b=v%10;v=v/10;m1=m1*m1*10+b;}{{U}}(3){{/U}};/*m1为相应的逆转6位数*//*m为顺圈数,m1为逆圈数*/for(j=2;j<=999;j++)if(m%j==0||.{{U}}(4){{/U}})/*判别m,m1是否为素数*/{a=1;break;}{{U}}(5){{/U}};/*原m转一环得新顺转数m*//*原m转一环得新顺圈数m*/if(a==1)break;}if(a==0){prinff("%1d/n",n);break;}}}
填空题阅读以下说明和流程图,回答问题将解答填入对应栏。
[说明]
本流程图实现采用递归函数来求一个整数数组中从元素0到元素n中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有n的元素的数组的最小值时,只要求将前n-1的元素的最小值与第n个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。
注:int min(int X,int y)为返回两数中最小数的函数。
int minInArray(int a[],int n)为返回数组中最小数的函数。
minA为数组中最小值。
[问题l]
将流程图的(1)~(4)处补充完整。
[问题2]
min()函数的定义为{{U}} (5) {{/U}}。
填空题从下列2道试题(试题5至试题6)中任选1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。阅读下列说明、图和C++代码,将应填入{{U}}(n){{/U}}处的字句写在答题纸的对应栏内。[说明]已知对某载客车辆(Car)进行类建模,如图5-1所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。[C++代码]constint{{U}}(1){{/U}}=7;//定义最多载客数constintMAXWHEELS=5;//定义最多轮胎数classBody{//此处代码省略};//车身类classPassenger{//此处代码省略};//乘客类classWheel{//此处代码省略};//车轮类classDriver{//司机类public:stringname;//表示第几路公交车司机Driver(stringdriverName):name({{U}}(2){{/U}}){};//构造函数};classEngine{//引擎类public:stringengineNo;//引擎编号Engine(stringengineNo){{{U}}(3){{/U}}->engineNo=engineNo;}//构造函数};classCar{//汽车类protected:Engine*engine;Driver*driver;Bodybody;Wheel*wheels[MAX_HEELS];Passenger*passengers[MAX_PASSENGERS];public:Car(Driver*driver){//构造函数this->driver=driver;engine=newEngine("TX6536型号引擎");intindex;for(index=0;index<MAX_HEELS;index++){wheels[index]=newWheel();}for(index=0;index<MAX_PASSENGERS;index++){passengers[index]=NULL;}}virtual~Car(){//析构函数for(intindex=0;index<MAX_WHEELS;index++)deletewheels[index];delete{{U}}(4){{/U}};}intgetPassengerNumber(){//获取车上乘客数量//此处代码省略}voidgetOnPassenger(Passenger*aPassenger){//乘客上车//此处代码省略}voidrun(){//开车if(driver==NULL){cout<<"司机尚未上车!";return;}//此处代码省略});voidmain(){Driverdriver("第五路公交车司机");Carcar({{U}}(5){{/U}});Passengerpassengers[MAX_PASSENGERS];for(intindex=0;index<MAXPASSENGERS;index++)//乘客上车处理car.getOnPassenger(car.run();}
填空题1说明] 函数int circle(int n,int d)判定正整数n的d进制表示形式是否是回文数。 [函数2.1] int circle(int n,int d) int s=0,m=n; while (m) (1) ; m/=d; return (2) ; [函数2.2说明] 函数int trans(unsigned n,int d,char s[])将一个无符号整数转换为任意d进制数(2≤d≤16)。 [函数2.2] #define M sizeof(unsigned int)*8 int trans (unsigned n,int d,char s[]) static char digits[]="0123 456789ABCDEF"; char buf [M+1]; int j,i=M; if (d<2 ||d>16) s[0]='/0'; return 0; (3) ; do (4) ; n/=d; while (n) ; for( (5) ); (s(j)=buf[j]!='/0';j++); return j;
填空题[说明]一个数如果恰好等于它的因子之和,这个数就是“完数”,如6=1+2+3,下面流程图完成寻找1000以内的完数,并将其因子存放在k[n]中,最后打印结果。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述。[问题]将流程图的(1)~(5)处补充完整。
填空题[函数2.1说明] 函数void sort(int arry[],int n)的功能是对数组a中的arry[0]~arry[n-1]这n个元素进行排序。排序过程如下:第一趟对所有的偶数下标x,比较arr[x]和arry [x+1],若arry[x]>arry[x+1],则将两者交换; 第二趟对所有的奇数下标y,比较arry[y]和arry[y+1],若arry[y]>arry[y+1],则将两者交换; 第三趟对偶数下标,第四趟对奇数下标,……,依次类推,直至整个数组元素有序排列为止。 [函数2.1] void sort (int arry[],int n) int i,j,tag=1; for(j=0; j<n; j++) for(i= (1) ;i<n-1; (2) ) if (arry [i] >arry [i+1]) t=arry [i] ; arry [il =arry [i+1] ; arry [i+1] =t ; tag=0 ; tag++; if( (3) )break; [函数2.2说明] 这是一棵二叉树排序查找元素的程序,查找的方法是:首先与树的根结点的元素进行比较,若相等则找到,返回此结点的地址; 若要查找的元素小于根结点的元素值,则指针指向此结点的左子树,继续查找; 若要查找的元素大于根结点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。本题使用递归方法实现。 [函数2.2] typedef struct node int data; struct node *left; struct node *right; NODE; NODE *SearchSortTree(NODE *tree,int e) if (tree ! =NULL) if (tree->data<e) (4) ; else if(tree->data>e) (5) ; else return tree; return tree;
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明1]
L为一个带头结点的循环链表。函数LinkList deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于C的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。
[C函数1]
LinkList deletenode(LinkList L,int c)
{LinkList Lc,P,pre;
pre=L;
p={{U}} (1) {{/U}};
Lc=(LinkList)malloc(sizeof(Listnode));
Lc->next=Lc;
while(P!=L)
if(p->data>C){
{{U}} (2) {{/U}};
{{U}} (3) {{/U}};
Lc->next=p;
p=pre->next;
}
else{
pre=p;
p=pre->next;
}
return Lc;
}
[说明2]
递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成进制数,并打印。
[C函数2]
dec to k 2(int n,int k)
{ if(n!=O){
dec to k 2({{U}} (4) {{/U}},k);
printf("%d", {{U}}(5) {{/U}});
}
}
填空题阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明] 已知r[1...n]是n个记录的递增有序表,用折半查找法查找关键字为k的记录。若查找失败,则输出“failure",函数返回值为0;否则输出“success”,函数返回值为该记录的序号值。 [C函数] int binary search(struct recordtype r[],int n,keytype k) intmid,low=1,hig=n; while(low<=hig) mid= (1) ; if(k<r[mid].key) (2) ; else if(k==r[mid].key) printf("succesS/n"); (3) ; else (4) ; printf("failure/n"); (5) ;
填空题[说明] 函数diff的功能是:根据两个由整数(都大于-32768)按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求L3中的所有整数都是L1并且不是L2中的整数,还要求L3中的所有整数都两两不等。 [函数] #include <malloc.h> typedef struct node int d; struct node *next Node; void diff (Node *A, Node *B, Node **r) int lastnum; Node *p; * r=NULL ; if (!A) return; while( (1) ) if (A->d lastnum=A->d; p=(Node*) malloc (sizeof (Node)) ; p->d=lastnum; p->next=*r; (2) ; do A=A->next ; while( (3) ); else if (A->d> B->d) B=B->next ; else (4) ; lastnum=A->d; while (A&&A->d==last num) A=A->next ; while (A) lastnum=A->d; p=(Node*) malloc (sizeof (Node)) ; p->d=lastnum; (5) ; *r=p; while(A&&A->d==lastnum) A=A->next;
填空题[说明] 已知一棵二叉树用二叉链表存储,t指向根节点,P指向树中任一节点。下列算法为输出从t到P之问路径上的节点。 [C程序] #define MaxSize 1000 typedef struct node TelemType data ; struct node *ichiid,*rchiid; BiNode,*BiTree; void Path(BiTree t,BiNode *P) BiTree *stack[Maxsize],*stackl[Maxsize],*q; int tag[Maxsize],top=0,topl; q=t; /*通过先序遍历发现P*/ dowhile(q!=NULL &&q!=p) /*扫描左孩子,_日.相应的节点不为P*/ (1) ; stack[top]=q; tag[top]=0; (2) ; if(top>0) if(stack[top]=P) break; /*找到P,栈底到栈顶为t到P*/ if(tag[top]==1)top--; else q=stack[top]; q=q->rchiid; tag[top]=1; (3) ; top--;topl=0; while(top>0) q=stack[top]; /*反向打印准备*/ topl++; (4) ; top--; while( (5) ) /*打印栈的内容*/ q=stackl[topl]j printf(q->data); topl--;
填空题[说明] 这个是一个链接存储线性表的直接插入排序函数。把未排序序列中的第一个结点插到已排序序列中。排序完毕,链表中的结点按结点值由小到大链接。 [函数] typedef struct node char data; struct node *link; NODE; NODE *insert_sort (NODE *h) NODE *t,*s,*u,*v; s=h->link; h->link=NULL: while(s!=NULL) for(t=s,v=h;v!=NULL && V->data<t->data; (1) , (2) ); s=s->link; if(V==h) (3) ; else (4) ; (5) ; return h;
填空题[说明] 本程序实现对指定文件内的单词进行计数。其中使用二叉树结构来保存已经读入的不同单词,并对相同单词出现的次数进行计数。此二叉树的左孩子结点的字符串值小于父结点的字符串值,右孩子结点的字符串值大于父结点的字符串值。函数getword(char *filename,char*word)是从指定的文件中得到单词。char* strdup(char* s)是复制s所指向的字符串,并返回复制字符串的地址。 [函数] #include <stdio. h> #include<ctype. h> #include <string.h> #define MAXWORD 100 struct node char *word; int count; struct node *left; struct node *right; struct node *addtree(struct node *p,char *w) int cond; if (p==NULL) /*向树中插入结点*/ p=(struct node*) malloc(sizeof(struct node)); p->word=strdup (w); p->count=1; (1) ; else if((cond=strcmp (w,p->word))==0) (2) ; else if (cond<0) p->left= (3) ; else p->right= (4) ; return p; main() struct node *root; char word [MAXWORD]; root=NULL; filename="example .dat"; while getword(filename,word)! =EOF root= (5) ;
填空题阅读以下说明和C++程序,将应填入 (n) 处的字句写在对应栏内 [说明] 以下程序的功能是计算三角形、矩形和正方形的面积并输出。 程序由4个类组成:类Triangle,Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述三种图形面积的通用接口。 [C++程序] #include<iostream.h> #include<math.h> class Figure public: virtual double getArea()=0; //纯虚拟函数 ; class Rectangle: (1) protected: double height; double width; public: Rectangle(); Rectangle(double height,double width) This->height=height; This->width=width; double getarea() return (2) ; ; class Square: (3) public: square(double width) (4) ; ; class triangle: (5) double la; double lb; double lc; public: triangle(double la,double lb,double lc) this->la=la;thiS->ib;this->lc; double getArea() double s=(la+lb+lc)/2.0; return sqrt(s*(s-la)**(s-lb)*(s-lc)); ; viod main() figure*figures[3]= new triangle(2,3,3),new Rectangle(5,8),new Square(5); for(int i=0; i<3;i++) cout<<"figures["<<i<<"]area="<<(figures)->getarea()<<endl; ;
填空题【说明】 以下程序的功能是计算三角形、矩形和正方形的面积并输出。 程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口。 【C++程序】 #include<iostream.h> #include<math.h> class Figure public: virtual double getArea()=0; //纯虚拟函数 ; class Rectangle: (1) protected: double height; double width; public: Rectangle() ; Rectangle(double height,double width) this->height=height; this->width=width; double getArea() return (2) ; ; class Square: (3) public: Square(double width) (4) ; ; class Triangle: (5) double la; double lb; double lc; Public: Triangle(double la, double lb, double lc) This->la=la; this->lb=lb; this->lc=lc; double getArea() double s = (la+lb+±c)/2.0; return sqrt(s,(s-la)*(s-lb)*(s-Ic)); ; void main() Figure*figures[3]= new Triangle(2,3,3), new Rectangle(5,8), new SqUare(5)); for(int i=0;i<3;i++) cout<<"figures["<<i<<"]area="<<(figures[i])->getArea()<<endl;
填空题[说明]已知包含头结点(不存储元素)的单链表元素已经按照非递减方式排序,函数compress(NODE*head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。在处理过程中,当元素重复出现时,保留元素第1次出现时所在的结点。图8-4(a)、(b)是经函数compress()处理前后的链表结构示例图。链表的结点类型定义如下。typedefstructNodeintdata;structNode*next;NODE;[C语言函数]voidcompress(NODE*head)NODE*ptr,*q,*s,*t;ptr=head->next;/*取得第一个元素结点的指针*/while(ptrwhile(qs=(3);ptr->next=q;/*保留重复序列的第一个结点,将其余结点从链表中删除*/while(sfree(s);s=t;(5)=ptr->next;/*endofwhile*//*endofcompress*/
填空题【说明】某学校举办了一场奥运知识竞赛,参加竞赛的选手为200名,1~200为选手编号。竞赛时间为9:00~11:00。8道竞赛题目依次从“A”~“H”编号,选手可按任意次序答题,每完成一道题目,可立即提交答案。若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。选手提交答案的情况及判定结果由专人即时录入,录入数据包括提交答案的时间、选手编号、题目编号(A~H)、是否正确(Y/N)等。对竞赛情况进行统计和排名的规则如下:1.若选手X在竞赛时提交的题目P解答正确,则解答该题目所用时间计算如下:解答题目P的用时=提交题目P正确的时间-竞赛的开始时间+罚时,罚时=提交题目P错误解答的次数×20例如:表1中14号选手在10:27提交了题目A的正确解答,因此该选手正确解答该题目所用时间P为87分钟,由于他在09:37和09:52两次提交了题目A的错误解答,因此罚时为(2×20)分钟=40分钟,所以14号选手解答题目A的用时=(87+40)分钟:127分钟。2.已经提交正确答案的题目再次提交时不再计算。3.竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。4.排名时,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前;若完成的题目数和所用时间均相等,则名次相同;完成题目数为。的选手不参加排名。本应用程序的运行窗口如图3所示。窗口中的两个文本框为Txt_time和Txt_player,分别用于录入提交答案的时间和选手编号。组合列表框Combo1提供题目编号(A~H),录入时从中选择。检查框Chk_yn用于输入解答是否正确信息。当单击“确定”按钮(Cmd_comfirm)时,录入的提交信息加入列表框List1中,排名情况在列表框List2输出。单击“关闭”按钮时退出应用程序。在开发过程中,需要编写的部分程序代码如下:【程序】PrivateTypeinfoNoAsInteger′选手编号NumAsInteger′完成题目数量TimeAsInteger′完成题目的总用时d(8)AsInteger′d用于记录提交第i个题目错误答案的次数a(8)AsBoolean′a用于记录第i个题目是否已经提交正确答案EndTypeDimR(201)Asinfo′R[j]用于统计编号为j的选手提交答案的情况DimMaxlndexAsInteger′Maxlndex记录提交答案的选手中编号最大者PrivateSubForm_Load()Fori=1to8Combo1.Addltemchr({{U}}(1){{/U}})NextCombo1.Text=Combo1.List(0):txt_time.Text="":txt_player.Text=""Fori=1To200R(i)num=0:R(i).time=0:R(i).no=iForj=1To8R(i).d(j)=0:R(i).a(j)=FalseNextj,iEndSubPrivateSubcmd_confirm_Click()Dimh,m,k,timeAsInteger,ch,pass,s1AsStringK=Instr(txt_time,text,":"):Ifk<2ThenGotoerror1H=Val(Left(txt_time.Text,k-1)):m=Val(Mid(txt_time.Text,k+1))Ifh>11Orh=11Andm>0Orm>=60ThengotoerrorlTime={{U}}(2){{/U}}′计算答题时间,以分钟为单位Iftxt_plater,text<1ortxt_player,text>200ThenGotoerrorl ch={{U}}(3){{/U}}pass=IIf(chk_yn.{{U}}(4){{/U}}=0,"N","Y")s1=txt_time.Text+Space(4)+txt_player.Texts1=s1+Space(10-Len(txt_player.Text))+ch+Space(8)+passList1.Additems1K=Val(txt_player.Text)′k为选手编号R(k).no=k′编号为k的选手的提交信息记录在下标为k的数组′元素中Ifk>maxindexThenmaxindex=k M=Asc(ch)-Asc("a")Ifpass<>"Y"Then′编号为k的选手提交第m个题目的解答不正确R(k).d(m)=R(k).d(m)+1ElseIfR(k).a(m)<>TrueThen′已经提交正确的题目的解答不再计算R(k).a(m)=true:R(k).num=R(k).num+1R(k).time=R(k).time+{{U}}(5){{/U}}Callstatistic′调用过程statistic进行实时排名和输出EndIfExitSuberror1:MsgBox"录入信息有错误!",vbOKOnlyEndSub
填空题[说明] 本程序将利用文本框txtInput 输入的一行字符串中的所有字母加密,加密,加密结果在文本txtCode中显示。加密方法如下:将每个字母的序号移动5个位置,即“A”->“F”“a”->“f”,“B”->“G”……“Y”->“D”,“Z”->“E”。程序段如下: [Visual Basic 代码]Private Sub Form_ Click() Dim strInput As String*70 ; 输入字符串 Dim Code as String*70 ;加密结果 Dim strTemp As String*1 ;当前处理的字符 Dim i as Integer Dim Length As Integer ;字符串长度 Dim iAsc As Integer ;第i个字ASCII码 (1) ;取字符串 i=1 Code=“” (2) ;去掉字符串右边的空格,求真正的长度Do While(i<=Length) (3) ;取第i个字符 If (strTemp>="A" And strTemp<="Z',) Then iAsc= Asc (strTemp)+5 If iAsc>Asc(“Z”)Then iAsc=iAsc-26 Code=Left$(Code,i-1)+Chr$ (iAsc) ElseIf (strTemp>="a" And strTemp<="z") Then iAsc=Asc(strTemp)+5 If iAsc>Asc (“z”) TheniAsc=iAsc-26 Code=Left$(Code,i-1)+Chr$(iAsc) Else Code=Left$(Code,i-1)+strTemp End If (4) Loop (5) ;显示加密结果End Sub
填空题【说明】 在窗体上画一个名称为Combo1的组合框,画两个名称分别Labe11、Labe12及Caption属性分别为“城市名称”和空白的标签。程序运行后,当在组合框中输入一个新项后按回车键 (ASCII码为13)时,如果输入的项在组合框的列表中不存在,则自动添加到组合框的列表中,并在Labe12中给出提示“已成功添加输入项”;如果存在,则在Labe12中给出提示“输入项已在组合框中”。 【程序】 Private Sub Combo1 (1) (KeyAscii As Integer) If KeyAscii= (2) Then For i=0 To (3) If Combo1. Text= (4) Then Labe12. Caption ="输入项已在组合框中" Exit Sub End If Next i Label2. Caption ="已成功添加输入项" Combo1. (5) Combo1.Text End If End Sub