填空题[说明]
完成以下中序线索化二叉树的算法。
[函数]
Typedef int datatype;
Typedef struct node {
Int ltag, rtag;
Datatype data;
*lchild,* rchild;
}bithptr;
bithptr pre;
void inthread ( p );
{if
{inthread ( p->lchild );
if ( p->lchild==unll ){{U}} (1) {{/U}};
if ( P->RCHILD=NULL) p->rtag=1;
if{{U}} (2) {{/U}}
{if{{U}} (3) {{/U}}pre->rchild=p;
if ( p->1tag==1 ){{U}} (4) {{/U}};
}
INTHREAD ( P->RCHILD );
{{U}} (5) {{/U}};
}
}
填空题【说明】
下面是一个Applet程序,程序的功能是在显示面板上输出字符串。当html页面被其他窗口遮挡后再次显示时,请给出输出结果。
import java.awt.*;
import java.{{U}} (1) {{/U}}. *;
public class MyApplet{{U}} (2) {{/U}}Applet {
public void{{U}} (3) {{/U}}(Graphics g) {
g.drawString(tip,20,40);
tip ="I am Java Applet";
}
public void init() {
tip ="welcome"; }
private{{U}} (4) {{/U}}tip;
}
<html>
<head>
<title> A Simple Applet </title>
</head>
<body>
<applet code="MyApplet.class" width=800 height=400>
</applet>
</body>
</html>
网页输出{{U}} (5) {{/U}}
填空题[函数2.1说明] 函数int strcmp(char *s,char *t)的功能是比较两个字符串s和t的大小。若s<t,函数返回负数; 若s=t,函数返回0; 若s>t,函数返回整数。 [函数2.1] int strcmp(char *s,char *t) while(*s && *t && (1) ) s++; t++; return (2) ; [函数2.2说明] 在n行n列的矩阵中,每行都有最大的数,求这n个最大数中最小的一个。 [函数2.2] #include <stdio.h> #define N 100 int a[N] [N]; void main() int row,col,max,min,n; scanf("%d",&n); for(row=0; row<n; row++) for(col=0; col<n; col++) scanf("%d",&a[row] [col]); for (row=0; row<n; row++) for (max=a[row][0],col=1; col<ri; col++) if( (3) )max=a [row][col]; if( (4) ) min=max; else if( (5) ) min=max; printf("The main of max number is %d/n",min);
填空题【说明】在一个矩阵中,如果其零元素的个数大大多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。若直接用一个两维数组表示稀疏矩阵,会因存储太多的零元素而浪费大量的内存空间。通常采用三元组数组表示稀疏矩阵。稀疏矩阵的每个非零元素用一个二元组来表示:即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如对于以下两维数组。intx[5][4]={{1,0,0,0},{0,5,0,0},{0,0,7,2},{6,0,0,0},{0,3,0,8}};可用以下数组a来表示:inta[][3]={{5,4,7},{0,0,1},{1,1,5},{2,2,7},{2,3,2},{3,0,6},{4,1,3},{4,3,8}};其中三元数组a的第1行元素的值分别存储稀疏矩阵x的行数、列数和非零元素个数。下面的流程图描述了稀疏矩阵转换的过程。【流程图】注:流程图,循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。
填空题[函数2.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是“完全数”。 [函数2.1] int factors (int n) int i/s; for (i=1, s=0; i<=n/2;i++) if (n%i==0) [ (1) ]; if([ (2) ]) return 0; rerurn -1; [函数2.2说明] 函数int maxint(int a[],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。 [函数2.2] int maxint (int a [] ,int k) int t; if([ (3) ]) return [ (4) ]; t = maxint (a+1, [ (5) ]) ; return (a[0]>t) ? a[0]:t;
填空题[函数2.1说明]
求任意两个正整数的最大公约数的欧几里德算法。用辗转相除法求正整数m和n的最大公约数,并返回该公约数。
[函数2.1]
void func1(int m, int n) {
r=m% n;
while(r<>0) {
{{U}} (1) {{/U}};
n=r;
{{U}} (2) {{/U}};
}
return n;
}
[函数2.2说明]
判断101~200之间有多少个素数,并输出所有素数。用一个数分别去除2到sqrt (这个数),如果能被整除,则表明此数不是素数,反之是素数。
[函数2.2]
void func2 ( ) {
int m, i, k, h=0,leap=1;
printf ( "/n" );
for ( m=101;m<=200;m++ )
{{{U}} (3) {{/U}};
for (i=2;i<=k; i++ )
if({{U}} (4) {{/U}})
{leap=0;break;}
if ( leap )
{printf ( "%-4d",m );
{{U}} (5) {{/U}};
if ( h%10==0 )
printf ( "/n" );
}
leap=1;
}
printf ( "/n The total is %d", h );
}
填空题阅读以下说明和C函数,将应填入(n)处的字句写在对应栏内。[说明]若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵。对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=(1);/*设置转置矩阵MT行数、列数和非零元素数目*/MT.cols=(2);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中每列第一个非零元素在其转置矩阵三元组顺序表中的位置*/(3);for(j=1;j<M.cols;j++)cpot[j]=(4);/*以下代码完成转置矩阵MT三元组顺序表元素的设置*/for(t=0;t<M.elements;t++)j=(5);/*取矩阵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~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 (1) Count=0 For t1=3 to 100 Flag=Tree For t2=2 to Int( Sqr ( t1 ) ) If (2) Then flag=False Next t2 (3) count= (4) write #1, t1 End if Next t1 (5) Close #1 End Sub
填空题阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明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) (1) ; if( (2) )return 0; rerurn -1; [说明2] 函数int maxint(int a[],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。 [C函数2] int maxint(int a[],int k) int t; if( (3) )return (4) ; t=maxint(a+1, (5) )j return(a[0]t) ? a[0] :t;
填空题【说明】
找一个最小的自然数,使它等于不同的两组三个自然数的三次幂之和,即找最小的x,使得:x=a*a*a+b*b*b+c*C*c+d*d*d+e*e*e+f*f*f,其中,a、b、c、d、e、f者是是自然数,a≤b≤C≤d≤e≤f; [a,b,c]!=[d,e,f)
【C++程序】
#include<stdio.h>
#define N 100
void main ()
{
int i,j,il,ih,i0,j0,k0,il,j 1,k1;
int j1[N],jh[N];/*第i层平面的行的变化范围,自jl[i]至jh[i]*/
int k[N][N];/*第i层平面中,对应行j,当前的列号值为k[i][j]*/
int p[N], min;/*p[i]=i*i*i*/
i1=1;j1=1;k1=1;/*首先只局限下三角棱体的顶点*/
i1=1;ih=1;/*预置i的变化范围初值i1<=i<=ih*/
j1[1]=1;jh[1]=1;/*对应i层平面的行的变化范围*/
k[i1][j1[i1>=1;/*第i层平面中,对应行的列的初值*/
p[1]=1;
do
{
min=p[i1]+p[j1]+p[k1];
i0=i1;j0=j1;k0=k1;
if ( i1==ih ) /*当前候选者在ih平面, 则ih增1*/
{
ih++;
{{U}} (1) {{/U}};
/*为ih平面设定j的变化范围和对应k值*/
j1[ih]=1;jh[ih]=1;k[ih][1]=1;
}
if ( i1==i1/*在i1平面最下角点找到候选者,i1增1*/
else
{
if ( k1==1
k[i1][jh[i1>=1;
}
if( k1==j1/*调整i1平面当前行的列号*/
}
i1=i1;/*预定最上平面的最小行的当前列为下一个候选者*/
j1=j1[i1];
k1=k[i1][j1];
for ( i=i1;i<=ih;i++ ) /*寻找最小值所在平面号、行号和列号*/
{
for ( j=j1[i];j<=jh[i];j++ )
if ( p[i]+p[j]+p[k[i][j><{{U}} (4) {{/U}})
{
i1=i;j 1=j;k1=k[i][j];
}
}
}while ( p[i1]+p[j1]+p[k1]!=min
if ( p[i1]+p[j1]+p[k1]==min )
printf ( "%4d=%2d^3+%d^3+%dA3=%2d^3+%d^3+%d^3/n",min,i0,j0,k0,i1,j1,k1 );
else printf ( "The %d is too small./n",N );
}
填空题【说明】 下面程序的功能是:在含有10个元素的数组中查找最大数,及最大数所在位置(即下标值),最大数可能不止一个。 例如:若输入 2 8 5 7 8 4 8 3 2 8 则应输出 The max:8 Total:4 //最大数出现次数 The positions:1 4 6 9 【函数】 #include<stdio.h> #define M 10 int fun(int* a,int * n,int pos[ ]) int i, k max = - 32767; (1) for(i=0;i<M;i++) if( (2) )max=a[i]; for(i=0;i<M;i++) if( (3) )pos[k++]=i; *n=k; return max; main() int a[M],pos[M],i=0j,n; printf("Enter 10umber:") for(i=0,i<M;i++)scanf("%d", (4) ); j=fun( (5) ); printf("The max:%d/n",j); printf("Total: %d", n); printf("The position:") for (i=0; i<n;i++) printf ("%4d", pos[i]); printf("/n");
填空题[函数2.1说明] 函数fun1 (int m, int k, int xx [])的功能是:将大于整数m且紧靠m的k个素数存入数组xx中传回。例如:若输入17,5,则应输出:19,23,29,31,37。 [函数2.1] fun1 (int m, int k, int xx [] ) inti, j, s=0; for ( i=m+1; k>0; i++ ) for (j=2; j<i; j++ ) if ( i %j=0 ) (1) if( i==j ) (2) k--; [函数2.2说明] 函数void fun 2 ()的功能是:打印出杨辉三角形(要求打印出10行)。 [函数2.2] void fun2 ( ) int i, j; int a[10][10]; printf ("/n" ); for (i=0; i<10; i++ a [i] [0]=1; (3) ) for (i=2; i<l0; i++ ) for (j=1; j<i; j++) (4) for (i=0; i<10; i++ ) for (j=0; j<=i; j++ ) (5) printf ( "/n" );
填空题【说明】
以下程序的功能是计算正方体、球体和圆柱体的表面积和体积并输出。
程序由4个类组成:类cube、sphere和cylinder分别表示正方体、球体和圆柱体;抽象类 container为抽象类,提供了两个纯虚拟函数surface_area()和volum(),作为通用接口。
【C++程序】
#include<iostream.h>
#define pi 3.1416
class container{
protected:
double radius;
public:
container(double radius) {container::radius=radius;}
virtual double surface_area()=0;
virtual double velum()=0;
};
class cube:{{U}} (1) {{/U}}{ //定义正方体类
public:
cube(double radius):container(radius){};
double surface_area () {return 6 * radius * radius;}
double volum() {return radius * radius * radius;}
};
class sphere:{{U}} (2) {{/U}}{ //定义球体类
public:
sphere(double radius): container(radius){};
double surface_area() { return{{U}} (3) {{/U}};}
double volum() {return pi * radius * radius * radius * 4/3;}
};
class cylinder:{{U}} (4) {{/U}}{ //定义圆柱体类
double height;
public:
cylinder(double radius,double height):container(radius)
{
container::height=height;
}
double surface_are a () { return 2 * pi * radius * (height+radius); }
double volum () {return{{U}} (5) {{/U}};}
};
void main()
{
container * p;
cube obj1 (5);
sphere obj2(5);
cylinder obj3(5,5);
p=
cout<<“正方体表面积”(<<p->surface_area()<<end1;
cont<<“正方体体积”<<p->volume()<<end1;
p=
cout<<“球体表面积”<<p->surface_area()<<end1;
cout<<“球体体积”<<p->volume()<<end1;
p=
cout<<“球体表面积”<<p->surface_area()<<end1;
cout<<“球体体积”<<p->volume()<<end1;
}
填空题[说明]下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现的位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。注:返回值用pos表示。[问题]将流程图的(1)~(5)处补充完整。
填空题阅读以下说明和Java程序,将应填入 (n) 处的字句写在对应栏内 [说明] 以下程序的功能时三角形、矩形和正方形的面积输出。 程序由5个类组成:areatest是主类,类Triangle,Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算面积的抽象方法。 [Java程序] public class areatest public static viod main(string args[]) Figure[]Figures= New triangle(2,3,3),new rectangle(5,8),new square(5) ; for(int i=0; i<Figures.length;i++) system.out.println(Figures+"area="+Figures.getarea()); public abstract class figure public abstract double getarea(); public class rectangle extends (1) double height; double width; public rectangle (double height,double width) this.height=height; this.width=width; public string tostring() return"rectangle:height="+height+",width="+width+":"; public double getarea() return (2) public class square exends (3) public square(double width) (4) ; public string tostring() return"square:width="+width":"; public class triangle entends (5) double la; double lb; double lc; public triangle(double la,double lb,double lc) this.la=la;this.lb=lb;this.lc=lc; public string tostring()( return"triangle:sides="+la+","+lb+","+lc+":"; public double get area() double s=(la+lb+lc)/2.0; return math.sqrt(s*(s-la)*(s-lb)*(s-lc));
填空题【说明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();}