问答题[Java代码]
问答题
问答题阅读以下说明和C函数,将解答填入答题纸的对应栏内。
[说明]
函数del_substr(S,T)的功能是从头至尾扫描字符串S,删除其中与字符串T相同的所有子串,其处理过程为:首先从串S的第一个字符开始查找子串T,若找到,则将后面的字符向前移动将子串T覆盖掉,然后继续查找子串T,否则从串S的第二个字符开始查找,依此类推,重复该过程,直到串S的结尾为止。该函数中字符串的存储类型SString定义如下:
typedef struct {
char* ch; /*串空间的首地址*/
int length; /*串长*/
}SString;
[C函数]
void del_substr(SString* S, SString T)
{
iht i, j;
if(S->length<1 ||T.length<1 ||S->length<T.length)
return;
i=0; /* i为串S中字符的下标*/
for (;;) {
j =0; /*j为串T中字符的下标*/
while(i<S->length j++;
}
else {
i={{U}} (1) {{/U}};j=0; /*i值回退,为继续查找T做准备*/
}
}
if({{U}} (2) {{/U}}){ /*在s中找到与T相同的子串*/
i={{U}} (3) {{/U}}; /*计算s中子串T的起始下标*/
for(k=i+T.length;k<S->length;k++)/* 通过覆盖子串T进行删除*/
S->ch[{{U}} (4) {{/U}}] =S->ch[k];
S->length={{U}} (5) {{/U}}; /* 更新S的长度*/
}
else break; /* 串S中不存在于串T*/
}
}
问答题【函数2.1说明】 函数palindrome(char s[])的功能是,判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:“LEVEL”是回文字符串,而“LEVAL”不是。 【函数2.1】 int palindrome( char s[ ] ) char * pi, * pj; pi=s; pj=s+strlen(s)-1; while( pi<pjpj -- if( (2) )return -1; else return 0; 【函数2.2说明】 函数f(char * str,char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。 例如若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出3个子字符串,分别为“12”、“4”和“5”。 【函数2.2】 void f( char * str, char del) int i ,j ,len; len = strlen (str) i=0; while(i < len) while( (3) )i++; /*忽略连续的标志字符*/ /*寻找从str[i]开始直到标志字符出现的一个子字符串*/ j=i+1; while(str[j] != del /*给找到的字符序列置字符串结束标志*/ printf("%s/t", (5) ;
问答题[函数2.1说明] 下面程序的功能是计算x和y的最小公倍数。[函数2.1]main() int m,n,d,r; seanf("%d %d", if(m<n) r=m;m=n;n=r; (1) ; while (d%n! =0) (2) ; printf("%d/n",d);[函数2.2说明] 下述程序接收键盘输入,直到句点“.”时结束。输入的字符被原样输出,但连续的空格输入将转换成一个空格。[函数2.2]#include <stdio.h>main() char c,preChar='/0'; c = getchar(); while(c! = '.') if( (3) ) putchar(c); else if(preChar! =' ') putchar(c); (4) ; c= (5) ;
问答题阅读以下应用程序说明和C程序,将C程序段中(1)~(6)空缺处的语句填写完整。
【说明】
某大学征询学生意见,从各学院预选的n(n≤60)位优秀大学生中,评选出“十佳大学生”。以下【C程序】对各位学生选票进行相关的统计、排序等处理。
(1)各学院预选的优秀大学生按1,2,…顺序连续编号,每个编号用两个字符表示,即01,02,…。
(2)所回收的选票按以下格式存于文件source中,每行字符串对应一张选票。其中,姓名占10个字符,学院名称占30个字符,大学生编号占20个字符。
(3)对应名次的大学生编号可以有空缺,但必须用00表示。
(4)若编号超出规定范围,或编号重复出现,按照废票处理。
(5)按选票中所列“十佳大学生”顺序给出各名大学生的得分。评分标准如下: 一 二 三 四
五 六 七 八 九 十 15 12 9 7 6 5
4 3 2 1
(6)按各位大学生得分数由高到低顺序排队,并按以下格式列出“十佳大学生”排行表。 名次
大学生编号 合计得分
合计得票数 若得分相同,则得票数多的在前;若得分和得票数都相同,则编号小的在前。
以下【C程序】中所应用到的函数fopen、fclose和fgets都是I/O程序库中的函数。
【C程序】 #include <stdio. h> #define n
60 long int tn[n], td[n], score[n+1][10], order[n];
char s[80]; int mark[]=(15,12,9,7,6,5,4,3,2,1);
FILE *fp, *fopen(); Main() { int c,
g, k, I, j, b[10]; long int e, d, t, tt, dd;
char * p; for(i=0; i<=n; i++)
for(j=0; j<10; j++)
score[i][j]=0; fP=fopen("source",
"r"); /*以读方式打开文件source*/
p=fgets(s, 80, fp); /*读fp所指文件的下一行字符串于s*/
while(*p){ g=l; k=0; p+=40;
while(k<10){
c=((*p++)-'0')*10+((*p++)-'0');
b[k++]=c)
if(c<=n){
if(c)
{
i=0;
While({{U}} (1) {{/U}});
If({{U}} (2) {{/U}}){g=0; break;}
}
else{g=0;
break;}
}
If(g)
For(i=0; i<k; i++)
If(b[i])
{{U}}(3) {{/U}};
p=fgets(s, 80, fP);
}
Fclose(fp);
/*关闭fp所指文件*/
For(i=1; i<n; i++){
For(t=0, d=0, j=0; j<10;
j++){
t +=(e=score[i][j]);
d +=e *
mark[j];
}
tn[i-1]=t; td[i-1]=d; order[i-1]=i;
}
For(i=0; i<n-1; i++){
k=i;
for(j=i+1; j<n; j++)
if((t=td[order[j]-1])>(d=td[order[k]-1]))
k=j;
else
if(t==d){
tt={{U}}
(4) {{/U}};
dd={{U}}
(5) {{/U}};
for(c=0; c<10; c++)
if((e={{U}} (6) {{/U}})>0){
k=j; break;}
else
if(e<0)break;
}
If(k!=i){
t=order[k]; order[k]=order[i];
order[i]=t;
} }
For(i=0; i<10; i++)
Printf("%2d%2d%d%d/n", i+1, order[i], td[order[i]-1],
tn[order[i]-1])); } }
问答题[说明]
本程序实现了雇员信息管理功能,其中封装了雇员信息及其设置、修改、删除操作。已知当输入为“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;}
{{U}} (1) {{/U}};
~ employee(){delete[] name;}
};
employee::employee() { name="";
age=0;
salary=0.0;
void employee::set_name(char *n)
{ name=new char[strlen(n)+1];
{{U}}(2) {{/U}} (name,n);
}
void employee::print()
{ cout<<"姓名":"<<name<<" 年龄:"<<agc<<" 工资:" <<salary<<endl;
}
void main()
{ char *na;
short ag=0;
float sa=0;
{{U}} (3) {{/U}};
na=new char[10];
cin>>na>>ag>>sa;
emp.set_name(na);
emp.set_age(ag);
emp.set_salary(sa);
emp.print();
{{U}} (4) {{/U}} (3500.0);
emp.print();
{{U}} (5) {{/U}};
emp.set_name("Mary");
emp.set_age(23);
emp.set_salary(2500.0);
emp.print();
}
问答题【说明】
单击窗体上的“测试”(cmdTest)按钮,出现一个输入框,要求输入一串字符,将该字符串中的非字母字符删除后,显示在窗体中的一个文本框(txtShow)中。
【程序代码】
Private Sub cmdTest_Click( )
Dim strT1 ,strT2 As String
Dim strCh As {{U}}(1) {{/U}}
Dim intL As Integer
Dim intl As Integer
strT1 = {{U}}(2) {{/U}}("请输入一串字符","字符串输入")
intL = {{U}}(3) {{/U}}
strT2 = " "
For intl = I To intL
strCh = Mid ( strT1, intl, 1 )
If(strCh>"A"And{{U}} (4) {{/U}}) Or (strCh >"a" And suCh <"z" )Then
strT2 = strT2 + strCh
End If
Next intl
txtShow. Text= {{U}}(5) {{/U}}
End sub
问答题【说明】
本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当n=5时,对应的螺旋方阵如下:
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
【C++代码】
#include"stdio.h"
#include"iostream,h"
int array[11][11];
int temp;
int ROW;
void godown(int temp<=ROW;temp++)
if(array[temp][a]==0)
array[temp][a]={{U}} (1) {{/U}};
a++;
}
void goright(int temp<=ROW;temp++)
if(array[b][temp]==0)
array[b][temp]=m++;
b--;
}
void goup(int temp>0;temp-)
if(array[temp][c]==0)
array[temp][c]=m++;
c--;
}
void goleft(int temp>0;temp--)
if(array[d][temp]==0)
array[d][temp]=m++;
{{U}}(2) {{/U}};
}
void main()
{
int a,b,c,d,max,m;
cin>>ROW;
cout>>end1;
for(a=1;a<=ROW;a++)
for(b=1;b<=ROW;b++)
{{U}} (3) {{/U}};
m=1;
a=d=1;
b=c=ROW;
max={{U}} (4) {{/U}};
whiie(m<=max)
{
godown(m,a);
{{U}} (5) {{/U}}(m,b);
goup(m,c);
goleft(m,d):
}
for(a=1;a<=ROW;a++)
{
for(b=1;b<=ROW;b++)
printf("%3d ",array[a][b]);
cout<<end1;
}
}
问答题[说明]
循环队列的类型定义如下(其中队列元素的数据类型为datatype):
typedef struct{
datatype data[MAXSIZE]; /*数据的存储区*/
int front,rear; /*队首、队尾指针*/
int num; /*队列中元素的个数*/
}c _ SeQueue; /*循环队*/
下面函数及其功能说明如下:
(1) c_SeQueue* Init_SeQueue():新建队列;
(2) int ln_SeQueue( c_SeQueue *q, datatype x):将元素x插入队列q,若成功返回1否则返回0;
(3) int Out_SeQueue (c_SeQueue *q, datatype *x):取出队列q队首位置的元素,若成功返回1否则返回0。
[函数]
c_SeQueue* Init_SeQueue()
{ q=malloc(sizeof(c_SeQueue));
q->front=q->rear=MAXSIZE-1;
{{U}} (1) {{/U}};
return q;
}
int In_SeQueue( c_SeQueue *q, datatype x)
{ if(q->num= =MAXSIZE) return 0; /*队满不能入队*/
else {
q->rear={{U}} (2) {{/U}};
q->data[q->rear]=x;
{{U}}(3) {{/U}};
return 1; /*入队完成*/
}
}
int Out_SeQueue( c_SeQueue *q, datatype *x)
{ if (q->num= =0) return 0; /*队空不能出队*/
else{
*x= {{U}}(4) {{/U}}; /*读出队首元素*/
q->front= {{U}}(5) {{/U}};
q->num- -;
return 1; /*出队完成*/
}
}
问答题[说明]某公司的服务器上为每位员工提供了一定大小的存储空间,用于数据的备份。下面的程序面向公司员工,提供了本地计算机与服务器端之间文件传输的功能。主要操作介绍如下:(1)连接服务器:员工需要输入用户名和口令才能连接到服务器端,checkUser函数用于检查用户名和口令是否合法,返回真假值。(2)上传文件:从本地计算机上传文件到服务器。员工可以在本地文件列表中选择一个或多个文件,这些文件通过上传操作被复制到服务器端指定的某个文件夹中;(3)下载文件:从服务器端下载文件到本地。在开发过程中,本地驱动器列表框名为Drive1,本地和服务器端目录列表框分别名为Dir1和Dir2,本地和服务器端文件列表框分别名为File1和File2,界面上有上至下四个按钮分别名为Command1至Command4。[VisualBasic代码]PrivateSubDrive1_Change(){{U}}(1){{/U}}’更新目录列表框的路径EndSubPrivateSubDir1_Change()File1.Path=Dir1.Path’更新文件列表框file1的路径EndSubPrivateSubDir2_Change()File2.Path=Dir2.Path’更新文件列表框file2的路径EndSub’连接服务器PrivateSubCommand1_Click()Dimuser,passwordAsStringuser={{U}}(2){{/U}}(“请输入用户名:”)password={{U}}(2){{/U}}(“请输入口令:”)IfcheckUser(user,password)Then’若用户名和口令正确Dir2.Path=……’打开服务器上某一指定目录Else:MsgBox“口令错误,请重试!”EndIfEndSub’上传文件PrivateSubCommand2_Click()DimfsoAsnewFileSystemObject,fAsFile,iAsIntegerIfFile1.FileName=""Then’判断是否已经选中文件MsgBox“请选择本地的文件!”ExitSubEndIf’创建文件系统对象Setfso=CreateObject(“Scripting.FileSystemObject”)’上传文件Fori=0To{{U}}(3){{/U}}’遍历文件列表框File1中的全体文件If{{U}}(4){{/U}}Then’若该文件被选中Setf=fso.{{U}}(5){{/U}}(Dir1.Path&“/”&File1.List(i))f.CopyDir2.Path&“/”&File1.List(i),True’复制文件至服务器端EndIfNextFile2.RefreshEndSub’下载文件PrivateSubCommand3_Click()……EndSub’退出程序PrivateSubCommand4_Click()EndEndSub
问答题【说明】
为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1..n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置。(假设R[]中的元素互不相同)
[算法]
1.变量声明
X: Data Type
i,j,low, high,mid,r:0..n
2.每循环一次插入一个R[i]
循环:i以1为步长,从2到n,反复执行。
(1)准备
X←R[i];{{U}} (1) {{/U}}; high←i-1;
(2)找插入位置
循环:当{{U}} (2) {{/U}}时,反复执行。
{{U}} (3) {{/U}}
若X.key<R[mid].key
则high←mid-1;
否则{{U}} (4) {{/U}}
(3)后移
循环:j以-1为步长,从{{U}} (5) {{/U}},反复执行。
R[j+1]←R[j]
(4)插入
R[low]←X
3.算法结束
问答题【说明】计算三角函数sinx给定精度e和n,若第k步后的结果为sin1,第k+1步后的结果为sin2,若|sin1·sin2|<e,则返回sin1的值。若没有达到精度e,但是步骤达到n步,则返回第n步后的值。其流程图如下所示:
问答题阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。[说明]在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如下图所示。相应的Java代码附后。类图[Java代码]importJava.util.ArrayList;importjava.util.List;ClassStock{privateStringname;privateintquantity;publicStock(Stringname,intquantity){thiS.name=name;this.quantity=quantity;}publicvoidbuy(){System.out.println("[买进]:"+name+",数量:"+quantity);}publicvoidsell(){System.out.println("[卖出]:"+name+",数量:"+quantity);}}interfaceOrder{VOidexecute();}classBuyStock______Order{privateStockStock;publicBuyStock(Stockstock){______=stock;}publicvoidexecute(){stock.buy();}}//类SellStock实现和BuyStock类似,略clasSBroker{privateList<Order>orderList=newArrayList<Order>();DublicvoidtakeOrder(______Order){orderList.add(order);}publicvoidplaceorders(){for{______order:orderList){order.execute();}orderLiSt.clear();}}publicclassStockCommand{publicstaticvoidmain(String[]args){StockaStock:newStock("股票A",10);StockbStock=newStock("股票B",20);OrderbuyStockorder=newBuyStock(aStock);OrdersellStockOrder=newSellSt0Ck(bStoCk);Brokerbroker=newBroker();broker.takeOrder(buyStockorder);broker.takeOrder(sellStockOrder);broker.______;}}
问答题【说明】某大学城图书馆需要在无线阅览厅的某些位置上放置无线接入点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的总数。1.【问题1】请填补图1-17流程图中(1)-(4)空缺处的内容。
问答题【说明】
以下【C++程序】实现一个简单的小型复数类MiniComplex,该复数类能进行输入、输出、复数的加法、减法、乘法和除法运算,还可以进行复数的相等比较。
【C++程序】
#ifndef H_MiniComplex
#define H_MiniComplex
#include <iostream>
using namespace std;
class MiniComplex{
public: //重载流插入和提取运算符
{{U}} (1) {{/U}}ostream
return osObject;
}
{{U}} (2) {{/U}}istream
isObject >>complex.realPart>>ch>>complex.imagPart>>ch;
return isObject;
}
MiniComplex(double real=0,double imag=0); //构造函数
MiniComplex operator+(const MiniComplex //重载运算符+
MiniComplex operator-(const MiniComplex //重载运算符-
MiniComplex operator*(const MiniComplex //重载运算符*
MiniComplex operator/(const MiniComplex //重载运算符/
bool operator==(const MiniComplex //重载运算符==
private :
double{{U}} (3) {{/U}};
double imagPart;
};
#end if
#include "MiniComplex.h"
bool MiniComplex::operator==(const MiniComplex
}
MiniComplex::MiniComplex(double real,double imag){
realPart== real; imagPart==imagPart;
}
MiniComplex MiniComplex::operator+(const MiniComplex
temp.realPart = realPart+ortherComplex. realPart;
temp.imagPart = imagPart +ortherComplex. imagPart;
return temp;
}
{{U}} (4) {{/U}}
{ MiniComplex temp;
temp.realPart= realPart-ortherComplex. realPart;
temp.imagPart = imagPart-ortherComplex. imagPart;
return temp;
}
MiniComplex MiniComplex::operator*(const MiniComplex
temp.realPart = (realPart*ortherComplex. realPart)-(imagPart *ortherComplex.imagPart);
temp.imagPart = (realPart*ortherComplex. imagPart)+(imagPart *ortherComplex.realPart);
return temp;
}
MiniComplex MiniComplex::operator/(const MiniComplex
float tt;
tt=1/(ortherComplex.realPart*ortherComplex.realPart+ortherComplex.imagPart *ortherComplex. imagPart);
temp.realPart=((realPart*ortherComplex, realPart)+(imagPart *ortherComplex. imagPart))*tt;
temp.imagPart =((imagPart *ortherComplex. realPart)-(realPart*ortherComplex. imagPart))*tt;
return temp;
}
#include <iostream>
#include <MiniComplex.h>
using namespace std;
int main(){
MiniComplex numl(23, 34),num2(56, 35);
cout<<"Initial Value of num1="<<num1<<"/n Initial Value of num2="<<num2<<end1;
cout<<num1<<"+"<<num2<<"="<<num1+num2<<end1; //使用重载的加号运算符
cout<<num1<<"-"<<num2<<"="<<num1-num2<<end1; //使用重载的减号运算符
cout<<num1<<"*"<<num2<<"="<<num1*num2<<end1; //使用重载的乘号运算符
cout<<num1<<"/"<<num2<<"="<<num1/num2<<end1; //使用重载的除号运算符
{{U}} (5) {{/U}};
}
问答题【说明】 使用MFC的CSocket类在两个或者多个应用程序之间建立通信。服务器应用程序先创建一个特殊的 Socket,用于监听客户应用程序的连接请求,然后再创建新的Socket来完成连接。从客户和服务器两端读取该连接,直到一个需要处理的报文到来为止。以下Visual C++程序将封装这些功能,这样所有应用程序需要完成的只是创建一个Socket连接,然后处理到来的报文。这将包括一个新的服务器Socket类、新客户端Socket类和新的报文队列类。 创建新的服务器Socket类程序的框架如下。第1个函数ListenEx()用于通知Socket开始监听客户应用程序。第2个函数OnAccept()在接收到连接请求时被调用。在其中创建新的Socket,并立刻设置它开始从客户应用程序读取报文,这些是通过调用第3个函数RecvThread()来完成的,该函数位于它自己的线程中。 【Visual C++程序】 【ListenEX()函数】 void CWzdServer::ListenEx( int hdrSz, int bodyPos, CWzdQueue *pQueue,CWnd *pWnd, UINT id ) //初始化接收数据 m_RecvData.hdrSz = hdrSz; m_RecvData.bodyPos = bodyPos; m_RecvData.pQueue = pQueue; m_RecvData.pWnd = pWnd; m_id = id; //启动标志 //开始监听 (1) 【OnAccept()函数】 void CWzdServer::OnAccept ( iht nErrorCode ) if ( nErrorCode == 0 ) CSocket *pSocket = (2) ; //创建新的套接字并添加到映射图中 m_mapSockets[m_id] = pSocket; Accept( ( CasyncSocket //用该新的套接字去连接客户端 //置套接字于同步模式 DWORD arg = 0; pSocket -> AsyncSelect( 0 ); pSocket -> IOCtl( FIONBIO, m_RecvData.pSocket = pSocket; m_RecvData.id = m_id++; //启用线程 AfxBeginThread( RecvThread, 【RecvThread()函数】 UINT RecvThread( LPVOID pParam ) //从线程中苑取数据 RECVDATA *pRecv = ( RECVDATA * )pParam; int len = 1; int error = 0; char *pBody = NULL; char *pHdr = NULL; //两个套接字都开放 while (TRUE) //开始读报文头部 iht res; pBody = NULL; pHdr = new char[pRecv -> hdrSz]; if ( ( res = pRecv -> pSocket -> CAsyncSocket::Receive( pHdr, pRecv ->hdrSz ) ==SOCKET_ERROR ) error = ::GetLastError(); else len = res; //如果完毕,则退出线程 if ( len == 0 || error == WSAECONNRESET || error == WSAECONNABORTED ) break; if ( !error pBody = new char[bodyLen]; if((res=pRecv -- >pSocket >CAsyncSocket::Receive(pBody,bodyLen))==SOCKET_ERROR) error = ::GetLastError(); else (3) ; //如果完毕,则退出线程 if(len == 0 || error == WSAECONNRESET || error == WSAECONNABORTED) break; //将消息排入队列 pRecv -> pQueue ->Add(new CWzdMsg(pRecv -> id,pHdr, p B o d y,len,error) ); //传送消息到窗口来处理新信息 pRecv -> pWnd -> PostMessage(WM_NEW_MESSAGE); //清记录 delete [ ]pHdr; delete [ ]pBody; //向相关对象发送停止通知 pRecv->pWnd->SendMessage(WM_DONE_MESSAGE, WPARAM)pRecv->id, (LPARAM)error); (4) ; 【SendEx()函数】 void CWzdServer::SendEx( int id, LPSTR lpBuf, int len ) //为该标识符设置套接字 CSocket *pSocket = (5) ; if ( pSocket ) m_SendData.pSocket = pSocket; m_SendData.lpBuf = lpBuf; m_SendData.len = len; //启动线程 AfxBeginThread( SendThread, 【SendThread()函数】 UINT SendThread( LPVOID pParam ) SENDDATA *pSend = ( SENDDATA * )pParam; //从线程中获取数据 pSend -> pSocket -> (6) ( pSend -> lpBuf, pSend -> len ); //执行写入操作 return 0; 【CloseEx()函数】 void CWzdServer::CloseEx() int id; CSocket *pSocket; for ( POSITION pos = m_mapSockets.GetStartPosition(); pos; ) m_mapSockets.GetNextAssoc( pos,id,pSocket ); pSocket -> Close(); (7) ;
问答题
问答题[说明]
有若干教师,每个教师只有姓名,一个教师可以指导多名研究生;每名研究生有姓名和研究方向,程序最后输出每个教师指导的所有研究生的姓名和研究方向。
[Java程序]
public class Teacher {
String name;
int top=0;
Student[] student=new Student[20];
public Teacher() {}
public Teacher(String name) { this.name=name;}
boolean add(Student stu){
int len=this.student.length;
if (top<len-1) {
this.student[top]=siu;
{{U}}(1) {{/U}};
return true;
}
else
return {{U}}(2) {{/U}};
}
void disp(){
System.out.println(“指导老师"”+this.name);
System.out.println(“研究生:”);
for(int i=0;i<{{U}} (3) {{/U}};i++){
System.out.println(“姓名:”+this.student[i].name+“/t研究方向:”+this.student[i]. search);
}
}
public static void main(String[] args){
Teacher t[]={new Teacher(“李明”),new Teacher(“王华”)};
Student s1 = new Student(“孙强”,“数据库”);
Student s2 = new Student(“陈文”,“软件工程”);
Student s3 = new Student(“章锐”,“计算机网络”);
if(! t[0].add(s1)) {System.out.println(“每个老师最多只能指导20个学生!”);}
if(! t[0].add(a2)) {System.out.println(“每个老师最多只能指导20个学生!”);}
if(! t[1].add(s3)) {System.out.println(“每个老师最多只能指导20个学生!”);}
for(int i=0;i<2;i++)
{{U}}(4) {{/U}};
}
}
class {{U}}(5) {{/U}}{
String name;
String search;
public Student(){}
public Student(String name,String search){
this.name=name;
this.search=search;
}
String getName(){return this.name;}
String getSearch(){return this.search;}
}
问答题【说明】 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,则此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去,直到所有的人都出圈为止。 现要求按出圈次序,每10人一组,给出这n个人的顺序表。 设n=100,s=1,m=10。 (1)将1到n个人的序号存入一维数组p中; (2)若第i个人报数后出圈,则将p置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置: (3)重复第(2)步,直至圈中只剩下p[1]为止。 #include<stdio.h> #define N 100 #define S 1 #define M 10 void main() int p[100],n,s,m; m=M; n=N; s=S; int i,j,s1,w; s1=s; for(i=1; (1) ;i++) (2)=i; for(i=n;i>=2;i--) s1= (3) ; if(s1==0)s1=i; w= (4) ; for(j=s1;j<i;j++) p[j-1]=p[j]; p[i-1]= (5) ; printf("%4d",p[i])