填空题阅读以下说明和C++程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 [说明] 在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator与FootDecorator分别完成打印票据的抬头和脚注的功能。已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。 这是票据的抬头! 这是票据正文! 这是票据的脚注! -------------------------------------- 这是票据的抬头! 这是票据的脚注! [C++程序代码] #include<iostream> using namespace std; class SalesTicket public; (1) printTicket()cout<<"这是票据正文!"<<endl; ; class Decorator:public SalesTicket SalesTicket *ticket; public: Decorator (SalesTicke *t)ticket=t; void printTicket () if (ticket!=NULL) ticket->printTicket() ; ; class HeadDecorator:public Decorator public: HeadDecorator(SalesTicket *t): (2) void printTicket() cout<<"这是票据的抬头!" <<endl; Decorator::printTicket(); ; class FootDecorator:public Decorator public: FootDecorator(SalesTicket *t): (3) void printTicket() Decorator::printTicket(); cout<<"这是票据的脚注!"<<endl; ; void main (void) SalesTicket t; FootDecorator f( HeadDecorator h( (4) ); h.printTicket(); cout<<"---------------------"<<endl; FootDecorator a(NULL); HeadDecorator b( (5) ); b.printTicket();
填空题【说明】设计一个评选优秀教师和学生的程序,其类结构如图6所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。【程序】#include<iostream.h>#include<stdio.h>enumbooleanFalse,Trueclassbaseprotected:charname[8];public:voidgetname()cout<<"姓名:";cin>>name;voidprintname()cout<<"姓名:"<<name<<endU3virtualbooleanisgood()=0;classstudent:(1)intnum;public:voidgetnum()cout<<"考试成绩:"cin>>num;booleanisgood()return(2);;classteacher:(3)publicbaseintnum;public:voidgetnum()cout<<"每年发表论文数:";cin>>num;booleanisgood()return(4);;voidmain()base*p[50];student*pstud;teacher*ptech;charch;intcount=0;docout<<"输入教师(t)或学生(s):"cin>>ch;if(ch=='s')pstud=newstudent;pstud->getname();pstud->getnum();p[count++]=pstud;elseif(ch=='t')ptech=newteacher;ptech->getname()ptech->getnum();p[count++]=ptech;elsecout<<"输入错误<<endl;cout<<"继续输入码(Y/n)";cin>>ch;while(ch=='y')for(inti=0;i<count;i++) if((5))//若为优秀,则输出p[i]->printname();
填空题[说明] 函数int psort(int a[],int n)实现将含n个整数的数组a[]的不同元素按从小到大顺序存于数组a[]中。实现方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面; 否则,忽视该元素。 [函数] int psort (int a[] ,int n) int i, j ,k,p; for(i=0,k=0ji< (1) ;i++) for(j=i+1, (2) ;j<n;j++) if (a[p]>a[j]) p=j; if (p!=i) t=a[p] a[p]=a[i]; a[i]=t; if( (3) ) k++; else if ( (4) <a [i]) (5) =a[i]; return k; int a[]=5,7,5,6,4,3,4,6,7; main() int k,n; for (k=0 ; k<(sizeof a) /sizeof (int); k++) printf (" %5d" ,a [k]) ; printf ("/n/n") ; n=psort (a, (sizeof (a)) /sizeof (int)); printf("%5d",a[k]); printf ("/n/n") ;
填空题阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明] 函数void diff(Node*A,Node*B,Node**r)的功能是:根据两个由整数按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求L3中的所有整数都是L1,并且不是L2中的整数,还要求L3中的所有整数都两两不等。 [C函数] #include<malloc.h> typedef struct node int data; 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->data<B->data) lastnum=A->data; p=(Node*)malloc(sizeof(Node)); P->data=lastnum; P->next=*r; (2) ; do A=A->next; while( (3) >; else iffA->data>B->data) B=B->next; else (4) ; lastnum=A->data; while (A while(A) lastnum=A->data; p=(Node*)malloc(sizeof(Node)); P->data=lastnum; (5) ; *r=P; while(A
填空题阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点:否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。例如,下图所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:typedefstructBSTNodeintdata;structBSTNode*1ch,*rch;/*结点的左、右孩子指针*/*BSTree;函数BSTreeFind_Del(BSTreeroot)的功能是:若root指向一棵二叉树的根结点,则找出该结点的右子树上的“最左下”结点*p,并从树下删除以*p为根的子树,函数返回被册除子树的根结点指针:若该树根的右子树上不存在“最左下”结点,则返回空指针。[函数]BSTreeFind_Del(BSTreeroot)BSTreep,pre;if(!root)returnNULL;/*root指向的二叉树为空树*/(1);/*令p指向根结点的右子树*/if(!p)returnNULL;(2);/*设置pre的初值*/while(p->1ch)pre=p;p=(3);if((4)==root)/*root的右子树根为"最左下"结点*/pre->rch=NULL;else(5)=NULL;/*删除以"最左下"结点为根的子树*/returnp;
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明]
已知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={{U}} (1) {{/U}};
if(k<r[mid].key){{U}} (2) {{/U}};
else if(k==r[mid].key){
printf("succesS/n");
{{U}} (3) {{/U}};
}
else{{U}} (4) {{/U}};
}
printf("failure/n");
{{U}} (5) {{/U}};
}
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明1]
本程序输入一字符串,并将其中的大写字母变成小写字母。
[C函数1]
#include<stdio.h>
void main()
{ int i=0;
char s[120];
printf("Enter a string./n");
scanf("%s",s);
while({{U}} (1) {{/U}}){
if({{U}} (2) {{/U}})
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({{U}} (3) {{/U}});
k=(10w+high)/2;
if({{U}} (4) {{/U}}) return k;
else if({{U}} (5) {{/U}})high=k-1;
else low=k+1;
return -1;
}
填空题[说明] 函数ELEM*proc(FILE*fp)从文件fp中逐个读入职工的工号及其完成的产品数量,对相同工号的产品数量计入该职工完成的产品总数,并且按照产品总数降序排列,若多个职工完成的产品总数相同,则按工号升序排列。 在函数中建立了一个有序链表,来存储每个职工的工号和完成产品总数等数据,其结点类型为: typedef struct ELE int no; /*职工工号*/ int num; /*完成的产品总数*/ struct ELE *next; ELEM; [函数] ELEM *proc (FILE *fp) int m,n; ELEM *u, *v, *p, *base; base=NULL; /*bese是链表的首指针*/ while(fscanf(fp,"%d%d", &n, &m) ==2) /*链表中是否存在工号为n的结点*/ for (v=base; v!=NULL&& v->no! =n; (1) ); if(v!=NULL) /*若链表中已有工号为n的结点v,则将其从链表中脱钩*/ if( (2) ) base=v->next; else u->next=v->next; v->num+=m; /*累加工号为n的职工完成的产品数量*/ else /*创建一个工号为n的结点*/ v=(ELEM *)malloc(sizeof(ELEM)); V->no=n: V->num=m; /*寻找结点v的插入位置*/ p=base; while(p!=NULL) if (v->num>p->num || v->num==p->num && (3) ) break; elseu=p; p=p->next; /*将结点v插入链表*/ if(p==base) (4) ; else u->next=v; (5) ; return base;
填空题阅读以下说明和流程图,回答问题将解答填入对应栏。[说明]本流程图采用“双向冒泡法”实现对数组a[n]的排序。双向冒泡法就是在逐步缩小的数组内,分别从数组的两端开始向内搜索,同时将大数往上浮,小数往下沉,每次交换一组数。flag是一个标志,发生过交换就置为1,当这个循环过程都不再发生交换时,则数组排序完成。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述;定义swAP[a,b]为将a和b两数交换。[问题]将流程图的(1)~(5)处补充完整。
填空题阅读以下说明和Java程序,将应填入 (n) 处的字句写在对应栏内。 [说明] 下面程序是为汽车市场编制的一个程序的一部分。其中automobile是基类。 [Java程序] class MainJava public static void main(String agr[]) car sedan=new car(); sedan.initialize(24,20.0,4); System.out.println ("The sedan can travel" + (1) +"miles./n"); System.out.println ("The sedan has" + (2) +"doors./n"); class automobile protected int miles_per_gallon; //汽车每加仑行驶公里数 (3) double fuel_capacity; //油箱容积 public void initialize(int in_mpg,int in_fuel) miles_per_galion=in_mpg; fuel_capacity=in_fuel; public int get_mpg()//提供一辆特定汽车每加仑公里数 return miles_per_gallon; public double get_fuel()//提供油箱容积 return fuel_capacity; public double travel_distance()//计算满油箱情况下的可行驶总公里数 return (4) ; class car (5) private int Total_doors; public void initialize(int in_mpg,double in_fuel,int doors) Total_doors=doors; miles_per_gallon=in_mpg; fuel_capacity=in_fuel; public int doors() return Total_doors;
填空题[函数8.1说明] 现考虑编写一个扑克游戏:只用一副无大小王的扑克,扑克的花色(suit)分为Spade、Heart、Diamond和Club,每门花色的牌共13张,面值(rank)分别为2、3、4、5、6、7、8、9、10、Jack、Queen、King和Ace,每张扑克牌应包含如下信息:惟一的ID号(1~52)、花色、面值、背面图案的编号等。每张扑克牌的操作有:判断两张扑克牌是相同花色吗?相同面值吗,判断一张扑克牌是给定的花色吗?是给定的面值吗?请补充扑克牌类Card类的声明和实现代码,要求选取适当形式的数据成员描述每张扑克牌的信息,同时以成员函数的形式实现指定的操作。[C++程序]const enum SUIT SPADE=0,HEART,DIAMOND,CLUB;const enum RANKTWO=0 THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING,ACE;class Card。 public: (1) (int id):mID (id),mSuit((id 1)/13),mRank((id-1)%13) bool IsSameSuit (const Card int b;public: vector (int x=0,int y=0):a(x),b(y) double operator*( (4) ) double c; (5) ; return c; void input (int x, int y) a=x; b=y; void output () cout<<'('<<a<<',' <<b<<") "<<end1; ;void main() vector x(10,20),y; //定义x, y, z三个矢量类对象,并将x置初值(10,20) doubled;//定义实数d以存放点乘结果 y. input (2,3); //给y赋值为(2,5) d=x*y;//两矢量点乘 x. output (); //输出矢量x y. output (); //输出矢量y cout<<d<<end1; //输出点乘结果
填空题【说明】该应用程序是用来求一元二次方程和一元一次方程的,其运行如图2所示。当用户在对应方程系数的文本框(txt1、txt2和txt3)中输入数值后,单击“解方程”按钮(cmdcalculate),解方程并将解显示在Ⅺ和K2对应的文本框中(txt4和txt5)中。若是一个一元一次方程,只显示在X1对应的文本框中,若无解则弹出对话框。下面的代码是“解方程”按钮的Click事件的代码。【程序代码】PrivateSub(1)()a=Val(Txt1.Text):b=Val(Txt2.Text);c=Val(Txt3.Text)Ifa=0ThenIfb=0ThenMsgBox"方程无解!",vbOKOnly,"提示"Txt4.Text=""Txt5.Text=""ElseTxt4.Text=(2)Txt5.Text=""EndIfElsedelta=(3)If(4)ThenMsgBox"方程无解!",vbOKOnly,"提示"Txt4.Text=""Txt5.Text=""ElseTxt4.Text=Str$(((-1)*b+Sqr(delta))/(2*a))Txt5.Text=(5)EndIfEndIfEndSub
填空题阅读以下说明和C函数,将应填入{{U}}(n){{/U}}处的字句写在对应栏内。[说明]若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵。对m行n列的稀疏矩阵M,进行转置运算后得到n行m列的矩阵MT,如图3-1所示为了压缩稀疏矩阵的存储空间,用三元组(即元素所在的行号、列号和元素值、表示稀疏矩阵中的一个非零元素,再用一维数组逐行存储稀疏矩阵中的所有非零元素也称为三元组顺序表)。例如,图3-1所示的矩阵M相应的三元组顺序表如表3-1所示。其转置矩阵MT的三元组顺序表如表3-2所示。函数TransposeMatrix(MatrixM)的功能是对用三元组顺序表表示的稀疏矩阵M进行转置运算。对M实施转置运算时,为了将M中的每个非零元素直接存入其转置矩阵MT三元组顺序表的相应位置,需先计算M中每一列非零元素的数目(即MT中每一行非零元素的数目),并记录在向量num中;然后根据以下关系,计算出矩阵M中每列的第一个非零元素在转置矩阵MT三元组顺序表中的位置:cpot[0]=0cpot[j]=cpot[j-1]+num[j-1])/*j为列号*/类型ElemType,Triple和Matrix定义如下:typedefintElemType;typedefstruct{/*三元组类型*/intr,c;/*矩阵元素的行号、列号*/ElemTypee;/*矩阵元素的值*/}Triple;typedefstruct{/*矩阵的元组三元组顺序表存储结构*/introws,cols,elements;/*矩阵的行数、列数和非零元素数目*/Tripledata[MAXSIZE];}Matrix;[C语言函数]intTransposeMatrix(MatrixM){intj,q,t;int*num,*cpot;MatrixMT;/*MT是M的转置矩阵*/num=(int*)malloc(M.cols*sizeof(int));cpot=(int*)malloc(M.cols*sizeof(int));if(!num||cpot)returnERROR;MT.rows={{U}}(1){{/U}};/*设置转置矩阵MT行数、列数和非零元素数目*/MT.cols={{U}}(2){{/U}};MT.elements=M.elements;if(M.elements>0){for(q=0;q<M.cols;q++)num[q]=0;for(t=0;t<M.elements;++t)/*计算矩阵M中每一列非零元素数目*/num[M.data[t].c]++;/*计算矩阵M中每列第一个非零元素在其转置矩阵三元组顺序表中的位置*/{{U}}(3){{/U}};for(j=1;j<M.cols;j++)cpot[j]={{U}}(4){{/U}};/*以下代码完成转置矩阵MT三元组顺序表元素的设置*/for(t=0;t<M.elements;t++){j={{U}}(5){{/U}};/*取矩阵M的一个非零元素的列号存入j*//*q为该非零元素在转置矩阵MT三元组顺序表中的位置(下标)*/q=cpot[j];MT.data[q].r=M.data[t].c;MT.data[q].c=M.data[t].r;MT.data[q].e=M.data[t].e;++cpot[j];/*计算M中第j列的下一个非零元素的目的位置*/}/*for*/}/*if*/free(num);free(cpot);/*此处输出矩阵元素,代码省略*/returnOK;}/*TransposeMatrix*/
填空题【说明】
下面程序的功能是显示已定义的一个3行3列的二维数组每行的元素,并求所有元素的和并输出。请在程序的每条横线处填写一个适当的语句,使程序的功能完整。
public class Arrayt
{{U}} (1) {{/U}}static{{U}} (2) {{/U}}main(String args[])
{
int sum=0;
int [][] = t {11,12,13}, {21,22,23},{31,32,33}};
for(int i=0;{{U}} (3) {{/U}}i++)
{
System. out. print("b["+i+"]:");
for(int j=0;{{U}} (4) {{/U}}j++)
System. out. print(b[i] [j] +" ");
{{U}}(5) {{/U}}
}
System. out. println ();
}
System. out. println("sum="+sum);
}
}
填空题【说明】本程序是一个可进行数制转换的应用程序,图1所示是其运行界面。txtDec为TextBox控件名,Lblkes为转换结果label控件名。图1【程序代码】OptionExplicitPrivateFunctionconvert(pintDecAsIntege,pintSAsInteger)AsStringDimintCtAsInteger,intRAsIntegerDimstrCovAsString,strResAsStringintR=pintDecModpintSDoWhile{{U}}(1){{/U}}strCov=strCov&Str(intR){{U}}(2){{/U}}intR=pintDecModpintsLoopForintCt={{U}}(3){{/U}}To1Step-1strRes=strRes&Mid(strCov,intCt,1)NextintCtconvert=strResEndFunctionPrivateSubcmdQuit_Click()′退出UnloadMeEndSubPrivateSuboptBin_Click()′二进制IblRes.Caption="转换结果:"&{{U}}(4){{/U}}EndSubPrivateSuboptHex_Click()′十六进制IblRes.Caption="转换结果:"&{{U}}(5){{/U}}EndSubPrivateSuboptOct_Click()′八进制IblRes.Caption="转换结果:"&Oct(Val(txtDec.Text))EndSub
填空题阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。 [说明] 某单位准备进行一次选举,对指定的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 ( (1) ) fgets (str,80,fp); /*读入一张选票数据*/ for (tag=0,i=0; ( (2) );i++) if (str[i]=='1') tag++; if ( (3) ) /*(若是有效选票,则进行统计*/ ( (4) ); for (i=0;i<n;i++) if (str[i]=='1') (5) ; return q; /*statistic*/
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 设一个环上有编号为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 {{U}} (2) {{/U}}; } 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({{U}} (3) {{/U}}); if(c>maxc){cut=i;maxc=c; ) /*数组s的元素循环向左移动一个位置*/ t=s[0]; for(j=1;i<len;i++){{U}} (4) {{/U}}; {{U}} (5) {{/U}}; } printf("在第%d号珠子前面剪开,可以取走%d个珠子./n",cut,maxc); }
