【说明】 1.HTTP ◆ HTTP请求消息示例 GET/index,htmlHTTP/1.1 Accept:image/gif,image/jpeg,*/* Accept-Language:zh-ch Accept-encoding:gzip,deflate User-Agent:Mozilla/4.0(compatible: MSIE6.0;Windows 2003) Host:localhost:8080 Connection:Keep-Alive ◆ HTTP响应消息示例 HTTP/1.1 200 OK Servert:Microsoft-IIS/6.0 Date:Mon,3 Jan 2008 13:13:33 GMT Content-Type:text/html Last-Modified:Mon,11 Jan 2008 13:23:42 GMT Contelit-Length:112 <html> ... </html> 2.相关类及主要成员函数 ◆ ServerSocket类 服务器端套接字,它监听固定端口,以接收来自客户端的连接请求,一旦建立连接就返回一个Socket类型的对象,类中的主要成员函数如表6-16所示。 表6-16 ServerSocket类的主要成员函数 函数名 功能说明 ServerSocket(PORT) 构造函数 Accept() 返回建立连接的Socket类型的对象 Close() 关闭当前的ServerSocket类型的对象 ◆Socket类 基于连接的套接字,类中的主要成员函数如表6-17所示。 表6-17 Socket类的主要成员函数 函数名 功能说明 GetnetAddress() 返回InetAddress类型的对象,该对象封装了与该套接字所关联的客房机的IP地址 GetInputSffeam 返回当前对象所关联的输入流 GetOutputStream 返回当前对象所关联的输出流 Close() 关闭当前对象 【Java源程序:一个简单的Web服务器】 /* WebScrvc.java */ packageobjclass; import java.net.*; import java.io.*; public class WebServer public static final int PORT=8080; //Web服务器侦听的端口号 public static final String WEB_ROOT= SyStem.getProperty("user.dir")+ File.separator+"webroot"; //WEB_ROOT变量存放Web服务器工作目录,HTML, GIF图片等静态文件资源 private static final String SHUTDOWN_COMMAND="/shutdown"; //SHUTDOWN_COMM_AND变量保存关闭服务器的命令 private Boolean shutdown=false; //是否收到关闭服务器命令的标志 public static void main(Sting[] args) WebServer server=new WebServer(); Server.await () public void await() ServerSocket serverSocket = null; try serverSocket = new (1) ; //创建侦听端口号为PORT的ServerSocket类型的对象 System.out.println ("WebServerStarted!"); catch(IOException e) e.printStackTrace (); SyStem. exit (1); while(!shutdown) //循环等待客房端连接 Socket socket = null; InputStream input = null; OutputStream output = null; try Socket = (2) ; //创建来自客房端的连接套接字 Input = socket. (3) ; //创建输入流 Output = socket. (4) ; //创建输出流 Request request = new Request (input); //创建request对象 Request. (5) ; //解析客户端HTTP请求 Response response = new ReSponse(output); //创建Response对象 response, setRequest (request); //将request对象传递给response对象 response. (6) ; //给客户端发送所请求的静态资源 (7) ; //关闭连接套接字 shutdown = request. (8) .equals (SHUTDOWN_COMMAND); //凑数当前HTTP请求中的URL是否是关闭服务器命令 Catch(Exception e) e.printStackTrace (); continue; /* Request.java */ package objclass; import java.io.InputStream; import java.iO.IOException; public Class Request private InputStream input; private String url; public Request(InputStream input)this.input = input; public void parse() ... parseUrl() ;... //解析客户端HTTP请求消息 private String parseUrl(String requestString)... //解析客户端HTTP请求中的URL public String getUrl()return url; /* Response.java */ package objclass; import java.io.*; public class Response private static final int BUFFER_ SIZE=1024; Request request; OutputStream output; public Response(Output Strearm output) this.output=output; public void setRequest(Request request)this.request=request; public void sendStaticResource()throwsIOmxception... //向客户端发送所请求的静态资源
填空题阅读以下说明和C++代码,将解答写入对应栏内。 [说明] 类Stock的定义中有三处错误,分别在代码的第04、06、10行。请补齐下述代码中的空缺(1)~(3),修改错误并给出修改后该行的完整代码,最后完善程序运行后的输出结果。 [C++程序] 01 #include<iostream.h> 02 using namespace std; 03 class Stock 04 protected: 05 Stock()shares=0; share_val=0.0;Output(); 06 Stock(int n=0,double pr=3.5): (1) //初始化shares值为n 07 share_val=pr; 08 Output(); 09 ; 10 void~Stock(); 11 void Output()(cout<<shares<<';'<<share val<<endl; 12 public: 13 //成员函数 14 private: 15 //成员变量 16 int shares; 17 double share_val; 18 ; 19 20 void main() //构造三个Stock对象a,b,C 21 Stock a(1); 22 Stock b; 23 Stock C;Stock(); 24 //其他代码省略,且代码无输出 25 程序运行后的输出结果为: 1:3.5 (2) (3)
填空题【说明】 函数fun1 (int bb[])的功能是:在3位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,两位数字又相同,例如144、676等。 【函数2.11】 fun1 (int bb[]) int i, j, k=0, g, s, b; for (i=100; i<=999; i++) g=i%10; (1) b=i/100; if ((i== (int) sqrt (i) * (int) sqrt (i)) 【函数2.2说明】 函数void fun2()的功能是:数组a中有300个四位数,求出数组a千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数CNT,再把所有满足此条件的四位数依次存入数组bb中,然后对数组bb的四位数按小到大的顺序进行排序。例如:9123,9-1-2-3>0,则该数满足条件存入数组bb中,且个数CNT=CNT+1,9812,9-8-1-2<0,则该数不满足条件,忽略。 【函数2.2】 void fun2 ( ) int q,b,s,g,i,j; for (i=0;i<300;i++) q=a[i]/1000; b=a[i]/100%10; s=a[i]/10%10; g=a[i]%10; if (q-b-s-g>0) (3) for ( i=0;i<cnt-1;i++ ) for ( j=i+1;j<cnt;j++ ) if ( bb[i]>bb[j] ) (4) bb[i]=bb[j]; (5)
填空题1】 void sort(char *s,int num) int i,j--num; char t; while(j-->1) for(i=0;i<j;i++) if(s[i]>s[i+1]) t=s[i]; s[i]=s[i+1]; s[i+1]=t; void main() char *s="CEAedea"; sort(s,5); printf("%s",s); 上述程序的结果是 (1) 【函数2.2】 void main() union int ig[6]; Char s[12]; try; try. ig[0]=0x4542; try.ig[1]=0x2049; try. ig[2]=0x494a; try.ig[3]=0x474e; try. ig[4]=0x0a21; try.ig[5]=0x0000; pintf("%s",try, s); 上述程序的结果是 (2) 【函数2.3】 void main() char *letter[5]= "ab","efgh","ijk","nmop","st"; char **p; int i; p=letter; for(i=0;i<4;i++) . printf("%s",p[i]); 上述程序的结果是 (3) 【函数2.4】 main() int i=4,j=6,k=8,*p= int x,y,z; x=p== y=3*-*p/(*q)+7; z=*(r= printf("x=%d,y=%d,z=%d",x,y,z); 上述程序的结果是 (4) 【函数2.5】 int a[]=5,4,3,2,1 ; void main() int i; int f=a[0]; int x=2; for(i=0;i<5;i++) f+=f*x+a[i]; printf("%d",f); 上述程序的结果是 (5)
填空题[说明] 设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在Date类中设计如下重载运算符函数。 Date operator+(int days):返回某日期加上天数得到的日期。 Date operator-(int days):返回某日期减去天数得到的日期。 int operator-(Date &b):返回两日期相差的天数。 [C++程序] #include<iostream. h> int day_tab[2][12]=31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 29, 31,30, 31, 30, 31, 31,30,31,30,31; //day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年 class Date int year,month,day;//年,月,日 int leap (int); //判断是否为闰年 int dton (Date&); Date ntod (int); Public: Date() Date(int y,int mint d)year=y;month=m;day=d; void setday (intd) day=d; void setmonth (int m)month=m; void setyear(int y)year=y; int getday()return day; int getmonth()return month; int getyear() return year; Date operator+(int days) //+运算符重载函数 static Date date; int number= (1) ; date=ntod (number); return date; Date operator-(int days) //-运算符重载函数 statis Date date; int number= (2) ; number-=days; date=ntod (number); return date; int operator-(Date &b) //-运算符重载函数 int days= (3) ; return days; void disp() cout<<year<<"."<<month<<","<<day<<endl; ; int Date::leap (int year) if( (4) ) //是闰年 return 1; //不是闰年 else return 0; int Date::dton (Date &d) //求从公元0年0月0日到d日期的天数 int y,m,days=0; for (y=1;y<=d.year;y++) if( (5) )days+=366; //闰年时加366天 else days+=365; //非闰年时加365天 for (m=0;m<d.mont.h-1;m++) if (leap (d.year) days+=day_tab [1] [m]; else days+=day__tab [0][m]; days+=d.day; return days; Date Date::ntod (int n) //将从公元0年0月0日的天数转换成日期 int y=1,m=1,d,rest=n,1p; while (1) if (leap (y)) if (rest<-366)break; else rest-=366; else //非闰年 if (rest=365)break; else rest-=365; y++; y--; 1p=leap (y); while (1) if (1p) //闰年 if (rest>day_tab [1][m-1])rest-=day_tab [1] [m-1]; else break; else //非闰年 if(rest>day_tab[0] [m-1])rest-=day_tab[0][m-1]; else break; m++: d=rest; return Date (y; m, d); void main() Date now(2003, 10,1),then (2005,6,5); cout<<"now:"; now. disp(); cout<<"then:"; then .disp(); cout<<"相差天数:"<<(then-now)<<endl; Date d1=now+1000,d2=now-1000; cout<<"now+1000:"; d1. disp(); cout<<"now-1000:"; d2. disp();
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 该程序从正文文件test.txt中读入一批整数,并将它们按照递增的顺序存放在一个链表中。其中,函数struct Link*insertChain(struct Link*head,structLink*k)用来寻找结点k在链表head中的插入位置,并插入该结点。 [C程序] #include <stdio.h> #include <stdlib.h> struct Link { int number; struct Link *next; } struct Link *insertChain(struct Link *head,struct Link *k); VOid main() { struct Link *ptr, *head; FILE *fd; int hum; if((fd=fopen("test.txt","r"))==NULL) {print("Cannot open this file!/n"); return; } head=NULL; while(fscanf(fd,"%d",hum)==1) { ptr={{U}} (1) {{/U}}; if(!ptr) return; ptr->number=hum; ptr->next=NULL; head=insertChain(head,ptr); } {{U}} (2) {{/U}}; return; } struct Link *insertChain(struct Link *head,struct Link *k) { struct Link *ptr,*u; ptr=head; while(ptr && k && k->number>ptr->number) { u=ptr; {{U}}(3) {{/U}} } if(ptr == head) head=k; else {{U}}(4) {{/U}}; {{U}}(5) {{/U}}; return head; }
填空题[说明] 设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表示,n粒珠子的颜色由输入的字符串表示)。从环上的某两粒珠子问剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。 本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如,10粒珠子颜色对应字符串为aaabbbadcc,在0号珠子前剪开,序列为aaabbbadcc,从左端取走3粒a色珠子,从右端取走2粒c色珠子,共取走5粒珠子。若在3号珠子前剪开,即bbbadccaaa,共取走6粒珠子。 [C函数] int count(char *s,int start,int end) int i,c=0,color:s[start],step=(start>end)?-1:1; for(i=Start;s[i]==color;i+=step) if(step>0 return c; void main() char t,s[120]; int i,k,c,len,maxc,cut=0; printf("请输入环上代表不同颜色珠子字符串:"); scanf("%s”,s); len=strlen(s); for(i=maxc=0; i<len;i++)( /*尝试不同的剪开方式*/ c=count(s,0,len-1); if(c<len) c+=count( (3) ); if(c>maxc) cut=i;maxc=c;) /*数组s的元素循环向左移动一个位置*/ t=s[0]; for(j=1;j<len;j++) (4) ; (5) ; printf("在第%d号珠子前面剪开,可以取走%d个珠子.\n",cut,maxc);
填空题1】
void sort(char *s,int num)
{int i,j--num;
char t;
while(j-->1)
for(i=0;i<j;i++)
if(s[i]>s[i+1])
{t=s[i];
s[i]=s[i+1];
s[i+1]=t;
}
void main()
{char *s="CEAedea";
sort(s,5);
printf("%s",s);
}
上述程序的结果是{{U}} (1) {{/U}}
【函数2.2】
void main()
{ union {int ig[6];
Char s[12];} try;
try. ig[0]=0x4542; try.ig[1]=0x2049;
try. ig[2]=0x494a; try.ig[3]=0x474e;
try. ig[4]=0x0a21; try.ig[5]=0x0000;
pintf("%s",try, s);
}
上述程序的结果是{{U}} (2) {{/U}}
【函数2.3】
void main()
{ char *letter[5]= { "ab","efgh","ijk","nmop","st"};
char **p;
int i;
p=letter;
for(i=0;i<4;i++) .
printf("%s",p[i]);
}
上述程序的结果是{{U}} (3) {{/U}}
【函数2.4】
main()
{int i=4,j=6,k=8,*p=
int x,y,z;
x=p==
y=3*-*p/(*q)+7;
z=*(r=
printf("x=%d,y=%d,z=%d",x,y,z);
}
上述程序的结果是{{U}} (4) {{/U}}
【函数2.5】
int a[]={5,4,3,2,1 };
void main()
{int i;
int f=a[0];
int x=2;
for(i=0;i<5;i++)
f+=f*x+a[i];
printf("%d",f);
}
上述程序的结果是{{U}} (5) {{/U}}
填空题[说明] 求树的宽度,所谓宽度是指在二叉树的各层上,具有结点数最多的那一层的结点总数。本算法是按层次遍历二叉树,采用一个队列q,让根结点入队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。 [函数] int Width ( BinTree *T int front=-1, rear=-1; /*队列初始化*/ int flag=0, count=0, p; /*p用于指向树中层的最右边的结点, flag 记录层中结点数的最大值*/ if ( T!=Null) rear++; (1) ; flag=1; p=rear; while ( (2) ) front++; T=q [front]]; if (T->lchild!=Null ) roar+-+; (3) ; count++; if ( T->rchild!=Null ) rear++; q[rear]=T->rchild; (4) ; if (front==p ) // 当前层已遍历完毕 if( (5) ) flag=count; count=0; p=rear, //p 指向下一层最右边的结点 return ( flag );
填空题
阅读以下说明和C函数,将应填入{{U}} (n) {{/U}}处的字句写在答题纸的对应栏内。 [说明]
某单位准备进行一次选举,对指定的n名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,n=8时所形成的文件如下:
01011000 10010100 10011000
11111111 00000000 00111000
其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第i行第j列为1,表示第i张选票上投了第j名候选人1票。函数statistic()的功能是读入选票数据,并统计每位候选者的得票数,函数返回有效选票数。
[C语言函数] int statistic (FILE *fp, int candidate[], int
n) { /*从文件中读入选票数据,n为候选人数量(n<80),
从有效选票中统计每位候选者的得票数并存入candidate[],函数返回有效选票数*/
char str[80]; /*str保存读入的一张选票数据*/
int i, tag=0;/* tag用于判断每张选票是否有效*/ int
q=0;/* q用于计算有效选票数*/ for (i=0;i<n;i++)
candidate[i]=0;
while ({{U}} (1) {{/U}}) {
fgets (str,80,fp); /*读入一张选票数据*/
for (tag=0,i=0; ({{U}} (2)
{{/U}});i++)
if (str[i]=='1') tag++; if
({{U}} (3) {{/U}}) {/*(若是有效选票,则进行统计*/
({{U}} (4) {{/U}});
for (i=0;i<n;i++)
if (str[i]=='1'){{U}} (5) {{/U}};
} } return
q; } /*statistic*/
填空题[说明]以下是一账号和密码输入的检验程序。对输入的账号和密码规定如下所述。(1)账号为不超过6位的数字,密码为4位字符,在本题中,密码假定为“Pass”。(2)密码输入时在屏幕上不显示输入的字符,而以“*”代替。(3)当输入不正确,如账号为非数字字符或密码不正确时,显示有关信息。(4)当输入正确时,关闭密码窗口,显示记事本窗口。按要求完成有关控件的其他属性的设置,编写确定按钮的单击事件过程。相关界面如下:(可能要用到的单词:MultiLlne,ScrollBars,PasswordChar,MaxLength)密码窗口frmPass控件设置如下表所示。控件控件名(Name)标题(Caption)其他属性帐号标签1blNo账号密码标签1blNo密码帐号文本框txtNo无定义密码文本框txtPas无定义确定按钮comOk确定记事本窗口frmNotepad控件设置如下表所示。控件控件名(Name)标题(Caption)其他属性文本框TxtNotepad无定义清除按钮CmdClear清除返回按钮cmdBack返回在密码窗口的属性窗口,对密码文本框设置属性MuniLine为False。[VisualBasic代码]PrivateSubcmdOK_Click()IftxtPas.Text="Pass"ThenLoadfrmNotePadfrmNotePad.ShowfrmPass.HideElseMsgBox"密码错误!",vbExclamation+vbRetryCancel,"重输入密码"txtPas.Text=""txtPas.SetFocus(1)EndSubPrivateSubForm_Load()txtPas.PasswordChar="*"xtNo.MaxLength=6EndSubPrivateSubtxtNoLostFocus(DimiAsInteger,sAsString*1Fori=1To(2)s=Mid(txtNo.Text,i,1)If(3)Or(4)ThenMsgBox"账号有非数字符号!",vbExclamation+vbRetryCancel,"1输入账号"(5)txtNo.SetFocusExitSubEndIfNextiEndSub
填空题阅读以下函数说明和C语言函数,将应填入 (n) 的字句写在答题纸的对应栏内。 [说明1] 函数int fun1(int m, int n)的功能是:计算并返回正整数m和n的最大公约数。 [函数1] int fun1(int m, int n) while ( (1) ) if (m>n) m=m-n; else n=n-m; (2) ; [说明2] 函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符形成一个十进制整数(最多8位)。 例如,若字符串str的值为“f3g8d5.ji2e3p12fkp”,则函数返回值为3852312。 [函数2] long fun2(char *str) int i=0; long k=0; char *p=str; while (*p!='\0' ++i; (5) ; return k;
填空题[说明] 假设银行整存整取存款不同期限的月息利率分别为:0.63%(1年),0.66%(2年),0.69%(3年),0.75%(5年),0.84%(8年),其中,利息=本金*月息利率*12*存款年限。 现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。 设2000元存20年,其中1年存i1次,2年存i2次,以此类推,则到期时存款人应得到的本利合计为: 2000*(1+rate1)i1*(1+rate2)i2*(l+rate3)i3*(l+rate5)i5*(l+rate8)i8 其中,rateN为对应存款年限的利率。年限还有如下限制条件: 0≤i8≤2 0≤i5≤(20-8*i8)/5 0≤13≤(20-8*i8-5*i5)/3 0≤i2≤(20-8*i8-5*i5-3*i3)/2 0≤i1=20-8*i8-5*i5-3*i3-2*i2 用穷举法穷举出所有的i8、i5、i3、i2、i1,代入求本利的公式计算出最大值。 [函数] #include<stdio.h> #include<math. h> void main() int i8, i5, i3, i2, i1, n8, n5, n3, n2, n1; float max=0, term; clrscr(); for (i8=0;i8<3;i8++) /*穷举所有可能的存款方式*/ for (i5=0; i5<= (20-8*i8)/5;i5++) for (i3=0; (1) ; i3++) for (i2=0; (2) ; i2++) i1=20-8 *18-5 *i5-3 *i3-2 *12: (3) ; /*计算到期时的本利合计*/ if( (4) ) (5) ; n1=i1; n2 =i2; n3 =i3; n5=i5; n8 =i8; printf("For maxinum profit, he should so save his money in a bank:/n"); printf(" made fixed deposit for 8 year: %d times /n",n8); printf(" made fixed deposit for 5 year: %d times/n",n5); printf(" made fixed deposit for 3 year: %d times/n",n3); printf(" made fixed deposit for 2 year: %d times/n",n2); printf(" made fixed deposit for 1 year: %d timesYn",n1); printf(" Toa1: %.2f/n", max); /*输出存款方式*/ puts ("/n Press any key to quit...”); getch();
填空题[说明]已知递推数列:a(1)=1,a(2s)=a(s),a(2s+1)=a(s)+a(s+1)(s为正整数)。试求该数列的第n项与前n项中哪些项最大?最大值为多少?算法分析:该数列序号分为奇数或偶数两种情况做不同递推,所得数列呈大小有规律的摆动。设置a数组,赋初值a(1)=1。根据递推式,在循环中分项序号s(2~n)为奇数或偶数作不同递推:每得一项a(s),即与最大值max作比较,如果a(s)>max,则max=a(i)。最后,在所有项中搜索最大项(因最大项可能多于一项),并打印最大值max。[问题]将流程图中的(1)~(5)处补充完整。注:流程图中(1)循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。[流程图]
填空题[说明] 编写一个Applet程序,接受HTML文件传递的整数参数,根据该参数指定Applet中文本框的长度。编写对应的HTML文件运行这个Applet。[Java 代码]import java. applet.*;import java. awt.*;public class chuangdics extends (1) TextField tf=new TextField (); int tfLength=0; public void init() try tfLength=Integer. parseInt( (2) ("length")); tf. setColumns (tfLength); add (tf); catch (NumberFormatException nfe) tf. (3) ("HTML 文件传人的参数格式错误。"); add(tf); [HTML 代码]<html><head> <title> (4) </title></head><body> <hr><applet code=chuangdics width=700 height=150><param name=length value=20> (5) <hr></body></htmI>
填空题[说明] 编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。 [Java 代码] import java. io.* ; public class abc public static void main ( (1) ) int i, n=10, max=0, min=0, temp=0; try BufferedReader br = new BufferedReader ( new InputStreamReader ( System.in ) ); max = min =Integer. parselnt ( br. readLine ( ) ); . (2) ( IOExccption e ) ; for ( i=2 ; i<=n ; i++ ) try BufferedReader br = new (3) ( new InputStreamReader ( System. in ) ); temp = (4) ( br. readLine ( )); if (temp>max ) max=temp; if (temp<min) (5) catch (IOException e ) ; System.out.println ( "max="+max+"/nmin="+min );
填空题[说明]下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。注:返回值用pos表示。[问题]将流程图的(1)~(5)处补充完整。
填空题[函数2.1说明] 将一个正整数分解质因数。例如:输入90,打印出90=2×3×3×5。 [函数2.1] fun 1 ( int n ) int i; for ( i=2;i<=n; i++) while (( (1) ) if (n %i==0 ) printf ( "%d*",i ); (2) else break; printf ( "%d",n ) ; [函数2.2说明] 下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第3、第4、第5只猴子都是这样做的,问海滩上原来最少有多少个桃子? [函数2.2] main ( ) int i, m, j, k, count; for ( i=4;i<10000;i+=4 ) count=0; (3) ; for ( k=0;k<5;k++ ) (4) ; i=j; if ( j%4==0 ) (5) ; else break; i=m; if ( count==4 ) printf ( "%d/n", count) ; break;
填空题阅读以下说明和C++程序,将应填入 (n) 处的字句写在对应栏内。 [说明] 下面程序输出一个矩形面积,以及矩形区域上的假想的作物产量。 [C++程序] #include <iostream.h> class crop_assessment int actual_crop; int ideal_crop; public: void set(int in_actual,int in_ideal) actual crop=in_actual; ideal_crop=in_ideal; int get_actual_crop(void) (1) ; int get_ideal_crop(void) (2) ;) ; Class lot_size int length; int width; (3) crop; public: void set(int 1,int w,int a,int i) length=1; width=w; crop.set(a,i); int get_area(void)return length*width; int get_data(void)return (4) ; int get_data2(void)freturn (5) ; int main() Los_size small,medium; small.set(5,5,5,25); medium.set(10,10,10,50); cout<<"For a small lot of area"<<smallget_area()<<“/n”; cout<<"the actual crops are$"<<small.get_data2()<<"/n"; cout<<"and ideal crops are$”<<small.get_data()<<"/n"; cout<<"For a medium Lot of area"<<medium.get area()<<:/n”; cout<<"the actual crops are$"<<medium.get_data2()<<"/n"; cout<<"and ideal crops are$"<<medium.get_data()<<"/n"; return 0;
填空题【说明】
本题给出四个函数,它们的功能分别是:
1.int push(PNODE*top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。
2.int pop(PNODE*top,int*e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。
3.int enQueue(PNODE*tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。
4.int deQueue(PNODE*tail,int*e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。
以上四个函数中,返回值为。表示操作成功,返回值为-1表示操作失败。
栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:
typedef struct node {
int value;
struct node * next;
} NODE, * PNODE;
【函数1】
int push(PNOOE * top,int e)
{
PNODE p = (PNODE) malloc (sizeof (NODE));
if (! p) return-1;
p->value=e;
{{U}} (1) {{/U}};.
*top=p;
return 0;
}
【函数2】
int pop (PNODE * top,int * e)
{
PNODE p = * top;
if(p == NULL) return-1;
* e = p->value;
{{U}} (2) {{/U}};
free(p);
return 0;
}
【函数3】
int enQueue (PNODE * tail,int e)
{ PNODE p,t;
t= *tail;
p = (PNODE) malloc(sizeof(NODE));
if(!p) return-1;
p->value=e;
p->next=t->next;
{{U}}(3) {{/U}};
* tail = p;
return 0;
}
【函数4】
int deQueue(PNODE * tail,int * e)
{ PNODE p,q;
if(( * tail)->next == * tail) return-1;
p= (* tail)->next;
q = p ->next;
* e =q ->value;
{{U}} (4) {{/U}}=q->next;
if(,tail==q){{U}} (5) {{/U}};
free(q);
return 0;
}