填空题阅读以下函数说明和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
填空题【说明】在窗体上设计两个文本框和两个标签,标签上显示:“摄氏温度:”和“华氏温度:”,文本框一个用于输入摄氏温度数,一个用于输出对应的华氏温度。摄氏温度与华氏温度的转换公式为:c=(5/9)×(f-32)要求:对输入的摄氏温度数有检查功能,以拒绝接收非数字字符。运行界面如图所示。【VisualBasic代码】PrivateSubCommandl_Click()Text1=""Text2=""Text1.Enabled=TrueText2.Enabled=TrueText1.SetFocusEndSubPrivateSubCommand2Click()EndEndSubPrivateSubFormLoad()Text1=""Text2=""Text1.Enabled=FalseText2.Enabled=FalseEndSubPrivateSubTextl_Change()Text2.Text=(1)EndSubPrivateSubTextl_KeyPress(KeyAsciiAs(2))If(3)ThenIfChr(KeyAscii)<"0"Or(4)Then(5)EndIfEndIfEndSub
填空题[说明]
求树的宽度,所谓宽度是指在二叉树的各层上,具有结点数最多的那一层的结点总数。本算法是按层次遍历二叉树,采用一个队列q,让根结点入队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。
[函数]
int Width ( BinTree *T
{
int front=-1, rear=-1; /*队列初始化*/
int flag=0, count=0, p; /*p用于指向树中层的最右边的结点, flag 记录层中结点数的最大值*/
if ( T!=Null)
{
rear++;
{{U}} (1) {{/U}};
flag=1;
p=rear;
}
while ({{U}} (2) {{/U}})
{
front++;
T=q [front]];
if (T->lchild!=Null )
{
roar+-+;
{{U}} (3) {{/U}};
count++;
}
if ( T->rchild!=Null )
{
rear++; q[rear]=T->rchild;
{{U}} (4) {{/U}};
}
if (front==p ) // 当前层已遍历完毕
{
if({{U}} (5) {{/U}})
flag=count;
count=0;
p=rear, //p 指向下一层最右边的结点
}
}
return ( flag );
}
填空题【说明】 设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在Date类中设计如下重载运算符函数: Date operator + (int days) : 返回某日期加上天数得到的日期。 Date operator - (int days) : 返回某日期减去天数得到的日期。 int operator - (Date //day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date int year, month, day //年,月,日 int leap(int); //判断是否闰年 int dton(Date month = m; day = d; void setday(intd)day = d; void setmonth(int m) month = m; void setyear(int y) year =y; int getday() return day; int getmonth() return month: int getyear() return yea; Date operator + (int days) //+运算符重载函数 static Date date; int number = (1) date = ntod(number) return date Date operator - (int days) //-运算符重载函数 staffs Date date; int number= (2) ; number - = days; date = ntod(number) return date; int operator - (Date return days; void disp() cout<<year<<"."<<month<<". "<<day<<endl; ; int Date: :leap( int year) if( (4) ) //是闰年 return 1; //不是闰年 else return0: int Date:: dton( Date for(y=1;y<=d. year;y++) if( (5) )days+ =366; //闰年时加366天 else days + = 365; //非闰年时加365天 for(m =0;m<d. month-1;m++) if( (6) ) days += day_tab[1] [m]; else days +=day_tab[0] [m]; days + = d. day; return days; Date Date::ntod(intn) //将从元0年0月0日的天数转换成日期 int y=1,m = 1,d,rest = n,lp; while(1) if(leap(y)) if(rest<= 366) break; else rest - = 366; else //非闰年 if(rest = 365 ) break; else rest-=365; y++; y--; Ip = leap(y); while(1) if(lp) //闰年 if(rest>day_tab[1] [m - 1]) rest -= day_tab[1] [m-1]; else break; else //非闰 if(rest>day_tab[0] [m -1]) rest -= day_tab[0] [m-1]; else break; m++; d = rest; return Date(y;m,d); void main() Date now(2003,10,1) ,then(2005,6,5); cout<<" now:";now. disp(); cout<<" then:";then. disp(); cout<<"相差天数:"<<(then-now)<<endl; Date dl = now + 1000,d2 = now - 1000; cout<<"now + 1000:" ;d1. disp(); cout<<" now - 1000:" :d2. disp();
填空题[程序5.1说明] 下列程序运行时,当单击窗体后,从键盘输入一个字符,判断该字符是字母字符、数字字符还是其他字符,并做相应的显示。窗体上无任何控件,并禁用Ase和Chr函数,Select Case语句中禁用枚举值。[Visual Basic代码]Private Sub Form Load ()Dim x As String*1X= (1) (“请输入单个字符”,“字符”)Select Case UCase ( (2) )Case (3) 。Print X+“是字母字符”Case (4) Print X+ “是数字字符”Case ElsePrint X+“是其他字符”End Select[程序5.2说明] 在窗体上画一个名称为Timer1的计时器和一个名称为Labe11的标签。当运行程序后,将在标签中显示当前时间的数字时钟(包括时:分:秒)。[Visual Basic代码]Private Sub Fom_Load ()Timer1.Interval=1000EndSubPrivate Sub Timer1_ timer() (5) EndSub
填空题[流程图说明]下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按由小到大的顺序排列,M是给定的常数。[流程图]此流程图中,比较“K(I)+K(J):M”最少执行次数约为(5)。
填空题【流程图说明】下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data,left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。【算法说明】【流程图】将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:typedefstructnodeintdata;structnode*left;structnode*right;NODE;【算法】NODE*SearchSortTree(NODE*tree,inte)if(tree!=NULL)if(tree->data<e)(4) ;//小于查找左子树elseif(tree->data<e)(5); //大于查找左子树elsereturntree;returntree;
填空题[说明] 下面Application程序用while循环从键盘读入字符,记录输入的字符数并输出读入的字符,当输入字符“0”时结束while循环,同时结束程序。 [Java程序] import java.io.*; public class ContinuateInput public (1) void main(String[] args) (2) IOException int ch; int counter=0; System.out .println("请输入字符(输入0结束)"); while ((char) (ch=System.in. (3) ) != '0') counter++; System.out .println (( (4) )ch) ; System.out .println () ; System.out.println ("counted "+counter+" total bytes. ") ; System.out . (5) ;
填空题[说明]从键盘输入一个高精度正整数n,去掉其中s个数字后按原左右次序再组成一个新的正整数。对给定的n,要寻找一种方案,使得余下的数字组成的新数最小。算法分析:每次删除一个数字,选择一个使余下的数最小的数字作为删除对象。当s=1时,在n中删除哪一个数字能达到最小的目的?从左到右每相邻的两个数字比较:若出现减,郎左边大于右边,则删除左边的大数字;若不出现减,即所有数字全部升序,则删除最右边的大数字。当s>l(当然小于n的位数),按上述操作一个一个删除,删除一个达到最小后,再从头即从串首开始,删除第2个,依此分解为s次完成。若删除不到s个后已无左边大于右边的减序,则停止删除操作,打印余下串的左边L-s个数字即可。(x为统计删除数字的个数,m=1表示脱离循环,L为n的长度)。[流程图][问题]将流程图中的(1)~(5)处补充完整。
填空题阅读以下函数说明和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 (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);
填空题[说明] 某班有n个同学,学号分别为1,2,…,n。为了每天指派若干个同学值日,他们放弃传统单调的轮留值日,别出心裁采用“定和值日”法:每天所指派值日同学的学号之和须等于其班号m(n<m<n(n+1)/2)并且规定:不允许任何两天值日的同学完全一样。 编程使n个同学按定和m值日(正整数n、m均从键盘输入,约定n<50,m<100),求出可持续的值日天数f(n,m)。运行程序,具体求出f(19,98)的值。 [函数] main ( ) int b, p, i , m, n, k; static int a[51][101]: long s=0; printf (" 请输入学生人数;"); scanf ( "%d", printf (" 请输入定和值: "); scanf ( "%d", a[1][0]=1; a[1][1]=1; /* 数组元素赋初值*/ for ( (1) ; j<=n; j++) for (i=j; (2) ; i++) /* 计算 a (2, m),…, a(n, m)*/ (3) ; b=0, for ( k=1 k<j-1; k++ (4) ; a[j][i]=b; (5) ; /* 求和s 为所求结果*/ printf (" "); printf ( "f ( %d, %d ) =%1d/n", n, m, s );
填空题【说明】在一些应用场合中,需要对用户的输入数据进行检查监控。以下VisualBasic程序实现了对新添加到List列表的内容进行监控,拒绝向List列表添加重复信息。例如,在List列表中存在元素“a01001;a01002”,如果用户输入数据为“a01001”或“a01002”,系统则弹出提示信息,拒绝将新数据加入List列表;如果用户输入的数据不同于List列表中的任何一个元素,则作为新元素加入List中。VisualBasic界面显示如图所示。根据程序功能说明,完成程序代码。【代码5-1】BeginVB.FormFormlCaption="List列表拒绝添加重复信息"//...窗体描述(略)BeginVB.CommandButtonCommand2Caption="退出"//...窗体描述(略)EndBeginVB.CommandButtonCommandlCaption="添加"//...窗体描述(略)EndBeginVB.TextBoxText1//...窗体描述(略)EndBeginVB.ListBoxList1Height=1860ItemData="Form1.fix":0000Left=1020List="Form1.fix":0002TabIndex=0Top=525Width=2580EndBeginVB.Labe1Labe11BackStyle=0'TransparentCaption="请输入编号"//...窗体描述(略)EndEnd【代码5-2】AttributeVBName="Form1"AttributeVB_GlobalNameSpace=FalseAttributeVBCreatable=FalseAttributeVBPredeclaredId=TrueAttributeVB_Exposed=FalsePrivateSubFormLoad()List1.AddItem"a01001"List1.AddItem"a01002"EndSubPrivateSubCormnand1Click()DimMyvalAsLongFori=0To(1)(2)If(3)ThenMsgBox"系统不允许重复输入,请重新输入"ExitSubEndIf(4)(5)EndSub
填空题[说明]
本程序求3~100之间的所有素数(质数)并统计个数;同时将这些素数从小到大依次写入顺序文件E: /dataout.txt;素数的个数显示在窗体Form1上。
[Visual Basic 代码]
Private Sub Command1_ Click ( )
Dim count as integer, flag as Boolean
Dim t1 as Integer, t2 as Integer
{{U}} (1) {{/U}}
Count=0
For t1=3 to 100
Flag=Tree
For t2=2 to Int( Sqr ( t1 ) )
If{{U}} (2) {{/U}}Then flag=False
Next t2
{{U}} (3) {{/U}}
count={{U}} (4) {{/U}}
write #1, t1
End if
Next t1
{{U}} (5) {{/U}}
Close #1
End Sub
填空题[说明] 某超市集团为发展业务向社会公开招聘N个工种的工作人员,每个工种各有不同的编号(1~M)和计划招聘人数。每位应聘者需申报两个工种,并参加集团组织的考试。该集团公司将按应聘者的成绩从高分至低分的顺序进行排队录取。具体录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。 以下C程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都做了录取处理后跳出。 在C程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组rz[]的每个元素对应一个工种,包含计划招聘人数和已录取的人数。 [C程序代码] #include #define N 36 #define EDMARK 5 typedef struct stu int no, total, z[2], sortm, zi; struct stu *next; STU; struct rznode int lmt , count; STU *next; rz [N] ; STU *head = NULL, *over = NULL; int all FILE *fp; char dataf [ ] = "zp2008.dat"; print (STU *p) for (;p!=NULL; p = p->next) printf("%d(%d)/t", p->no, p->total) ; insert(STU **p, STU *u) STU *v, *q; for (q = *p;q != NULL; v = q , (1) ) if ( q-> sortm < u->sortm) break; if ( q == *p) (2) ; else (3) ; u->next = q ; main ( ) int zn, i, no, total, z1, z2 ; STU *p, *v, *q; fp = fopen (dataf, "r") ; if (fp == NULL) printf ("Can't open file %s./n",dataf); exit (0) ; fscanf (fp,"%d", for (all = 0, i = i; i <= zn; i++) fscanf (fp, "%d", rz [i] .count = 0; rz[i] .next = NULL; all += (4) ; for (;;) if ((fscanf(fp,"%d%d%d%d", p = ( STU *) malloc (sizeof (STU)) ; p->no = no; p->total = p->sortm = total; p->zi = 0; p->z[0] : z1; p->z[1] = z2; (5) ; fclose (fp); for (;all ) p = head; head = head->next; if (rz[p->z[p->zi]].count < (6) ) rz[p->z[p->zi]].count ++; insert( all--; continue; if (p->zi >= 1 ) p->next = over; over = p; continue; p->sortm -= DEMARK; (7) ; insert( for ( i = 1; i <= zn; i++ ) printf("%d:/n",i); print( rz[i ].next); printf("/n"); printf("over:/n"); print (head); print(over); printf("/n")
填空题阅读以下说明和C++程序,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 下面程序是为汽车市场编制的一个程序的一部分。其中automobile是基类。 [C++程序] //Auto.h #ifndef AUTO_H #define AUTO_H class automobile { (1): int miles_per_gallon; //汽车每加仑行驶公里数 float fuel_capacity; //油箱容积 public: void initialize(int in_mpg,int in_fuel); int get_mpg(void); float get_fuel(void); float travel_distance(void); } #endif //Auto.cpp #include"auto.h" void automobile::initialize(int in_mpg,float in fuel) { miles_per_gallon=in_mpg; fuel_capacity=in_fuel; ) int automobile::get_mpg() //提供一辆特定汽车每加仑公里数 {return miles per_gallon;} float automobile::get_fuel() //提供油箱容积 {return fuel_capacity;} float automobile::travel_distance() {return{{U}} (2) {{/U}}} //car.h #ifndef CAR_H #define CAR_H #include"auto.h" class car:{{U}} (3) {{/U}} { int Total_doors; public: void initialize(int in_mpg,float in_fuel,int doors=4); int doors(void); }; #endif //car.cpp #include"car.h" void car::initialize(int in_mpg,float in_fuel,int door) { Total_doors=door; miles_per_galion=in_mpg; fuel_capacity=in_fuel; } int car::doors(void) {return Total doors;} //Allauto.cpp #include #include"auto.h" #include"car.h" int main() { car sedan; sedan.initialize(24,20.0,4); tout<<"The sedan can travel"<<{{U}} (4) {{/U}}<<"miles./n"; cout<<"The sedan has"<<{{U}} (5) {{/U}}<<"doors./n"; return 0; }
填空题[说明] 设计一程序,输入16个整数到一个数组中,将数组位序颠倒重新排序,使每个数字不再按原j的顺序排列,而是按j的二进制数颠倒后得出的数排列,例如,将第1个(0001)数与第8个(1000)数交换,将第3个数(0011)与第12个数(1100)交换。 [C++程序] #include<iostream.h> #define SIZE 16 #define SWAP (a,b) temper=(a); (a)= (b); (b) =temper; void maln() int data[SIZE]; int n: cout<<"请输入"<<SIZE<<"个整数:"; for (n=0;n<SIZE;n++) (1) ; int j=0,m; for (int i=0; i<n; i++) if(j>i) (2) ; (3) ; while( (4) ) &&j>=m) j-=m; m>>=1: (5) ; cout<<endl<<"排序后:"; for(n=0;n<SIZE;n++) cout<<data [n]; <<" ";