问答题【说明】 下面的程序是从命令行输入3个数传递到public static void main(String args[])方法中 (如java IsTriangle 3 4 5),并判断这3个数能否构成三角形的3条边,并显示相应的结果。请在程序的每条横线处填入适当的语句,使程序的功能完整。 注意:请勿改动main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class IsTriangle public static void main( String args[ ]) int a[] =new (1) [args. (2) ]; for(int i=0;i<3; (3) ) a[i]= (4) if( (5) ) System. out. println(a[0] +","+a[1] +","+a[2]"能构成三角形的3条边"); else System. out. println(a[0] +","+a[1] +","+a[2]"不能构成三角形的3条边);
问答题【说明】
实现连通图G的深度优先遍历(从顶点v出发)的非递归过程。
【算法】
第一步:首先访问连通图G的指定起始顶点v;
第二步:从V出发,访问一个与v{{U}} (1) {{/U}}p,再从顶点P出发,访问与p{{U}} (2) {{/U}}顶点q,然后从q出发,重复上述过程,直到找不到存在{{U}} (3) {{/U}}的邻接顶点为止。
第三步:回退到尚有{{U}} (4) {{/U}}顶点,从该顶点出发,重复第二、三步,直到所有被访问过的顶点的邻接点都已被访问为止。
因此,在这个算法中应设一个栈保存被{{U}} (5) {{/U}}的顶点,以便回溯查找被访问过顶点的未被访问过的邻接点。
问答题【程序说明】 函数int commstr(char * str1,char * str2,int * sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。 函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。 【程序】 int strlen(char * s) char *t=s; while( * ++); return t-s-1; int commstr(char) *str1,char *str2,int *sublen char*s1, *s2; int count=0,len1 ,len2,k,j,i,p; len1:=strlen(str1) len2 = strlen(str2); if(len1>len2) s1=str1 ;s2=str2; else len2 = len1;s1 = str2;s2 = str1; for(j=len2;j>0;j--) /*从可能最长子串开始寻找*/ for(k=0; (1) <:len2;k++) /*k为子串s2的开始位置*/ for(i=0;s1[ (2) ]!='/0';i++;) /*i为子串s1的开始位置*/ /*s1的子串与s2的子串比较*/ for (p=0;p<j)p++); if ( (4) ) /*如果两子串相同*/ for(p=0);p<j;p++ /*输出子串*/ printf ("%c",s2[k+p]); printf ("/n"); count++;/*计数增1 */ if (count>0) break; *sublen=(count>0)? (5) :0; return count;
问答题【说明】 Fibonacci数列A=1,1,2,2,5,8,…)有如下性质: a0=a1=1 ai=ai-1+ai-2,i>1 对于给定的n,另外有一个由n个元素组成的数列xn,该数列中各元素的值为: xi=ai/ai+1,i=0,1,…,n 现要求对xn中的元素按升序进行排序,然后以分数形式输出排序后的xn。例如n=5时,排序前的xn=1/1,1/2,2/3,3/5,5/8,排序后的xn=1/2,3/5,5/8,2/3,1/1。程序中函数make()首先生成排序前的xn,然后调用函数sort()进行排序,最后输出所求结果。 【程序】 #include <stdio.h> #include <stdlib.h> #include <malloc.h> struct fact long m,n; ; void sort(int n,struct fact *p) int a; long s,t,u,v; struct fact *q,*end; for(end=p+(n-1),a=1;a;end--) for(a=0,q=p;q<end;p++) s=q->m; t=q->n; u=(q+1)->m; v=(q+1)->n; if( (1) ) q->m=u; (2) (3) (q+1)->n=t; a=1; void make(int n) int i; long a,b,c; struct fact *x,*y; x=(struct fact *)malloc(sizeof(struct fact)*n); x->m=1: x->n=1; for(a=1,b=1,i=2;i<=n;i++) (4) a=b; b=c; (x+(i-1))->m=a; (x+(i-1))->n=b; (5) printf("x%d=%1d/%1d",n,x->m,x->n); for(y=x+1;y<x+n;y++) printf(",%1d/%1d",y->m,y->n); printf("/n"); free(x); void main() int n; printf("input n:"); scanf("%d", make(n);
问答题【说明】
下面的程序按照以下规则输出给定名词的复数形式。
a.若名词以“y”结尾,则删除y并添加“ies”;
b.若名词以“s”、“ch”或“sh”结尾,则添加“es”;
c.其他所有情况,直接添加“s”。
【C程序】
#include <stdio.h>
#include <string.h>
char*plural(char *word)
{
int n;
char *pstr;
n=strlen(word); /*求给定单词的长度*/
pstr=(char*)malloc(n+3);/*申请给定单词的复数形式存储空间*/
if (!pstr||n<2)
return NULL;
strcpy(pstr,word); /*复制给定单词*/
if ({{U}} (1) {{/U}})
{
pstr[n-1]='i';pstr[n] ='e';pstr[n+1]='s';{{U}} (2) {{/U}};
}
else
if(pstr[n-1]=='s'| |pstr[n-1]=='h'&&({{U}} (3) {{/U}}))
{
pstr[n]='e';pstr[n+1]='s';pstr[n+2]='/0';
}
else
{ pstr[n]='s';pstr[n+1]='/0';)
{{U}} (4) {{/U}};
}
main()
{ int i; char *ps;
char wc[9][10]=
{"chair","dairy","boss","circus","fly","dog","church","clue","dish");
for(i = 0;i<9; i++) {
ps={{U}} (5) {{/U}};
printf("%s: %s/n",wc[i],ps); /*输出单词及其复数形式*/
free(ps); /*释放空间*/
}
system("pause");
}
问答题试题一(共15分)阅读以—厂说明和流程图,填补流程图中的空缺(1)~(5)将解答填入答题纸的对应栏内。[说明]本流程图旨在统计一本电子书中各个关键词出现的次数。假设已经对该书从头到尾依次分离出各个关键词(A(i)|i=1,…,n)(n>1)),其中包含了很多重复项,经下面的流程处理后,从中挑选出所有不同的关键词共m个{K(j)|j=1,…,m},而每个关键词K(j)出现的次数为NK(j),j=1,…,m。[流程图]
问答题[说明]本程序实现的功能是判断指定的文本文件中是否包含指定的字符串,并且如果包含则返回其第一次出现的位置(行号、列号)。程序运行界面如下图所示,用户只要通过驱动器列表框、目录列表框选定文件夹,文件列表框会自动列出该文件夹下所有文本文件名称,选中其中某个文件,再输入目标字符串并且单击“查找”按钮,就能看到查找的结果。在开发过程中,驱动器列表框名为Drive1,目录列表框名为Dirl,文件列表框名为File1,目标字符串输入框名为Text1,“查找”按钮名为Command1。[VisualBasic代码]PrivateSubDrivel_Change()Dirl.Path={{U}}(1){{/U}}'更新目录列表框的路径EndSubPrivateSubDirl_Change(){{U}}(2){{/U}}=Dirl.Path'更新文件列表框的路径EndSubPrivateSubCommandl_Click()Dimfso,aAsObjectDimi,jAsIntegerIf{{U}}(3){{/U}}=""Then'判断是否已经选中某个文件MsgBox"请选择一个文件文件!"{{U}}(4){{/U}}'退出事件过程EndIf'创建文件系统对象以及文本流对象Setfso=CreateOhjecl("Scripting.FileSystemOhject")Seta=fso.OpenTextFile(Dirl.Path&"/"&{{U}}(3){{/U}})i=1DoWhile{{U}}(5){{/U}}<>True'逐行读取文件,直至文件末尾strLine=a.ReadLinej=InStr(1,{{U}}(6){{/U}})'返回目标字符串在文件这一行中的位置Ifj>0Then'如果目标字符串在这一行出现,则返回其位置MsgBox"字符串第一次出现的位置是"&"("&i&","&j&"),,"{{U}}(4){{/U}}'退出事件过程EndIfi:i+lLoopMsgBox"字符串在文件中不出现,"EndSub
问答题【说明】 函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。 【函数】 void QuickSort( int A[ ],int s,int t) int i=s,j=t+1,temp; int x=A[s]; do do i ++ ;while (1) ; do j -- ;while(A[j]>x); if(i<j)temp=A[i]; (2) ; (3) ; while(i<j); A[a] =A[j];A[j] =x; if(s<i-1) (4) ; if(j+1<t) (5) ;
问答题【说明】
在下面函数横线处填上适当的字句,使其输出结果为:
构造函数.
构造函数.
1,2
5,6
析构函数
析构函数.
【C++代码】
#include "iostream.h"
class AA
{ public;
AA(int i,int j)
{A=i; B=j;
cout<<"构造函数./n";
}
~AA(){{{U}} (1) {{/U}};}
void print();
private:
int A, B;
};
void AA∷print()
{cout<<A<<","<<B<<endl;}
void main()
{
AA *a1, *a2;
{{U}}(2) {{/U}}=new AA(1, 2);
a2=new AA(5, 6);
{{U}}(3) {{/U}};
a2->print();
{{U}}(4) {{/U}}a1;
{{U}}(5) {{/U}}a2;
}
问答题【说明】本程序对某电码文(原文)进行加密形成密码文,其加密算法如下:假定原文为C1,C2,C3,…,Cn加密后形成的密文为S1,S2,S3,…,Sn,首先读入正整数key(key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示:加密时从S1位置起顺时针计数,当数到第key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第key个字符位置时,将原文中字符C2放入其中,并从环中除去该字符位置:依次类推,直至n个原文字符全部放入密文环中。由此产生的S1S2…Sn即为原文的密文。例如,当Key=3时,原文thisisadecodingsystem的密文为:aotgnhediysdimietsncss当Key=4时,该原文的密文为:ssdtydhtegiasiscnmeion本程序将电码的原文存放在字符数组old中,加密钥匙存放在整数key中。函数decode用于将原文old加密并返回密文字符数组的首指针。其中函数采用一个双向循环链表CODE来表示密文环:函数strlen用于计算一个字符串中的字符个数(不包括字符串结尾符'/O')。为了简单起见,程序中假设内存容量足以满足动态存储单元分配的要求。#include<stdio.h>#include<stdlib.h>typedefstructnode{charch;structnode*forward;/*Linktonextnode.*/structnode*backward;/*Linktopreviousnode.*/}CODE;intstrlen(char*s){intlen=0;while(*s++!='/0')len++;return(len);}char*decode(char*otd,intkey){char*New;intlength,count,i;CODE*loop,*p;length=strlen(old);loop=(CODE*)malloc(length*sizeof(CODE));for(i=1;i<length-1;i++) {loop[i],forward={{U}}(1){{/U}}}loop[0].backward=loop[0],forward=loop[length-1].forward=loop;{{U}}(2){{/U}}for(p=loop,i=0;i<length;i++) {for(count=1;count<key;count++p=p->forward;{{U}}(3){{/U}}p->backward->forward=p->forward;p->forward->backward=p->backward;{{U}}(4){{/U}}}New=(char*)malloc((length+1)*sizeef(char));for(i=0;i<length;i++){{U}}(5){{/U}}New[length]='/0';return(New);}voidmain(){charold[256];intkey,num=0;printf("/nPleaseinputthetelegraph:/n");while(num<255old[(num==255)?num:num-1]='/0';do{printf("/nPleaseinputKey(Key>1):");scanf("%d",}while(key<=1);printf("/nThedecodeoftelegraph:'%s'is:/n'%s'/n",old,decode(old,key));}
问答题阅读以下说明和流程图,回答问题将解答填入对应栏。[说明]下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。注:返回值用pos表示。[问题]将流程图的(1)~(5)处补充完整。
问答题试题六(共15分)阅读以下说明和Java程序,填充程序中的空缺,将解答填入答题纸的对应栏内。[说明]下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图6-1所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。[java代码]
问答题阅读以下技术说明和问题模型图,根据要求回答问题1和问题2。【说明】某大学城图书馆需要在无线阅览厅的某些位置上放置无线接入点AP(AccessPoin)。假设每个无线AP覆盖范围的半径是6米,因此必须使得每台笔记本电脑上的无线网卡到某个无线AP的直线距离不超过6米。为了简化问题,假设所有无线网卡在同一直线上,并且无线AP沿该直线放置。该问题可以建模为如图1-16所示,其中直线表示无线网卡所在的直线,实心正方形表示无线网卡。现利用贪心策略实现用尽可能少的无线AP覆盖所有的无线网卡。实现贪心算法的流程如图1-17所示。其中,①d[i](1≤i≤N)表示第i张无线网卡到通道A端的距离,N表示无线网卡的总数,无线网卡的编号按照无线网卡到通道A端的距离从小到大进行编号;②s[k]表示第k(k≥1)个无线AP到通道A端的距离。算法结束后k的值为无线AP的总数。
问答题[说明] 本程序实现了雇员信息管理功能,其中封装了雇员信息及其设置、修改、删除操作。已知当输入为“Smith 31 2960.0”时,程序的输出是: 姓名:Smith 年龄:31 工资:2960 姓名:Smith 年龄:31 工资:3500 姓名:Mary 年龄:23 工资:2500[C++程序]#include <iostream.h>#include <string.h>class employee char *name; //雇员姓名 short age; //年龄 float salary;//工资 public: employee(); void set_name(char *); void set_age(short a) age=a; void set_salary(float s) salary=s; (1) ; ~ employee()delete[] name;;employee::employee() name=""; age=0; salary=0.0;void employee::set_name(char *n) name=new char[strlen(n)+1]; (2) (name,n);void employee::print() cout<<"姓名":"<<name<<" 年龄:"<<agc<<" 工资:" <<salary<<endl;void main() char *na; short ag=0; float sa=0; (3) ; na=new char[10]; cin>>na>>ag>>sa; emp.set_name(na); emp.set_age(ag); emp.set_salary(sa); emp.print(); (4) (3500.0); emp.print(); (5) ; emp.set_name("Mary"); emp.set_age(23); emp.set_salary(2500.0); emp.print();
问答题(5)
问答题【说明】
函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为
typedef struct node {
int key;
struct node * next;
} *LinkedList;
【函数】
int DelA_InsB ( LinkedList La, LinkdeList Lb,int key1,int key2,,int len)
{ LinkedList p,q,s,prep,pres;
int k;
if( ! La->next || ! Lb-> next ||| en <=0)return-1;
p = La -> next;prep = La;
while(pp = p -> next;
}
if( ! p) return - 1; /*在表A中不存在键值为key1的结点*/
q=p;k=1;
while(q k++;
}
if( ! q)return -1; /*表A中不存在要被删除的len个结点*/
s = Lb -> next; {{U}}(3) {{/U}};
while(s s =s->next;
}
if( ! s) return - t; /*表B中不存在键值为key2的结点*/
{{U}}(4) {{/U}}=q-> next; /*将表A中的len个结点删除*/
q->next={{U}} (5) {{/U}};
pres -> next = p; /*将len个结点移至表B */
return 0;
}
问答题阅读以下技术说明和流程图,根据要求回答问题1至问题3。[说明]图4-8的流程图所描述的算法功能是将给定的原字符串中的所有前部空白和尾部空白都删除,但保留非空字符。例如,原字符串“FileName”,处理变成“FileName”。图4-9、图4-10和图4-11分别详细描述了图4-8流程图中的处理框A、B、C。假设原字符串中的各个字符依次存放在字符数组ch的各元素ch(1)、ch(2)、…、ch(n)中,字符常量KB表示空白字符。图4-8所示的流程图的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将ch(i)、……、ch(j)依次送入ch(1)、ch(2)、……中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在图4-8流程图中,strlen()是取字符串长度函数。图4-8算法总流程图图4-9处理框A对应的流程图图4-10处理框B对应的流程图图4-11处理框C对应的流程图
问答题【说明】 编写程序,生成一个新文本文件,它由一个已知文本文件的所有偶数行组成。要求已知文本文件名和新文本文件名均从键盘输入。请填空完善程序。 【C语言程序】 #include<stdio.h> main() FILE *oldf,*newf; char ch,fname[20]; int i; do printf("Enter name of existed text file to be read:"); scanf("%s",fname); if((oldf=fopen(fname,"r"))==NULL) printf("File %s can't open!/n",fname); while(oldf==NULL); do printf("Enter mane of new text file to be written:"); scanf("%s",fname); if(( (1) ==NULL) printf("File %s can't open!/n",fname); while( (2) ); i=1; while(!feof(oldf)) while((ch=fgetc(oldf))!= (3) ) if(i%2== (4) ) fputc(ch,newf); fputc('/n',newf); (5) ; fclose(oldf); fclose(newf);
问答题[说明]
本程序的功能是产生一个抽奖游戏中的随机数组合。抽奖的规则是从自然数1至50中无重复抽取6个数。为了保证抽取的无重复性,将50个自然数放在数组source中。每抽取了一个数,就用数组的最后一个数来改写这个被抽中的数,并把数组的长度减1。为使输出更为清晰,把抽取出来的6个数放在数组target中,经过排序(Arrays类中的sou方法实现排序)然后输出。注:Math.random方法返回一个在0(包含)到1(不包含)之间的随机浮点数。
[Java代码]
import java. util. *;
public class DrawOut
{ public static void main (String[ ] args) {
int n =50;
int k =6;
int[ ] source = new int[n];
for(int i=0; i <{{U}} (1) {{/U}};i++)
source[i] = i + 1;
int[ ] target = new int[k];
//将抽中的数字从source数组中取出,放入到target数组
for (int i = 0; i <{{U}} (2) {{/U}}; i+ +) {
int r = (int) (Math. random() *{{U}} (3) {{/U}});
target[i] = source[r];
.... [r] ={{U}} (4) {{/U}};
{{U}} (5) {{/U}};
}
Arrays. sort(target);
for (int i = 0; i < target, length; i + + )
System. out. prinfln ( target [i] );
}
}
问答题试题六(15 分,每空3 分)
阅读以下说明、Java 代码和HTML 文档,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
当用户启动html 浏览器并首次打开下面的html 文档时,Java Applet 小程序在显示面板上显示字符串“Welcome !”;当html 页面被其它窗口遮挡后再次显示时,小程序在显示面板上显示“Welcome back !”。
[Java 代码]
import java.awt.*;
import java.applet.*;
public class HelloApplet extends (1) {
public void paint( (2) ){
g.drawString(message,10,20);
message = "welcome back ! ";
}
public void (3) (){
message = "Welcome ! ";
}
private (4) message;
}
[HTML 文档]
HTML Test HelloApplet Page
Test HelloApplet 小程序