问答题[说明] 当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在第一个显示面板上显示字符串"HelloWorld";在第二个显示面板上画一条直线。[Java代码]import java.awt. *;import javax.swing. *;public class HelloWorldApplet extends JApplet pubhc void (1) (2) str="HetloWorld"; JLabel label = new JLabel(str); this. getContentPane().add(label); import java.applet.Applet;import java.awt.Graphics;public class AppletPaint extends (3) public void paint( (4) ) g.drawLine(0,0,300,200); [HTML文档]<html><head><title> HTML Test Page </title></head><body><applet code=" (5) " width="300" height="100"></applet><applet code=" AppletPaint.class" width="300" height="100"></applet></body></html>
问答题7.
问答题【Java代码】 class usethread implements (1) int num usethread(int n) num=n; public void (2) for(int i=0;i<3;i++) System.out.println("running:"+num); System.out.println("finished:"+num); public class multhread public static void main(String args[]) (3) InterruptedException Thread m1=new Thread(new usethread(1)); Thread m2=new Thread(new usethread(2)); m1.start(); m2.start(); m1.join(); m2.join(); 【问题1】 补充完整上面Java代码中 (n) 处。 【问题2】 写出上面Java代码运行的结果。
问答题阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。
[说明]
正整数n若是其平方数的尾部,则称n为同构数。例如,6是其平方数36的尾部,76是其平方数5776的尾部,6与76都是同构数。下面的程序求解不超过10000的所有同构数。
已知一位的同构数有三个:1,5,6,因此二位同构数的个位数字只可能是1,5,6这三个数字。依此类推,更高位数同构数的个位数字也只可能是1,5,6这三个数字。
下面程序的处理思路是:对不超过10000的每一个整数a,判断其个位数字,若为1、5或6,则将a转换为字符串as,然后对a进行平方运算,并截取其尾部与as长度相等的若干字符形成字符串后与as比较,根据它们相等与否来断定a是否为同构数。
[C程序]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int myitoa(int,char*); /*将整数转换为字符串*/
/*right取得指定字符串尾部长度为length的子串,返回所得孔串的首字符指针*/
char*right(char*,int length);
int main()
{
int a,t; int len;
char as[10],rs[20];
printf("[1,10000]内的同构数:\n");
for(a=1; a<=10000;a++) {
t=______; /*取整数a的个位数字*/
if(t!=1
len=myitoa(a,as); /*数a转换为字符串,存入as*/
myitoa(a*a,rs); /*数a的平方转换为字符串,存入rs*/
/*比较字符串as与rs末尾长度为len的子串是否相等*/
if(strcmp(as,______)==0) /*若相同则是同构数并输出*/
printf("%s的平方为%s\n",as,rs);
}
return 0;
}
int myitoa(int num,char*s) /*将整数num转换为字符串存入s*/
{
int i,n=0;
char ch;
/*从个位数开始,取num的每一位数字转换为字符后放入s[]*/
while(num){
s[n++]=______+"0";
num=num/10;
}
s[n]="\0";
for(i=0; i<n/2;i++){ /*将S中的字符串逆置*/
______;s[i]=s[n-i-1]; s[n-i-1]=ch;
}
return n; /*返回输入参数num的位数*/
}
char*right(char*ms,int length)
/*取字符串ms尾部长度为length的孔串,返回所得孔串的首字符指针*/
{
int i;
for(;*ms;ms++); /*使ms到达原字符串的尾部*/
for(i=0;i<length;______); /*使ms指向所得孔串的首部字符*/
return ms;
}
问答题[说明]本程序提供了三阶矩阵加、减及乘运算的功能。用户单击“生成操作数”按钮将随机生成两个矩阵(即操作数1和操作数2),再单击某一矩阵运算按钮后,程序将输出相应运算的结果。程序运行界面如下:开发过程中,界面上从左至右三个文本框分别取名为Text1至Text3,“生成操作数”按钮名为CmdNew,“+”、“-”和“*”构成按钮控件组,分别名为CmdOperate(0)、CmdOperate(1)和CmdOperate(2)。已知n阶矩阵加、减法运算法则是对应位置的元素相加、减;n阶矩阵的乘法C=AB有公式:Cij=AilBij+AilBij+…+An1Bnj其中记号Xij表示矩阵X第i行第j列上的元素。程序使用的主要变量是三维数组matrix(3,3,3),其元素matrix(i,j,k)代表第i个矩阵j行k列上的元素,这里i,j,k均从0开始计数,第0、1、2个矩阵分别表示操作数1、操作数2和结果矩阵。代码中用到的子过程及其功能说明如下:(1)SubnewMatrices():随机产生矩阵运算的两个操作数;(2)SubprintOut(txtAsTextBox,iAsIntegcr):定义矩阵i向文本框txt的输出格式;(3)Suboperate(operationAsString):计算并输出矩阵运算结果。[VisualBasic代码]Dimmatrix(3,3,3)AsIntegerSubnewMatrices()………EndSubSubprintOut(txtAsTextBox,iAsInteger)………EndSubSuboperate(operationAsString)Dimi,j,kAsIntegerFori=0To2Forj=0To2(1)Case"+":matrix(2,i,j)=matrix(0,i,j)+matrix(1,i,j)Case"-":matrix(2,i,j)=matrix(0,i,j)-matrix(1,i,j)Case"*"matrix(2,i,j)=0Fork=0To2matrix(2,i,j)=matrix(2,i,j)+(2)NextEndSelectNextNextprintOut(3)EndSubPrivateSubCmdNew_Cliek()’“生成操作数”按钮的单击事件响应代码(4)printoutText1,0printoutText2,1EndSubPrivateSubCmdOperale_Click(IndexAsInteger)’矩阵运算按钮组的单击事件响应代码operateCmdOperate(Index).(5)EndSub
问答题6.
问答题【说明】 本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。 【代码】 #include<stdio.h> #include<stdlib.h> #include<string.h> char*replace(char *s1, char *s2,char *s3) char *p, *q, *r, *s; int |2,|3, i=0; |2=strlen(s2); |3=strlen(s3); p=s1; while((p=strstr(p,s2))!=NULL) i++; /* 统计s2串出现的次数*/ (1) ; i= (2) ; s=r=(char*)malloc(i); /*分配动态内存存放新字符串*/ p=s1; while(1) q=strstr(p, s2); /* s2串是否在s1中出现,q是首次出现的位置*/ if(q!=NULL) i=q-p; (3) ; r+=i; (4) ; r+=|3; p=q+|2; /*将指向s1串的指针移到s2子串出现的位置后, 为下一次循环做好准备*/ else /*q为空,表示剩余的s1串中已经没有s2*/ (5) ; break; /*终止循环*/ return(s); /*返回指向所形成的新串的指针*/ void main() char *a="sabcababde", *b="ab", *c="efg", *d; d=replace(a, b, c); printf("result=%s/n", d); free(d);
问答题[说明] 邻接表是图的一种顺序存储与链式存储结合的存储方法。其思想是:对于图G中的每个顶点 vi,将所有邻接于vi的顶点vj连成一个单链表,这个单链表就称为顶点vi的邻接表,其中表头称作顶点表结点VertexNode,其余结点称作边表结点EdgeNode。将所有的顶点表结点放到数组中,就构成了图的邻接表AdjList。邻接表表示的形式描述如下: #define MaxVerNum 100 /*最大顶点数为100*/typedef struct node /*边表结点*/ int adjvex; /*邻接点域*/ struct node *next; /*指向下一个边表结点的指针域*/ EdgeNode;typedef struct vnode /*顶点表结点*/ int vertex; /*顶点域*/ EdgeNode *firstedge; /*边表头指针*/VertexNode;typedef VertexNode AdjList[MaxVerNum]; /*AdjList是邻接表类型*/typedef struct AdjList adjlist; /*邻接表*/ int n; /*顶点数*/ALGraph; /*ALGraph是以邻接表方式存储的图类型*/ 深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。 下面的函数利用递归算法,对以邻接表形式存储的图进行深度优先搜索:设初始状态是图中所有顶点未曾被访问,算法从某顶点v出发,访问此顶点,然后依次从v的邻接点出发进行搜索,直至所有与v相连的顶点都被访问;若图中尚有顶点未被访问,则选取这样的一个点作起始点,重复上述过程,直至对图的搜索完成。程序中的整型数组visited[]的作用是标记顶点i是否已被访问。[函数]void DFSTraverseAL(ALGraph *G)/*深度优先搜索以邻接表存储的图G*/ int i; for(i=0;i< (1) ;i++) visited[i]=0; for(i=0;i< (1) ;i++)if( (2) ) DFSAL(G,i);void DFSAL(ALGraph *G,int i) /*从Vi出发对邻接表存储的图G进行搜索*/ EdgeNode *p; (3) ; p= (4) ; while(p!=NULL) /*依次搜索Vi的邻接点Vj*/ if(! visited[ (5) ]) DFSAL(G, (5) ); p=p->next; /*找Vi的下一个邻接点*/
问答题[说明] 本程序使用类来管理员工的通讯地址信息。已知程序的输出为: 输出记录:5 姓名:王丽华 街道地址:中华路15号 市:襄樊市 省:湖北省 邮政编码:430070[Java代码]public class Employee protected String (1) ; protected String street; protected String city; protected String prov; protected String post; protected int no; public Empbyee() public Employee(String name,String street,String city,String prov,String post, (2) ) this.name=name; this.street=street; this.city=city; this.prov=prov; this.post=post; this.no=no; public static void main(String[]args) Employee emp=new Employee(“王华”,“中华路15号”,“武汉市”,“湖北省”,“430070”,1); emp.changeName(“王丽华”); (3) (“襄樊市”); emp.changeNo(5); (4) ; void changeName(String name)this.name=name; void changeStreet(String street)this.street=street; void changeCity(String city)this.city=city; void changeProv(String prov)this.prov=prov; void changeNo(int no) (5) ; void display() System.out.println(“输出记录:”+this.no); System.out.Println(“姓名:”+this.name); System.out.println(“街道地址:”+this.street); System.out.println(“市:”+this.city); System.out.println(“省:”+this.prov); System.out.println(“邮政编码:”+this.post);
问答题试题五(15分,每空3分)阅读以下说明及VisualBasic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]甲乙两地之间的铁路线上有二十多个火车站,为方便乘客查询票价,特开发了火车票价查询程序,其运行窗口如下图所示。乘客只要通过两个下拉列表框分别选择起点与终点站名,再单击“查询”按钮,则票价文本框中就会显示相应的票价。在开发过程中,设选择起点和终点站名的组合框(ComboBox)名分别为ST和SP,显示票价的文本框(TextBox)名为Price,“查询”按钮(CommandButton)名为Query;设ST与SP中的诸列表项完全相同,且都是从甲地开始依次排列,从第i站到第j站的票价存放在二维对称矩阵P的元素P(i,j)中。假设从甲地到第i站行驶的距离存放在d(i)中,火车票价等于其行驶距离乘以C(常数)。[VisualBasic代码]Dimp(30,30)AsSingle'通用声明ConstC=0.2PrivateSubForm_Load()Dimd(30)AsSingle(1)="甲地"'在ST组合框中设置首个列表项……'在ST和SP中设置其他列表项(若干行语句)……'对数组d(i)赋值(若干行语句)Fori=0toST.(2)-1'对ST中各列表项循环Forj=0toSP.(2)-1'对SP中各列表项循环(这两处填写内容相同)P(i,j)=(3)NextjNextiEndSubPrivateSubquery_Click()i=(4)'组合框ST中选择的当前项编号j=……'组合框SP中选择的当前项编号(语句略)(5)=str$(p(i,j))EndSub
问答题{{B}}试题一{{/B}}阅读以下说明和流程图,回答问题1至问题3。[说明]信息处理过程中经常需要将图片或汉字点阵做旋转处理。一个矩阵以顺时针方向旋转90°后可以形成另一个矩阵,如下图所示:流程图2-1描述了对n*n矩阵的某种处理。流程图2-2是将矩阵A顺时针旋转90°形成矩阵B的具体算法。
问答题【说明】 已知窗体上有两个名为cmdGene和cmdSort的命令按钮。单击cmdCene按钮时,随机产生10个[1,100]范围内的整数并将它们放在数组intA中;单击cmdSort按钮时,用选择法排序这10个数并输出。 【程序代码】 Dim intA(1 To 10)As integer Private Sub cmdGene_Click( ) Dim intl As Integer Randomize For intl = 1 To 10 intA(intl) = (1) Next intl End Sub Private Sub cmdSort_Click( ) Dim intl, intJ,intMin, intTemp As Integer For intl = 1 To 9 intMin = intA(intl) For intJ= (2) To 10 If intA(intJ) < intMin Then Temp = intA(intJ) intA(intJ)= (3) intMin = intTemp End If Next intJ (4) (5) For intl = 1 To 10 Print Str(intA(intl))+" "; Next intl Next lntl Print End Sub
问答题
问答题【函数2.1说明】 有1、2、3、4四个数字,输出由这些数字组成的互不相同且无重、复数字的三位数。 【函数2.1】 main() int i,j,k; printf("/n"); for( (1) ) /*以下为三重循环*/ for(j=1; j<5;j++) for (k=1;k<5;k++) if ( (2) ) /*确保i, j, k 三位互不相同*/ printf("%d,%d,%d/n",i,j,k); 【函数2.2说明】 计算并输出100之内的素数,每行输出10个,超过10个则换行。 【函数2.2】 #include <stdio.h> #include "math.h" #define N 101 main() int i,j,line,a[N]; for(i=2;i<N;i++) (3) ; for(i=2;i<sqrt(N);i++) for(j=i+1;j<N;j++) if(a[i]!=0 printfC/n"); for(i=2,line=0;i<N;i++) if(a[i]!=0) prinff("%5d",a[i]); (5) ; if(line==10) prinff("/n"); line=0;
问答题[说明]下面的程序演示了根据随机产生的奖牌数,生成金银奖牌榜的过程。程序使用的排序法是简单排序法。以金牌得数为例,其思想是选择最大的元素,将它交换到最前面;然后对剩下的部分采用同样的方法,直到全部排序完成。程序界面中,左右两个文本框分别用于存放随机产生的奖牌数以及生成的奖牌榜,名为Text1和Text2,上下两个按钮分别名为Command1和Command2。代码中使用的量主要有:一维数组cntries,用于存储10个国家的名称,二维数组medals,其元素medals(i,0)和medals(i,1)分别用于存放第i个(i从0开始)国家的金、银牌数目。[VisualBasic代码]Dimcntries(10)AsString,medals(10,2)AsInteger’随机产生奖牌数SubnewMedals()……’为数组cntries和medals赋值EndSub’输出奖牌榜SubprintOut(txtAs(1))DimstrResuhAsString,iAsIntegerstrResult=“国家”&Chr(9)&“金牌数”&Chr(9)&“银牌数”&vbCrLfFori=0To9strResult=strResult&cntries(i)&Chr(9)&medals(i,0)&Chr(9)&medals(i,1)&vbCrLfNexttxt.Text=strResultEndSub’交换两变量的值Subexchange((2)aAsVariant,(2)bAsVariant)DimtempAsVarianttemp=a:a=b:b=tempEndSub’随机产生并输出奖牌数PrivateSubCommand1_Click()newMedalsprintOutText1EndSub’生成并输出奖牌榜PrivateSubCommand2_Click()Dimi,j,kAsInteger,tempAsStringFori=0To9’按金牌数排序j=i’找到自第i个位置起全部数据中金牌得数最多者,记其下标为jFork=i+1To9If(3)Thenj=kNextIfi<>jThen’若i,j不等,则交换对应位置的国家名、金银牌数目exchangecntnes(i),entries(j)exchangemedals(i,0),medals(j,0)exchangemedals(i,1),medals(j,1)EndIfNextFori=0To9’按银牌数进行二次排序j=iFork=i+1To9Ifmedals(k,0)<>medals(j,0)Then(4)If(5)Thenj=kNextIfi<>jThenexchangecntries(i),cntries(j)exchangemedals(i,1),medals(j,1)EndIfNextprintOutText2EndSub
问答题阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。[说明]已知数组A[1:n]中各个元素的值都是非零整数,其中有些元素的值是相同的(重复)。为删除其中重复的值,可先通过以下流程图找出所有的重复值,并对所有重复值赋0标记。该流程图采用了双重循环。处理思路:如果数组A某个元素的值在前面曾出现过,则该元素赋标记值0。例如,假设数组A的各元素之值依次为2,5,5,1,2,5,3,则经过该流程图处理后,各元素之值依次为2,5,0,1,0,0,3。[流程图]
问答题【说明】 希赛教育集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应聘者的成绩从高分至低分的顺序进行排队录取。公司的录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。 程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都做了录取处理。 程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组rz[]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。 【程序】 #include<stdio.h> #include<malloc.h> #define M 20 #define PEMARK 5 typedef struct stu int no, total, z[2], sortm, zi; struct stu *next; STU; struct rzmode int Imt, count; STU *next; rz[M]; STU *head=NULL, *over=NULL; int all FILE *fp; char dataf[]="pp07.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=1;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) ; insed( 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");
问答题【说明】
函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
#define MAXSIZE 32
typedef struct {
int * elem; /*栈的存储区*/
int max; /*栈的容量,即栈中最多能存放的元素个数*/
int top; /*栈顶指针*/
}Stack;
【代码】
int InitStack(Stack * S,int n) /*创建容量为n的空栈*/
{ S -> elem = (int*) malloc(n*sizeof(int));
if(S -> elem == NULL) return-1
S->max=n;{{U}} (1) {{/U}}=0;return 0;
}
int Push (Stack * s,int item) /*将整数item压入栈顶*/
{ if(S->top==S->max){printf("Stack is full! /n");return-1;}
{{U}}(2) {{/U}}= item; return 0
}
int StackEmpty(Stack S) { return(! S. top)? 1:0; }/*判断栈是否为空*/
int Pop(Stack * S) /*栈顶元素出栈*/
{ if(! S->top) { printf("Pop an empty stack! /n") ;return -1;}
return {{U}}(3) {{/U}};
}
void MultibaseOutput(long n,int B)
{ int m;Stack S
if (InitStack( return;}
do {
if( Push( return;}
n= {{U}}(5) {{/U}};
}while(n!=0);
while(!StackEmpty(S)){ /*输出B进制的数*/
m = Pop(
if(m<10) printf("%d",m) ;/*小于10,输出数字*/
else printf("%c",m+55); /*大于或等于10,输出相应的字符*/
}
printf( "/n") ;
}
问答题{{B}}试题一{{/B}}阅读以下说明和流程图,回答问题1和问题2。【说明】为便于管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”和10个数字组成,其格式为:ISBN组号-出版者号-书名号-校验码。其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=10*a(1)+9*a(2)+8*a(3)+…1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。例如,信息处理技术员考试大纲的标准书号为:ISBN7-302-11191-X。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号。第2段上的“302”表示清华大学出版社。标准书号的校验过程如图1-1所示,计算校验码的过程如图1-2所示,其中,Mod(S,11)表示S除以11得到的余数。【流程图】【问题1】请填补流程图中的空缺(1)~(4)。
问答题
