问答题【说明】函数voidrcr(inta[],intn,intk)的功能是:将数组a中的元素s[0]~9[n-1]循环向右平移k个位置。为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标p,并将a[P]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[0]的备份值移到正确位置。若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至9[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。voidrcr(inta[],intn,intk){inti,j,t,temp,count;count=0;/*记录移动元素的次数*/k=k%n;if({{U}}(1){{/U}}){/*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/i=0while(count<n){j=i;t=i;temp=a[1];/*备份a[i]的值*//*移动相关元素,直到计算出a[i]应移动到的目标位置*/while((j={{U}}(2){{/U}})!=i){a[t]=a[j];t={{U}}(3){{/U}};count++;}{{U}}(4){{/U}}=temp;count++;{{U}}(5){{/U}};}}}
问答题【说明】 魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。 奇数阶魔方阵的生成方法如下: (1)第一个位置在第一行正中。 (2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。 (3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为: 8 1 6 3 5 7 4 9 2 了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。 【程序】 #include <stdio.h> #define MAX 15 void main() int n; int m=1; int i,j; int a[MAX][MAX]; printf("Please input the rank of matrix:"); scanf("%d", i=0; (1) while( (2) ) a[i][j]=m; m++; i--; j++; if((m-1)%n==0 if(j>(n-1)) //超出上界 (4) if(j>(n-1)) (5) for(i=0;i<n;i++) //输出魔方阵 for(j=0;j<n;j++) if(a[i][j]/10==0) printf("%d ",a[i][j]); //对程序无影响,只是使输出的数每一列对齐 else printf("%d ",a[i][j]); if(j==(n-1)) printf("/n");
问答题【说明】
设有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;{{U}} (1) {{/U}};i++)
(2)=i;
for(i=n;i>=2;i--)
{
s1={{U}} (3) {{/U}};
if(s1==0)s1=i;
w={{U}} (4) {{/U}};
for(j=s1;j<i;j++)
p[j-1]=p[j];
p[i-1]={{U}} (5) {{/U}};
printf("%4d",p[i])}
}
问答题【说明】喜迎2008年北京奥运会!以下【C程序】能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转90°,并输出旋转前后的点阵数据及字形。图1-15是汉字“会”字的16×16点阵字形,用数字0表示空白位置,用数字1表示非空白位置,“会”字的第1行即可表示成如下的{0,1}序列:0000000100000000如果把它看做一个字的16个位,“会”字的第1行可以用十六进制数0100来表示。同理,“会”字的第2行可以用十六进制数0240表示,第3行可以用十六进制数0420表示……依此类推,用16个双字节整型数即可存放一个汉字点阵字形。“会”字的点阵数据及字形如图1-15的左半部分所示。将一个汉字逆时针旋转90°,就是把该汉字点阵的最右列作为旋转后新点阵的第1行,次最右列作为旋转后新点阵的第2行……依此类推来形成一个旋转后的点阵字形。图1-15的右半部分就是将“会”字逆时针旋转90°后的点阵数据和字形(提示:读者可将书本顺时针旋转90°,以查看旋转90°后的点阵字形)。在【C程序】中,数组old存放着“会”字的16个双字节整型点阵数据。函数turnleft能将该点阵数据逆时针旋转90°,旋转后的点阵数据存放在数组new中。函数display能将旋转前后的点阵数据加以编辑,用字符“.”表示值为0的位,用字符“x”表示值为1的位,从而将旋转前后的点阵按行输出其十六进制的数据和字形,如图1-15所示。【C程序】#include<stdio.h>#defineEMPTY'.'#defineNONEMPTY'x'#defineLEFT0#defineRIGHT1main(){staticunsignedold[16]={0x0100,0x0240,0x0420,0x0810,0x1004,0x23c2,0x4001,0x8ff8,0x0100,0x0200,0x0400,0x0800,0xl000,0x2004,0x7ffe,0x0001};unsignednew[16];turnleft(old,new);display(old,new);}turnleft(old,new)unsignedold[],new[];{introw,k;for(row=0;row<16;row++)for({{U}}(1){{/U}};k<16;k++)new[row]|=((old[k]>>{{U}}(2){{/U}})}display(old,new)unsigned*old,*new;{charout[2][17],letter[2];introw,col;letter[O]=EMPTY;letter[1]=NONEMPTY;out[LEFT][16]=out[RIGHT][16]={{U}}(4){{/U}};for(row=0;row<16;row++,old++,new++){for(col=0;co1<16;++col){out[LEFT][col]=letter[({{U}}(5){{/U}})out[RIGHT][col]=letter[({{U}}(6){{/U}})}printf("/n%4x%s",*old,printf("%4x%s",*new,}}
问答题试题二(15 分,每空3 分)
阅读以下函数说明和C 语言函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
[函数2.1 说明]
函数int fun1(int m,int n)的功能是:计算并返回正整数m 和n 的最大公约数。
[函数2.1]
int fun1(int m,int n)
{
while( (1) ) {
if ( m > n ) m = m - n;
else n = n - m;
}
(2) ;
}
[函数2.2 说明]
函数long fun2(char *str)的功能是:自左至右顺序取出非空字符串str 中的数字字符形成一个十进制整数(最多8 位)。
例如,若字符串str 的值为“f3g8d5.ji2e3p12fkp”,则函数返回值为3852312。
[函数2.2]
long fun2(char *str)
{ int i = 0;
long k = 0;
char *p = str;
while ( *p != '/0'
++i;
}
(5) ;
}
return k;
}
问答题[说明]设某单位Acess数据库中有一张员工信息表,其中记录了员工编号、姓名、性别等基本信息。下面的应用程序利用数据控件(Data)实现了对这张表中记录的增加、删除和修改操作。其运行界面如下:在开发过程中,数据控件Data1与员工数据表相连接,各文本框、“性别”组合列表框Combo1、“政治面貌”组合列表框Combo2都分别与数据表的相应字段绑定,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDel、CmdUpdate和CmdExit。[VisualBasic代码]PrivateSubForm_Load()'加载窗体Combo1.(1)"男"Combo1.(1)"女"Combo2.(1)"党员"Combo2.(1)"团员"Combo2.(1)"群众"EndSubPrivateSubCmdAdd_Cliek()'增加记录Datal.Recordset.AddNewEndSubPrivateSubCmdDel_Click()'删除记录Datal.Recordset.(2)Datal.Recordset.MoveNextEndSubPrivateSubCmdUpdate_Click()'修改记录IfDatal.ReadOnly=(3)AndDatal.Recordset.UpdatableThenDatal.Recordset.EditDatal.Recordset.(4)ElseMsgBox"数据表不允许修改!"EndIfEndSubPrivateSubCmdExit_Click()'退出程序DimretAsLongret:MsgBox("真的要退出吗?",vbQuestion+vbYesNo,"退出")If(5)ThenDatal.Reeordset.CloseEndEndffEndSub
问答题[说明]设有一张学生成绩表scores存放在Access数据库Student中,其中包括学生编号、姓名以及各科目考试成绩。下面的应用程序利用ADOData和DataGrid控件实现了对成绩数据的基本管理,其操作包括:(1)添加新记录:单击“添加”按钮,光标将指向最后一条数据记录,在其后编辑好新的数据记录后,再单击“更新”按钮,该数据即被加入成绩表;(2)删除记录:单击“删除”按钮将删除当前所指记录,其后的数据记录依次上移;(3)更新记录:直接编辑某条已有记录,再单击“更新”按钮将更新成绩表;(4)记录排序:选中单列字段后,单击“排序”按钮,记录集将按该字段升序排列。程序的运行界面为:在开发过程中,数据库连接对象使用了名为Adodc1的ADOData控件,数据显示区域使用了名DataGnd1的DataGrid控件,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDel、CmdUpdate、CmdRefresh、CmdSort和CmdExit。[VisualBasic代码]Dimconn,database,tableAsStringPrivateSubForm_Load()database="E:/Student.mdb"’设置要访问的数据库conn="Provider=Microsoft.Jet.OLEDB.4.0;DataSouse="&databaseAdodc1.ConnectionString=conn’设置连接字符串table="scores"Adode1.(1)=table’设置所要访问的数据表SetDataGrid1.(2)=Adodc1EndSubPrivateSubCmdAdd_Click()’“添加”按钮的单击事件响应过程Adodc1.Recordset.(3)EndSubPrivateSubCmdDel_Click()’“删除”按钮的单击事件响应过程Adodc1.Recordset.DeleteAdodc1.Reeordset.MoveNextEndSubPrivateSubCmdUpdate_Click()’“更新”按钮的单击事件响应过程Adode1.Reeordset.UpdateBatchadAffectAllEndSubPrivateSubCmdRefresh_Cliek()’“刷新”按钮的单击事件响应过程Adodc1.RefreshEndSubPrivateSubCmdSort_Cliek()’“排序”按钮的单击事件响应过程IfDataGrid1.SelStartCol<0OrDataGridl.SelStartCol(4)DataGrid1.SelEndColThenMsgBox“请选择某一字段(列)!”ExitSubEndIfAdodc1.RecordSource="SELECT*FROM"&table&"orderby"&_DataGrid1.Columns((5)).DataFieldAdodc1.RefreshEndSubPrivateSubCmdExit_Click()’“退出”按钮的单击事件响应过程EndEndSub
问答题[说明]
邻接表是图的一种顺序存储与链式存储结合的存储方法。其思想是:对于图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<{{U}} (1) {{/U}};i++) visited[i]=0;
for(i=0;i<{{U}} (1) {{/U}};i++)if({{U}} (2) {{/U}}) DFSAL(G,i);
}
void DFSAL(ALGraph *G,int i) /*从Vi出发对邻接表存储的图G进行搜索*/
{ EdgeNode *p;
{{U}} (3) {{/U}};
p={{U}} (4) {{/U}};
while(p!=NULL) /*依次搜索Vi的邻接点Vj*/
{ if(! visited[{{U}} (5) {{/U}}]) DFSAL(G,{{U}} (5) {{/U}});
p=p->next; /*找Vi的下一个邻接点*/
}
}
问答题【函数2.1说明】
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
【函数2.1】
Fun1 (int n)
{
int i;
for(i=2;i<=n;i++)
{
while ({{U}} (1) {{/U}})
{
if (n%i==0)
{
printf("%d*",i);
{{U}}(2) {{/U}};
}
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;
{{U}} (3) {{/U}};
for(k=0;k<5;k++)
{
{{U}} (4) {{/U}};
i=j;
if(j%4==0)
{{U}} (5) {{/U}};
else
break;
}
i=m;
if(count==4)
{
printf("%d/n",count);
break;
}
}
}
问答题[说明]设有一张学生成绩表存放在Acess数据库中,其中包括学生编号、姓名以及各科目考试成绩。下面的应用程序利用数据控件(Data)实现了对这张数据表中记录的增加、删除、修改、查找和刷新操作,其中,删除一条记录后,要求界面显示下一条记录;要查找记录,首先要求用户输入学生姓名,程序查找并显示匹配的第一条记录;执行刷新操作后,要求界面显示数据表的第一条记录。程序的运行界面如下:在开发过程中,数据控件Datal与成绩数据表相连接,各文本框与数据表相应字段绑定,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDelete、CmdUpdate、CmdFind、CmdRefresh和CmdClose。[VisualBasic代码]PrivateSubCmdAdd_Click()’增加新记录Datal.Recordset.{{U}}(1){{/U}}EndSubPrivateSubCmdDelete_Click()’删除记录Data1.Recoldset.DeleleData1.Recoldset.{{U}}(2){{/U}}EndSubPnvateSubCmdUpdate_Click()’修改记录Data1.Reeordset.EditData1.Recordset.UpdateEndSubPrivateSubCmdFind_Click()’查找记录Dimname,searchAsStringname=InputBox("请输入要查询的姓名:")scarch="姓名='"&name&"'"’Data1.Recordset.MoveFirstDara1.Recordset.FindFirstscarchIfData1.Reeoldset.{{U}}(3){{/U}}ThenMsgBox"姓名为"&name&"的记录未找到!"EndIfEndSubPrivateSubCmdRefresh_Click()’刷新记录{{U}}(4){{/U}}EndSubPrivateSubCmdClose_Click()’退出程序Daral.Recordset.{{U}}(5){{/U}}EndEndSub
问答题[说明]信息处理过程中经常需要将图片或汉字点阵作旋转处理。一个矩阵以顺时针方向旋转90°后可以形成另一个矩阵,如下图所示。流程图a描述了对n*n矩阵的某种处理。流程图b是将矩阵A顺时针旋转90°形成矩阵B的具体算法。
问答题【函数1.1说明】 函数strcpy(char*to,char*from)将字符串from复制到字符串to。 【函数1.1】 void strcpy(char*to,char*from) while ( (1) ); 【函数1.2说明】 函数merge(int a[],int n,int b[],int m,int*c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。 【函数1.2】 void merge(int a[ ],int n,int b[ ] ,int m,int * c) int i,j; for(i=j=0;i<n ) *c++=a[i] <b[j]?a[i++]:b[j++]; while( (2) )*c++=a[i++]; while( (3) )*c++=b[j++]; 【函数1.3说明】 递归函数sum(int a[],int n)的返回值是数组a[]的前n个元素之和。 【函数1.3】 int sum(int a[] ,int n) if( n >0) return (4) ; else (5) ;
问答题[问题3]
在上述流程图2-1和图2-2的算法中,
(1)矩阵A第i行第j列的元素A(i,j)被复制到矩阵B中的哪个位置?
(2)A(i,j)后来又被复制到矩阵C中的哪个位置?
(3)填补流程图2-2中的空缺。
问答题【说明】 设计希赛IT教育研发中心的工资管理系统,该中心主要有3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元;销售员拿固定工资1000元,然后再按当月销售额的4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5‰。 按要求设计一个基类employee,销售员类salesman,经理类manager,销售经理类 salesmanager。 程序5-1是类employee的模块内容,程序5-2是类salesman的类模块内容,程序5-3是类manager的模块内容,程序5-4是类salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量10000后的输出结果如下: 张三所管部门月销售量:10000 销售经理:张三 编号:1001 本月工资:5050 #include <iostream.h> #include <string.h> class employee protected: int no; char *name; float salary; public: employee(int num,char *ch) no=num; name=ch; salary=0; virtual void pay()=0; virtual void display() cout<<"编号:"<<no<<endl; cout<<"本月工资:"<<salary<<endl; ; 【程序5-2】 class salesman: (1) protected: float commrate, sales; public: salesman(int num,char *ch):employee(num,ch) commrate=0.04; void pay() cout<<name<<"本月销售额:"; cin>>saies; salary=sales*commrate+1000; void display() cout<<"销售员:"<<name<<endl; employee::display(); ; 【程序5-3】 class manager: (1) protected: float monthpay; public: manager(int num,char *ch):employee(num,ch) monthpay=8000; void pay() salary=monthpay; void display() cout<<"经理:"<<name<<endl; employee::display(); ; 【程序5-4】 class salesmanager: (2) public: salesmanager(int num,char *ch): (3) monthpay=5000; commrate=0.005; void pay() cout<<name<<"所管部门月销售量:"; cin>>sales; (4) void display() cout<<"销售经理:"<<name<<endl; (5) ; void main() //主测试函数 salesmanager p1 (1001,"张三"); p1.pay(); p1.display();
问答题[说明]若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。[程序]voidsaddle(intA[][],intm,intn){inti,j,min;for(i=0;i<m;i++){min:{{U}}(1){{/U}};for(j=1;j<n;j++)if(A[i][j]<min){{U}}(2){{/U}};for(j=0;j<n;j++)if({{U}}(3){{/U}}){p=0;while(p<mif(p>=m)printf("%d,%d,%d/n",i,j,min);}}}[问题1]将函数代码中的(1)~(4)处补充完整[问题2]在上述代码的执行过程中,若A为矩阵,则调用saddle(A,3,3)后输出是{{U}}(5){{/U}}。
问答题【说明】
在下面程序横线处填上适当的字句,3个(2)空填的是一样的。使其输出结果为:
x=5
x=6
y=7
x=8
z=9
【程序】
#include<iostream.h>
class X1{
int x;
{{U}} (1) {{/U}};
X1(int xx=0){x=xx;}
{{U}} (2) {{/U}}void Output(){
cout<<"x="<<x<<end;
}
};
{{U}} (3) {{/U}}Y1:public X1{
int y;
public:
Y1(int xx=0,int yy=0);X1(xx){y=yy;}
{{U}} (2) {{/U}}void Output(){
{{U}} (4) {{/U}}Output();
cout<<"y="<<y<<endl;
}
};
class Z1:public X1{
int z:
{{U}} (5) {{/U}};
Z1(int xx=0,int zz=0):X1(xx)(z=zz;}
{{U}} (2) {{/U}}void Output(){
X1∷Output();
cout<<"z="<<z<<endl;
}
};
void main()
{
X1 a(5);Y1 b(6,7);Z1 c(8,9);
X1*p[3]={
For(int i=0;i<3;i++){
p[i]->Output();cout<<endl;
}
}
问答题【说明】
下面程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。
import java.io.*;
public class testThrows{
public static{{U}} (1) {{/U}}readString(){{U}} (2) {{/U}}IOException{
int ch;
String r="";
boolean done=false;
while({{U}} (3) {{/U}}){
ch=System.in.read();
if(ch<0 || ch=0xd) //处理回车符中第一个符号
done=true;
else
r=r+(char)ch;
}
return r;
}
public static void main(Stling args[]){
String str;
{{U}} (4) {{/U}}{
str=readString();
}{{U}} (5) {{/U}}(IOException e){
System.out.println("error");
return;
}
System.out.println("input integer: "+Integer.parselnt(str));
}
}
问答题试题二
阅读下列函数说明和C 函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
[函数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 < pj pj--;
}
if ( (2) ) return -1;
else return 0;
}
[函数2.2 说明]
函数f(char *str,char del)的功能是:将非空字符串str 分割成若干个子字符串并输出,del 表示分割时的标志字符。
例如若str 的值为“33123333435”,del 的值为‘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
4) = ′/0′; /*给找到的字符序列置字符串结束标志*/
printf("%s/t",
5) ;
}
}
问答题【说明】
下面的程序是从命令行输入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 {{U}}(1) {{/U}}[args. {{U}}(2) {{/U}}];
for(int i=0;i<3; {{U}}(3) {{/U}})
{
a[i]= {{U}}(4) {{/U}}
}
if({{U}} (5) {{/U}})
System. out. println(a[0] +","+a[1] +","+a[2]"能构成三角形的3条边");
else
System. out. println(a[0] +","+a[1] +","+a[2]"不能构成三角形的3条边);
}
}
问答题阅读以下说明和C程序,填充函数中的空缺,将解答填入答题纸的对应栏内。【说明】N个游戏者围成一圈,从1~N顺序编号,游戏方式如下;从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。下面的函数playing(Linklisthead)模拟上述游戏过程并返回获胜者的编号。其中,N个人同成的圈用一个包含N个结点的单循环链表来表示,如图4—1所示,游戏者的编号放在结点的数据域中。在函数中,以删除结点来模拟游戏者退出圈子的处理。整型变量c(初值为1)用于计数,指针变量P的初始值为head,如图4一1所示。游戏时,从P所指向的结点开始计数,P沿链表中的指针方向遍历结点,c的值随P的移动相应地递增。当c计数到2时,就删除P所指结点的下一个结点(因下一个结点就表示报数到3的游戏者),如图4—2所示,然后将C设置为0后继续游戏过程。结点类型定义如下:typedefstructnode{intcode;/*游戏者的编号*/structnode*next;}NODE,*LinkList;【C函数】intplaying(LinkListhead,intn){/*head指向含有n个结点的循环单链表的第一个结点(即编号为1的游戏者)*/LinkListp=head,q;intthewinner,c=1;while(n>____(1)____){if(c==2){/*当c等于2时,p所指向结点的后继即为将被删除的结点*/q=p->next;p->next=____(2)____;printf(“%d\t”,q->code);/*输出退出圈子的游戏者编号*/free(q);c=____(3)____;n--;}/*if*/p=____(4)____;c++:}*while*/theWinner=____(5)____;free(p);returntheWinner;/*返回最后一个游戏者(即获胜者)的编号*/}
