填空题[说明]下面的流程图说明的是图的深度遍历。它的基本思想是:以图中某一结点作为当前结点,然后进行以下过程:(1)处理或输出当前结点,并记录当前结点的查访标志。(2)若当前结点有后件结点,则取第一个后件结点。若该后件结点未被查访过,则以该后件结点为当前结点用深度遍历法进行查访。注:定义深度遍历函数为:dfs(head,k,mark);其中,head指向图中的第一个结点,mark[]为标记数组,k用来动态存储图中的结点号。下面给出单链表中结点结构和顺序存储空间中结点的结构:structnode/*单链表中结点结构*/intnum;/*图中结点编号*/intval;/*求值函数*/structnode*next;/*指针域*/;structgpnode/*顺序存储空间中结点结构*/chardata;/*结点值*/(5)*link;/*指针域*/;[问题]将流程图及程序中的(1)~(5)处补充完整。
填空题[说明] 函数void convert(char *a,int n)是用递归方法将一个正整数n按逆序存放到一个字符数组a中,例如n=123,在a中的存放为'3'、'2'、'1'。 [函数2.1] void convert(char *a,int n) int i; if((i=n/10)! =0) convert( (1) ,i); *a= (2) ; [函数2.2说明] 函数int index(char *s,char *t)检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。 [函数2.2] int index(char *s, char *t) int i,j=0;k=0; for(i=0; s[i]!='/0';i++) for ( (3) ;(t[k]!='/0')&&(s[j]!='/0') &&( (4) );j++,k++); if( (5) ) return (i); return (-1);
填空题阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]某班级有N名学生,他们可根据自己的情况选修名称和数量不尽相同的课程。设N等于6,学生信息、所选课程及成绩用链表结构存储,如图5-1所示。程序中相应的类型定义如下:#defineN6structnodecharcname[5];/*课程名*/intgrade;/*成绩*/structnode*next;/*指针,指示某学生选修的下一门课程及成绩*/;structstudentcharxh[5];/*学号*/charname[20];/*姓名*/structnode*link;/*指针,指示出选修的课程及成绩链表*/stud_info[n];Stud_info[]为一个全局数组。函数func(charkc[],int*num)的功能是统计选修了课程名为kc的学生的人数,并返回该课程的平均成绩(若无人选修该课程,则平均成绩为0),参数num带回选修课程kc的学生人数。[C语言函数]doublefunc(charkc[],int*num)inti,count=0,sum=0;/*count用于记录选修课程名为kc的学生的人数*/doubleavg=0.0;structnode*p;for(i=0;i<N;i++)p=(1);/*取第土个学生所修课程链表的头指针*/while(p)if((2))sum=(3);count++;break;;/*if*/p=p->next;/*while*/(4);if((5))avg=(double)sum/count;/*计算平均成绩*/returnavg;/*func*/从下列的2道试题(试题六至试题七)中任选1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 函数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({{U}} (1) {{/U}}> if(A->data<B->data) {lastnum=A->data; p=(Node*)malloc(sizeof(Node)); P->data=lastnum; P->next=*r; {{U}} (2) {{/U}}; do A=A->next; while({{U}} (3) {{/U}}>; } else iffA->data>B->data) B=B->next; else{ {{U}} (4) {{/U}}; lastnum=A->data; while (A } while(A){ lastnum=A->data; p=(Node*)malloc(sizeof(Node)); P->data=lastnum; {{U}} (5) {{/U}}; *r=P; while(A } }
填空题【说明】 从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编写程序,其功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移到该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放。最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT(),把结果XX输出到文件 OUT5.DAT中。 例如:原文:You can create an index on any field. you have the correct record. 结果:n any field.Yu can create an index rd. yu have the crreet res 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 【函数】 #include "stdio.h" #include "string.h" #include "conio.h" #include "ctype.h" #include "mem.h" unsigned char xx[50] [80] int maxline=0; int readdat(void); void writedat(void) /*将题目要求的字符串中所有小写字母o左边的字符串内容移到谊串的右边存放,即将串中“最后”一个字母o左右两侧的内容互换*/ void StrOR(void) inti; char*p1,* p2,t[80]; for(i=0;i<maxline;i++) t[0]='/0'; p2=xx[i]; while(*p2) /*找到最后一个别'o'*/ if( (1) )p1=p2; p2++; strcat(t,p1+1); *p1='/0'; strcat(t,xx[i]); p1=xx[i]; p2=t; while(*p2) /*删去字符'o'*/ if( (2) ) (3) =*p2; p2++; (4) ; void main() clrscr(); if(readdat()) printf("Can't open the file IN. DAT!/n"); return; StrOR(); writedat(); int readdat(void) FILE * fp; int i=0; char * p; if((fp=fopen("in.dat","r" ))==NULL) return 1; while(fgets(xx[i],80, fp)!=NULL) p=strchr(xx[i],'/n'); if(p) *p=0; i++; maxline: (5) ; fclose(fp); return 0; void writedat (void) FILE * fp; int i; fp=fopen("in.dat',"w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp," %s/n",xx[i]); fclose(fp);
填空题[说明]
完成以下中序线索化二叉树的算法。
[函数]
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));