填空题[说明] 下面程序定义了一个类Point及其成员函数,然后从类Point派生出类Circle及其成员函数。 [Java程序] class Mainjava public static void main (String arg[]) Circle c=new Circle(2.5,3.7,4.3); System.out.println(" X coordinate is "+c.getX() +"/nRadius is: "+c.get Radius()); (1) ; //设置新的圆心(2,2) Point pRef=c; System.out.println("/n Circle printed as a point is : " +"["+ (2) +"."+ (3) +"]"): class Point protected double x,y; public Point (double a, double b) x = a; y = b;) void setPoint (double a, double b) x = a; y = b; final double getX () return x; final double getY () return y; class Circle (4) protected double radius; public Circle(double r, double a, double b) (5) ; radius=r ; void setRadius (double r) radius=r; final double getRadius () return radius; final double area () return 3.14159*radius*radius;
填空题【说明】将A,B,C,D,E,F这6个变量排成如图(a)所示的三角形,这6个变量分别取[1,6]中的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。图(b)就是一个解。程序引入变量a,b,c,d,e,f,并让它们分别顺序取1~6的整数,在它们互不相同的条件下,测试由它们排列成的如图(a)所示的三角形三条边上的变量之和是否相等,如果相等即为一种符合要求的排列,就输出它们。【程序】voidmain(){inta,b,c,d,e,f;for(a=1;a<=6;a++)for(b=1;b<=6;b++){if({{U}}(1){{/U}})continue;for(c==1;c<=6;c++){if({{U}}(2){{/U}})continue;for(d=1;d<=6;d++){if({{U}}(3){{/U}})continue;for(e=1;e<=6;e++){if({{U}}(4){{/U}})continue;f=21-(a+b+c+d+e);if({{U}}(5){{/U}}){printf("%6d",a);printf("%4d%4d",b,f);printf("%2d%4d%4d",c,d,e);scanf("%*c");/*按回车键,继续找解*/}}}}}}
填空题【说明】
编写字符界面的Application程序,接收依次输入的10个整型数据,每个数据一行,将这些数据按升序排序后从系统的标准输出设备输出。
【Java代码】
import java.iO.*;
import java.util.* ;
public class compositor
{
public static void main ( String args[] )
{
final int NUMBER=10;
Vector dataVector=new Vector ();
try
{
BufferedReader br=new BufferedReader (
{{U}}(1) {{/U}}InputStreamReader ( System.in ));
System.out.println ("请输入"+NUMBER+"个整数");
for (int i=0; i<NUMBER; i++ )
{
int temp=Integer.parselnt ( br.{{U}} (2) {{/U}});
int low=0, high=i-1, mid=0;
while ({{U}} (3) {{/U}})
{
System.out.println ( low+","+mid+","+high );
{{U}}(4) {{/U}};
if ((( Integer ) dataVectOr.get( mid )) .intValue () ==temp )
{
data Vector.insertElementAt ( new Integer ( temp ), mid );
break;
}
else if ((( Integer ) dataVector.get ( mid )) .intValue ( ) >temp )
{
high=mid-1;
}
else
{
{{U}}(5) {{/U}};
}
}
if ( low>high )
{
dataVector, insertElementAt ( new Integer ( temp ), iow );
}
}
//输出
System.out.println ( "/n升序的排序结果为; ");
for (int i=0; i<NUMBER; i++ )
{
System.out.print ( dataVector.get( i ) .toString () +"/t" );
}
}
catch ( NumberFormatException nfe)
{
System.out.println ( nfe.toString ());
System.out.println ( "整数格式输入错误。");
}
catch ( IOException ioe )
{
System.out.println ( ioe.toString ());
}
}
}
填空题[流程图说明]下列流程图用泰勒(Taylor)展开式sinx=x-x3/3!+x5/5!-x7/7!+…+(-1)n*x2n+1/(2n+1)!+…计算并打印sinx的近似值。其中用ε(>0)表示误差要求。[流程图]
填空题[说明2] 有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下[C程序代码2]给出了一种实现方法。 [C程序代码2] int flag[2]; /*flaq数组, 初始化为FALSE*/ Enter_Critical_Section (int my_task_id, int other_task_id) while (flag [other_task_id]==TRUE); /*空循环语句*/ flag[my_task_id]=TRUE; Exit_Critical_Section (int my_task_id, int other_task_id) flag[my_task id]=FALSE; 当一个进程要访问临界资源时,就可以调用[C程序代码2]给出的这两个函数。[C程序代码3]给出了进程0的一个例子。 [C程序代码3] Enter_Critical_Section(0,1) ; …使用这个资源… Exit_Critical_Section (0,1) ; …做其他的事情…
填空题【说明8.1】
以下程序的功能是:生成20个200~300之间的随机整数,输出其中能被5整除的数并求出它们的和。
【程序代码8.1】
Private Sub Command1_Click()
For i=1 To 20
x=Int({{U}} (1) {{/U}}*200+100)
If{{U}} (2) {{/U}}=0 Then
Print x
S=S+{{U}} (3) {{/U}}
End If
Next i
Print"Sum=";S
End Sub
【说明8.2】
程序8.2运行后,单击窗体,则在窗体上显示的内容是:a={{U}} (4) {{/U}}和b={{U}} (5) {{/U}}。
【程序代码8.2】
Private Sub Form_Click()
Dim a As Integer,b As Integer
a=20:b=50
p1 a,b
p2 a,b
p3 a,b
Print"a=";a,"b=";b
End Sub
Sub p1(x As Integer, ByValy As Integer)
x=x+l0
y=y+20
End Sub
Sub p2(ByVal×As Integer, y As Integer)
x=x+l0
y=y+20
End Sub
Sub p3(ByVal×As Integer, ByVal y As Integer)
x=x+10
y=y+20
End Sub
填空题[说明] 八皇后问题是指求解如何在国际象棋8*8棋盘上无冲突地放置八枚皇后棋子。因为在国际象棋里,皇后的移动方式是横竖交叉,所以在任意一个皇后所在位置的水平、竖赢和斜45。线上都不能有其他皇后棋子的存在。一个完整无冲突的八皇后棋子分布称为八皇后问题的一个解。本程序实现了八枚皇后棋子在8*8棋盘上无冲突的放置。 [函数] #include<math. h> #include<stdio.h> #define MAX 8 /*棋子数及棋盘大小MAX*MAX*/ int board [MAX]; /*印出结果*/ void show_result() int i; for (i=0;i<MAX;i++) printf("(%d, %d)",i,board [i]); printf("/n"); /*检查是否在同一直横斜线上有其他棋子*/ int check_cross (int n) int i; for(i=0; i<n; i++) if( (1) )return 1; return 0; /*放棋子到棋盘上*/ void put_chess (int n) int i; for (i=0; i<MAX; i++) board [n] =i; if( (2) ) if( (3) )show_result(); /*找到其中一种放法了,印出结果*/ else (4) ; void main() clrscr(); puts("The possible placements are:"); (5) ; puts("/n Press any key to quit…"); getch(); return:
填空题[说明]某绘图系统中有两个画矩形的程序DP1和DP2。程序DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,程序DP2则用函数drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为Bridge(桥接)模式。图8-10显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理3个对象:Shape对象、Drawing对象,以及DP1或DP2对象。以下是Java语言实现,能够正确编译通过。[Java代码]//DP1.java文件publicclassDP1staticpublicvoiddrawaline(doublex1,doubley1,doublex2,doubley2)...//省略具体实现//DP2.java文件publicclassDP2staticpublicvoiddrawline(doublex1,doubley1,doublex2,doubley2)...//省略具体实现//Drawing.java文件abstractpublicclassDrawing(1)publicvoiddrawLine(doublex1,doubley1,doublex2,doubley2);//V1Drawing.java文件publicclassV1DrawingextendsDrawingpublicvoiddrawLine(doublex1,doubley1,doublex2,doubley2)DP1.drawaline(x1,y1,x2,y2);//V2Drawing.java文件publicclassV2DrawingextendsDrawingpublicvoiddrawLine(doublex1,doubley1,doublex2,doubley2)//画一条直线(2);//Shape.java文件abstractpublicclassShape(abstractpublicvoiddraw();private(3)dp;Shape(Drawingdp)_dp=dp;protectedvoiddrawLine(doublex1,doubley1,doublex2,doubley2)(4);//Rectangle.java文件publicclassRectangle(5)privatedouble_x1,_x2,_y1,_y2;publicRectangle(Drawingdp,doublex1,doubley1,doublex2,doubley2)(6);_x1=x2;_x2=x2;_y1=y1;_y2=y2;publicvoiddraw()…//省略具体实现
填空题[程序5.1说明]
下列程序运行时,当单击窗体后,从键盘输入一个字符,判断该字符是字母字符、数字字符还是其他字符,并做相应的显示。窗体上无任何控件,并禁用Ase和Chr函数,Select Case语句中禁用枚举值。
[Visual Basic代码]
Private Sub Form Load ()
Dim x As String*1
X={{U}} (1) {{/U}} (“请输入单个字符”,“字符”)
Select Case UCase ({{U}} (2) {{/U}})
Case {{U}}(3) {{/U}}。
Print X+“是字母字符”
Case {{U}}(4) {{/U}}
Print X+ “是数字字符”
Case Else
Print X+“是其他字符”
End Select
[程序5.2说明]
在窗体上画一个名称为Timer1的计时器和一个名称为Labe11的标签。当运行程序后,将在标签中显示当前时间的数字时钟(包括时:分:秒)。
[Visual Basic代码]
Private Sub Fom_Load ()
Timer1.Interval=1000
EndSub
Private Sub Timer1_ timer() {{U}}(5) {{/U}}
EndSub
填空题[说明]下面的流程图说明的是图的深度遍历。它的基本思想是:以图中某一结点作为当前结点,然后进行以下过程:(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 );
}
