试卷详情
-
初级程序员下午试题-82
-
[简答题]【说明】
本题中的函数encode( )和decode( )分别实现对字符串的变换和复原。其中变换函数encode( )顺序考查已知字符串的字符,按以下规则逐组生成新字符串:
(1)若已知字符串的当前字符不是数字字符,则将该字符复制在新字符串中。
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中。
(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中。
(4)以上述一次变换为一组,在不同组之间另插入一个下划线“_”用于分隔。例如,encode( )函数对字符串26a3t2的变换结果为666_a_tttt_2。
复原函数decode( )做与变换函数encode( )相反的工作。即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中略过变换函数,为不同组之间添加的一个下划线字符。
假定调用变换函数encode( )时的已知字符串中不含下划线字符。
【函数】
int encode(char *instr, char *outstr)
char *ip, *op, c; int k,n;
ip=instr; op=outstr;
while(*ip)
if(*ip>=’0’ && *ip<=’9’ && *(ip+1))
n= (1) ;
c= (2) ;
for(k=0; k<n;k++)
*op++=c;
else (3) ;
*op++=’_’;
ip++;
if(op>outstr)op--;
(4) ;
return op-outstr;
int decode(char *instr,
-
[简答题]【说明】
实现连通图G的深度优先遍历(从顶点v出发)的非递归过程。
【算法】
第一步:首先访问连通图G的指定起始顶点v;
第二步:从V出发,访问一个与v (1) p,再从顶点P出发,访问与p (2) 顶点q,然后从q出发,重复上述过程,直到找不到存在 (3) 的邻接顶点为止。
第三步:回退到尚有 (4) 顶点,从该顶点出发,重复第二、三步,直到所有被访问过的顶点的邻接点都已被访问为止。
因此,在这个算法中应设一个栈保存被 (5) 的顶点,以便回溯查找被访问过顶点的未被访问过的邻接点。
-
[简答题]【说明】
下面程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。
import java.io.*;
public class testThrows
public static (1) readString( ) (2) IOException
int ch;
String r="";
boolean done=false;
while( (3) )
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;
(4)
str=readString( );
(5) (IOException e)
System.out.println("error");
return;
System.out.println("input integer: "+Integer.parselnt(str));
-
[多项选择]【说明】
编写程序,利用带参数的主函数main( ),实现二进制文件的复制。比如,若该程序已生成可执行文件filebin.exe,在DOS操作系统命令状态下键入如下命令行:
filebin f0.fil f1.fil
则实现将已存在的二进制文件f1.fil依原样复制给名为f0.fil的二进制文件。
【函数】
#include<stdio.h>
void fcopy(FILE *fout, FILE *fin)
char k;
do
k=fgetc( (1) );
if(feof(fin))
break;
fputc( (2) );
while(1);
void main(int argc,char *argv[])
FILE *fin,*fout;
if(argc!= (3) )
return;
if((fin=fopen(argv[2],"rb"))==NULL)
return;
fout= (4) ;
fcopy( (5) );
fclose(fin);
fclose(fout);
-
[多项选择]【说明】
在矩形类中重载关系运算符“>=”,采用友元,比较的依据是矩形面积的大小。重载算术运算符“+=”,采用成员函数,更新矩形对象的长与宽,分别加上形参矩形的长与宽。重载算术运算符+,利用构造函数,采用友元。
【代码】
class Crect
int length,witdth;
public;
CRect(int l,int w)
length=l;
width=w;
friend int operator>=(CRect& r1, CRect& r2)
return (1) >= (2) ;//比较面积
void operator+=(CRect& r)
(3) ;//求长
(4) ;//求宽
friend operater+(CRect& r1, CRect& r2)
return CRect( (5) ); //利用构造函数
-
[简答题]【函数1说明】
函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串。若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。
【函数1】
int palindrome(char s[]
char *pi, *pj;
pi=s; pj=s+strlen(s)-1;
while(pi<pj&& (1) )
pi++; pj--;
if( (2) )return-1;
else return 0;
【函数2说明】
函数f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。
例如,若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。
【函数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 && str[j]!=’/0’)j++;
(4) =’/0’; /*给找到的字符序列置字符串结束标志*/
printf("%s/t",&str[i]);
(5) ;