电脑报特邀名师考前指点——要过二级不能不看

主题策划

5天,还有5天,2009年全国计算机等级考试就开考了!5天的时间,进行冲刺复习够吗?一般不够,不过如果有电脑报特邀的二级考试专家组的名师指点,5天时间就够了……

孙顾天

全国计算机等级考试技术组成员,浙江省计算机等级考试资深名师。参与全国计算机等级考试评卷及《全国计算机等级考试——习题集》、《C语言程序设计》等10多本教材与参考书籍的编写。

上半年考试折射的趋势

电脑报:孙老师,欢迎你来给我们的读者做考前的指导。每次的全国计算机二级等级考试前,我们都会收到读者的大量来信,希望得到考前的一些指点和辅导、传授一些考试经验,于是我们就想到了你。去年的专题给我们读者朋友带来了意外的惊喜,希望这次你也会给他们带来惊喜。

孙顾天:去年出的模拟题,有80%左右的题型和知识点都与最后的考题相符合,只要会变通考试及格是肯定没有问题的,例如知道3×2=6,就会做6÷2=3。不过随着2008年全国计算机等级考试大纲改革以来,出题的方式又有了新的变化,去年的模拟题在今年的参考价值就不大了。所以针对今年的变化,出了考前冲刺题,只要大家认真做,理解透彻,通过二级是不会有任何问题的。

电脑报:孙老师,从今年上半年的考试中,你看到了哪些变化,题目变化的趋势是什么?请你给我们的读者先大概讲讲。

孙顾天:好的。从趋势来看,考C语言的人数最多,但要求也越来越高,对动手能力的考查更多了。C语言和VFP语言成为报考的主流科目。在新增加的语言中,最受考生欢迎的是Java语言。

二级C语言

从整体来看,上半年的笔试卷仍以控制结构、数组、函数、指针为重点,知识点是if语句、for语句、字符串、函数参数及调用、数组的指针应用。但出现了新的题型以及新的难点。

1. 初始化概念的题增多,所占的比例比较大,而且是概念题的主体。

2. 宏定义语句。除了要掌握宏定义语句的“原样替换”概念之外,还要注意语句应用的格式(语法)——试题中出现的源程序代码段本身的错误(本次考试的新题型)。

3. 格式化输入、输出函数的应用。新的重点,考查考生的一些知识模糊点。

4. 结构体、文件、位运算概念,这类题主要是以概念与格式为主,题型比较新。

5. 上机填空题,加大了对结构体的考核,不再是原来的基础算法的阅读与填写。

6. 上机修改题,以“字符串+指针”为主要出题模式,这在一定程度上加大了程序修改的难度,也不再是以语法修改为主,逐渐变为进行语意的修改。

7. 上机程序设计题,加大了对题目中源代码的阅读要求,必须完全理解源代码才可以进行编程。

二级VFP语言

从上半年的考试中可以发现试卷对指令的理解要求比较高,其中的SQL指令是考试的重点与难点。回顾上半年的试题,发现了不少新的内容:

1.理论判断选择题中,基本上以数据库概念为主,这也体现了试题的方向趋向于基础知识的理解与深入认识。

2. SQL是VFP命令中最重要的命令,也是考试的主要内容,上半年的试题中加重了SQL条件设置的题目。

3. VFP试题中很少出有关编写代码的试题,但在上半年试题中出现了对代码的阅读与转换试题,这一点要引起考生的极大注意。

4.上机应用题中以SQL查询为主,这部分对Select查询命令的要求比较高,考生要掌握多表查询、结果输出。

二级Java语言

细看2009年3月份的笔试题,考核的内容重点突出两个方向:

1.Swing包中基本类的应用与Applet编程,这是笔试程序类题的主体。

2.Java程序运行。这类题与其他语言出题有所不同(根据2008年与2009年的试题),主要考核内容不是运行的结果,而是运行中代码、指令或特定标志符的含义。

这些考试经验必须重视

电脑报:孙老师,还有几天就要考试了,在这期间考生应该怎么复习呢?

孙顾天:第一,复习时要巩固基础知识。第二,做复习题要“求精去杂”。第三,要有复习方案,先精读教材,特别是自己运用得不好的知识点,然后反复练习,特别要进行一些专项的突击练习,最后全面温习自己的笔记,加强记忆。

此外,在冲刺复习时,一定要安装考试指定的上机调试软件,要注意软件应用时的特性:C语言的VC6.0编译软件(运行环境的清除、调试过程中错误的查看)、VFP语言的VFP6.0编译软件(数据库的独占打开方式、工作区、关闭已经打开的表或库)、Java中NetBeans5.0(考查环境变量的配置、调试过程中错误的查看)。

考生一定要熟悉上机软件的运用,每次做题时最好把编译软件关闭后,再打开(以免对前一次操作的程序产生调试或编译的影响)。特别注意:上机时,程序必须执行与保存(否则会没有成绩)。

电脑报:孙老师,在考试中应该注意什么?你有什么经验可以传授给大家的吗?

孙顾天:好的,下面我来说说在考试中容易出现的问题。

感到试题“复杂”、“繁”

感到试题“复杂”,主要是笔试中的程序阅读题与程序填空题。这类题考生在做题中,很喜欢以“最佳方式”来解题,其实这种想法是错误的。二级考题中的阅读题部分,往往就是以看懂程序执行步骤为主旨的,所以一味找“最佳方式”,反而引导考生进入一个错误的环境。

在实际考试中,我们也经常发现一些考生做题过快,阅读题没有按语句逐条执行,而是用眼来代替手工执行,这样答题必定是要出错的。我建议考生在看到“复杂”的题时,一定要用草稿纸来手工模拟执行过程(分别写出每次执行的变量值,并要明确写出执行语句的方向),这样“复杂”题也会变“简单”的。

感到试题“繁”,主要是知识点理解不深的部分题目。考生见到“繁”题,多以乱做与瞎猜为主,在实际考试中,经常可以看到考生出现这种情况。我建议考生注意这几个方面:函数中的递归、函数中形参与实参的关系、循环执行步骤、指针变量的指向与运算、位运算、结构体。这类的复习要注意原理的掌握。

感到试题“模糊”、“难”

感到试题“模糊”,主要是数据库概念及其应用,这是考生复习与应考中最大的问题。我建议考生,从SQL着手来认识数据库概念与应用命令实现,SQL命令是一个很庞大的语句组,其中包含了所有的数据库操作指令,但考生在复习中一定要以Select、Alter、Update、Delete、Drop为主,特别是Select——掌握查询条件的运用与目标的输出,Alter——数据库完整性设置(有效规则等)及表结构。

感到试题“难”,主要是笔试与上机中的数组、指针、表单设计、函数程序阅读与编程等题,这类题是考生最怕见到的,但却是考试中分值较重的题。在实际考试中,考生遇到这类题时,总是会去想以往做过的练习题——“经典题”,这种做法往往使考生更不能掌握解题的要旨。

我建议考生在做“难”题时,按照“目的→数据结构→编程思路”的顺序来解题。先确定程序代码的执行目的,通过结果可以看出所要用的一些基本算法,然后在明确结果的基础上,查看程序所用的数据结构,最后通过已知的代码进行编程思路的判断。

不能靠感觉做题

在考试中,哪怕是基础题也要手工进行模拟运算,不能以主观来代替运算。很多考生在二级考试中都不用草稿纸的——在Java考试中最常见。这说明,考生做题完全是靠感觉的,这样答题得分怎么能高呢?要避免这个问题,就是要分析题目的主旨,手工在草稿纸上模拟执行过程。

碰到没见到过的题

没见到过的题中大半以上是难题,考生在答题前必须认清题目的主要考核方向。例如,Java考试中,难题的主要出题方向是Applet,所以考生一定要熟练掌握Applet中的图像绘制、组件应用。在实际考试中,此类题的比重不是很大,如果实在做不了可以放弃。

冲刺题独家奉上

二级C语言

1.若变量已正确定义,有以下程序段

int a=3,b=5,c=7;

if(a>b) a=b;c=a;

if(c!=a) c=b;

printf("%d,%d,%d\n",a,b,c);

其输出结果是。

A.程序段语法有错

B.3,5,3

C.3,5,5

D.3,5,7

本题难度: ★★★

涉及知识: 控制语句,if语句语法

名师解析: 本题程序先判断表达式a>b,不成立,跳过此if的语句“a=b;”,执行“c=a;”语句,此时c=3。判断第二个if的表达式c!=a,由于此时c为3,所以此表达式不成立,跳过此if的语句“c=b;”,执行printf语句,输出3,5,3。注:if语句中若要执行多条语句,必须加{}。

2.假设变量已正确定义并赋值,以下正确的表达式是。

A.x=y*5=x+x

B.int(15.8%5)

C.x=y+z+5,++y

D.x=25%5.0

本题难度: ★★

涉及知识: 数据类型、运算符与表达式

名师解析: 由赋值运算符将一个变量和一个表达式连起来的式子称为“赋值表达式”,由于选项A相当于x=y*5和y*5=x+z两个赋值表达式组合在一起,而y*5=x+z由于赋值运算符左边不是变量,而是表达式,所以选项A不正确;由于求余运算符%两侧均要求为整型数据,所以选项B、D不正确。

3.有以下程序

#include

void fun(char *a,char *b)

{ while(*a=='*') a++;

while(*b=*a) {b++;a++;}

}

main()

{ char *s="*****a*b****",t[80];

fun(s,t); puts(t);

}

程序的运行结果是。

A.*****a*b

B.a*b

C.a*b****

D.ab

本题难度: ★★★★

涉及知识:指针变量作为函数的参数

名师解析:本程序的主函数中定义了一个字符型指针变量s和字符型数组t,将s和t作为实参调用fun函数,使得形参指针变量a和b分别指向s和t所在存储单元的首地址,子函数中第一个while循环用于将指针变量a移动并指向非*字符的地址,即字符a的地址。

第二个while循环的作用是将a指向的所有字符通过循环赋值方式赋给*b,由于指针变量b与字符数组t共用同一存储单元,所以对*b的改变也即对数组t内容的改变,最终通过puts函数输出数组t的内容。puts()函数的作用是将一个字符串输出到终端,即最终输出a*b****。

4.有以下程序

#include

main()

{ int x=8;

for( ;x>0;x--)

{ if(x%3) { printf("%d,",x--); continue;}

printf("%d,",--x);

}

}

程序的运行结果是。

A.7,4,2

B.8,7,5,2

C.9,7,6,4

D.8,5,4,2

本题难度: ★★★★

涉及知识:循环控制结构、continue语句

名师解析:continue语句的功能是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下次是否执行循环的判定。本题执行过程如下:

x=8:判断表达式x>0,值为真,执行for循环,判断条件表达式x%3,值为真,输出x--,即先输出x再减1,即输出8,然后x减1,此时x=7。遇到continue,跳过下面的语句,判断for语句的表达式,由于循环表达式使得x减1,所以此时x再次减1,即x=6。

x=6:判断表达式x>0,值为真,执行for循环,判断条件表达式x%3,值为假,跳过if语句,执行下面的printf语句,输出--x,即x先减1,再输出,此时输出的x为5,判断for语句的表达式,由于循环表达式使得x减1,所以此时x再次减1,即x=4。

x=4:判断表达式x>0,值为真,执行for循环,判断条件表达式x%3,值为真,输出x--,即先输出x再减1,即输出4,然后x减1,此时x=3。遇到continue,跳过下面的语句,判断for语句的表达式,由于循环表达式使得x减1,所以此时x再次减1,即x=2。

x=2:判断表达式x>0,值为真,执行for循环,判断条件表达式x%3,值为真,输出x--,即先输出x再减1,即输出2,然后x减1,此时x=1。遇到continue,跳过下面的语句,判断for语句的表达式,由于循环表达式使得x减1,所以此时x再次减1,即x=0。

x=0:判断表达式x>0,值为假,退出for循环。

5.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是。

A.a^b

B.a|b

C.a&b

D.a<<4

本题难度: ★★★

涉及知识:位运算

名师解析:“按位异或”运算的规则是参与运算的两个相应位同号,则结果为0,不同则为1。从这个规则中我们分析可得,通过与1异或可达到求反的效果,与0异或可保持被异或的值本身不变。

根据此题要求,a和b必然是异或运算,故本题答案为A。<<是C语言中规定的左移运算符,例如a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方。|和&分别是按位或运算符和按位与运算符。

6.有以下程序

#include

int f(int x)

{ int y;

if(x==0||x==1) return(3);

y=x*x-f(x-2);

return y;

}

main()

{ int z;

z=f(3); printf("%d\n",z);

}

程序的运行结果是。

A.0

B.9

C.6

D.8

本题难度: ★★★★★

涉及知识:函数常规调用、嵌套调用、递归调用

名师解析: 本程序中的子函数f是一个递归调用函数,其结束条件是x的值为0或1。首先主函数调用f函数,x值为3,不满足条件x==0||x==1,则执行y=x*x-f(x-2);,所以y=3*3-f(1),调用f(1),满足条件x==0||x==1,返回函数值3,即f(1)的值为3。 y=x*x-f(x-2)=3*3-3=6,即f(3)的结果是6,故程序输出6。

7.程序中已构成如图1所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。

36-f07-2.jpg

若有以下程序段

q=s; s=s->next; p=s;

while (p->next) p=p->next;

p->next=q; q->next=NULL;

该程序段实现的功能是。

A.首结点成为尾结点

B.尾结点成为首结点

C.删除首结点

D.删除尾结点

本题难度: ★★★★★

涉及知识:结构体、指针链表

名师解析: 根据语句q=s得知指针q指向结点a。由s=s->next;p=s得知指针p和s均指向结点b。在满足while语句的情况下,执行p=p->next;得知p现在指向结点c。由p->next=q得知p 指向的结点是a,a移到c的后面。由q->next=NULL得知结点a与结点b的指针断开。移动后的结构图如图2所示:

36-f07-3.jpg

8.有以下程序

#include

main()

{ FILE *fp; int k,n,a[6]={1,2,3,4,5,6};

fp=fopen("d2.dat","w");

fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]); fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);

fclose(fp);

fp=fopen("d2.dat","r");

fscanf(fp,"%d%d",&k,&n); printf("%d%d\n",k,n);

close(fp);

}

程序运行后的输出结果是。

A.1 2

B.1 4

C.123 4

D.123 456

本题难度: ★★★★

涉及知识:文件的综合应用

名师解析:本题首先以创建方式打开文件d2.dat,两次调用fprintf()函数把a[0],a[1],a[2] ,a[3],a[4],a[5]的值写到文件d2.dat中,文件d2.dat的内容为“1,2,3<回车>4,5,6”。

然后把该文件关闭再以只读方式打开,文件位置指针指向文件头,再通过fscanf()函数从中读取两个整数到k和n中,由于格式符之间无间隔,因此输入数据可以用回车隔开,故输入的k的值为123,n的值为456。

9.有以下程序

#include

main()

{char c;

while((c=getchar())!='?') putchar(--c);

}

程序运行时,如果从键盘输入:Y?N?↙,则输出结果为。

本题难度: ★★★

涉及知识:输入输出函数

名师解析: getchar()只能接收一个字符,当从键盘输入Y?N?↙,系统判断出第一个字符Y!='?'条件为真,输出X,继续循环,这时while条件不成立,循环结束。

10.fun函数的功能是:首先在a指向的N行N列的矩阵中,找出各行中的最大的数,再求这N个最大值中的最小的那个数并作为函数值返回。

#include

#define N 100

int fun(int(*a)[N])

{int row,col,max,min;

for(row=0;row

{for(max=a[row][0],col=1;col

if() max=a[row][col];

if(row==0) min=max;

else if() min=max;

}

return min;

}

本题难度: ★★★★

涉及知识:矩阵最大值的算法

名师解析:本题中的第一个空要求判断每一行中的最大数,应该填写条件max

11.函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。

#include

int sstrcmp(char *s,char *t)

{while(*s&&*t&&*s==)

{s++;t++; }

return ;

}

本题难度: ★★★★★

涉及知识:比较两个字符串大小

名师解析:本题是综合性考核试题,也是考试中难度最大的一类题。观察while语句可以看出,当s所指的字符串和t所指的字符串都为非空时,只要判断*s所指的字符和*t所指的字符是否相等即可。若相等,继续循环,判断下一个字符是否也相等;若不等,返回两个字符的ASCⅡ码值之差,即*s-*t。

12.若给fun函数的形参s传送字符串:" 6354abc",则函数的返回值是(字符串中包括空格)。

long fun(char s[ ])

{ long n; int sign;

for (; isspace(*s);s++);

sign=(*s=='-')?-1:1;

if (*s=='+' || *s=='-') s++;

for (n=0;isdigit(*s);s++)

n=10*n+(*s-'0');

return sign*n;

}

本题难度: ★★★★★

涉及知识:函数的返回

名师解析:考生在解答这类题前,必须明确程序代码段的功能。这个函数的目的是提取出由函数形参传送来的字符串中的数字字符,并通过相应各个字符的位置计算出它们数值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是6354。

13.以下程序的输出结果是。

#include

main()

{ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;

for(j=3; j; j--)

{ switch(j)

{ case 1:

case 2: printf("%d",*p++); break;

case 3: printf("%d",*(--p));

}

}

}

本题难度: ★★★★

涉及知识:switch语句应用

名师解析:本题定义并初始化了一个一维数组a,同时将指针变量p指向了a[5]的地址。在for循环中,首先j=3,执行case3后面的语句,由于--p是将p的地址前移一位,所以*(--p)的值为a[4]的值,即输出9。当j=2时,执行case2后面的语句。

由于*p++中++与*同优先级,结合方向为自右而左,因此它等价于*(p++),作用是先得到p指向的变量的值(即*p),然后再使p+1赋给p,所以j=2时先输出a[4]的值9,再使得p指向a[5]的地址。当j=1时,执行case1后面的语句,由于case1后面没有终止语句,所以继续执行case2后面的语句,此时*p的值即a[5]的值,所以输出11,然后p地址后移。

14.给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。

#include

void fun(char *s)

{ int i, j, n;

for(i=0; s[i]!='\0'; i++)

/**********found**********/

if(s[i]>='0' 1 s[i]<='9')

{ n=0;

/**********found**********/

while(s[i+1+n]!= 2) n++;

for(j=i+n+1; j>i; j--)

/**********found**********/

s[j+1]= 3;

s[j+1]='*';

i=i+1;

}

}

main()

{ char s[80]="ba3a54cd23a";

printf("\nThe original string is : %s\n",s);

fun(s);

printf("\nThe result is : %s\n",s);

}

本题难度: ★★★★★

涉及知识:字符串中字符的插入算法

名师解析:程序fun通过for循环对字符串中各个字符进行比较,如果当前字符s[i]介于0到9间(即s[i]>='0'并且s[i]<='9'),则在当前字符后插入一个*字符,否则继续比较下一字符,直到字符串结束。

故第一个空应填&&。在插入字符时,首先计算出当前字符后面还有多少个字符,在本题中是通过while循环来比较当前遍历字符是否为NULL实现的,故第二个空应填NULL。

在开始时应将n初始化为0,然后利用for循环语句将当前字符后面的所有字符都向后移动一位,故第三个空应填s[j],最后在当前字符后插入待插入字符*。不要忘了对i进行一次自加,否则会陷入死循环!

15.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回求出素数的个数。

#include

#include

#include

#define MAX 200

int fun(int lim,int aa[MAX])

{

}

NONO( )

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,

输出数据,关闭文件。 */

int i,j,limit,sum;

int aa[MAX];

FILE *rf, *wf ;

rf = fopen("b14.in", "r") ;

wf = fopen("a14.out", "w") ;

for (j=0;j<4;j++)

{ fscanf(rf,"%d",&limit);

sum=fun(limit,aa);

for(i=0;i

fprintf(wf,"%d\n",aa[i]);

}

fclose(rf) ;

fclose(wf) ;

}

main()

{

int limit,i,sum;

int aa[MAX];

system("cls");

printf("输入一个整数:");

scanf("%d",&limit);

sum=fun(limit,aa);

for(i=0;i

if(i%10==0 && i!=0) printf("\n");

printf("%5d",aa[i]);

}

NONO();

}

本题难度: ★★★★★

涉及知识:找出小于指定数的所有素数

名师解析:从2到指定数lim,找出所有的素数,素数的判断方向是:只能被1和其本身整除,而不能被其他任何数整除的数。

二级VFP语言

16.执行命令A=2005/4/2之后,内存变量A的数据类型是型。

本题难度:★★

涉及知识:考查数据类型

名师解析:在VFP中/表示算术运算符除,2005/4/2系统默认的是数值表达式,所以将数值表达式赋值给变量A,则变量A的数据类型为数值(Numeric)型。

17.在打开项目管理器之后再打开“应用程序生成器”,可以通过按Alt+F2组合键,快捷菜单和“工具”菜单中的。

本题难度:★★★

涉及知识:考查应用程序生成器的应用

名师解析:打开项目管理器之后再打开“应用程序生成器”的方法有:在项目上单击鼠标右键,选择快捷菜单的“生成器”菜单项;从“工具”菜单中启动“应用程序生成器”,单击“向导”,然后单击“全部”,在弹出的“向导选取”对话框中单击“应用程序生成器”;按Alt+F2组合键。

18.表达式VAL(SUBS("奔腾586",5,1))*Len("visual foxpro")的结果是。

本题难度:★★★

涉及知识:考查数据类型转换

名师解析:本题为VFP函数测试,考题比例比较大。主要测试常用函数的格式与应用。SUBSTR的作用是在一个字符串中从指定位置起返回给定长度的子串。语法是:SUBSTR(字符表达式, 起点位置[, 长度]),返回值是字符型。VAL( )的作用是将字符型的数字转换成数值。注意:在VFP中一个汉字占两个字符的宽度。所以Len("中国")=4,Subs("奔腾586",5,1)的返回值是5。

19.设有图书管理数据库:

图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

借阅(借书证号C(4),总编号C(6),借书日期D(8))

检索书价在15元至25元(含15元和25元)之间的图书的书名、作者、书价和分类号,结果按分类号升序排序。

SELECT 书名,作者,单价,分类号 FROM 图书;

WHERE;

ORDER BY;

本题难度:★★★★★

涉及知识:考查数据库查询

名师解析:查询条件的值在什么范围之内,可以使用BETEEN...AND...命令。ORDER BY短语用来对查询的结果进行排序,ASC表示升序,DESC代表降序。它是对最终的查询结果进行排序,不可以在子查询中使用该短语。

20.设有如下关系表R:

R(NO,NAME,SEX,AGE,CLASS)

主关键字是NO

其中NO为学号(数值型),NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。写出实现下列功能的SQL语句。删除学号为20的学生记录。

本题难度:★★★★

涉及知识:SQL删除命令

名师解析:从表中删除数据的SQL命令格式为:DELETE FROM TableName[WHERE Condition]。这里FROM指定从哪个表中删除数据,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的全部记录。注意:SQL语句的DELETE命令同样是逻辑删除记录,如果要物理删除记录需要使用PACK命令。

21.设有如下关系表R:

R(NO,NAME,SEX,AGE,CLASS)

主关键字是NO

其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。写出实现下列功能的SQL语句。插入“95031”班学号为30、姓名为“郑和”的学生记录。

本题难度:★★★★★

涉及知识:SQL插入命令

名师解析:本题主要考核SQL中插入命令的运用(Insert into命令),Insert命令的格式选择是考生的薄弱点,对部分字段操作,要用指定字段的格式。VFP支持两种SQL插入命令的格式,第一种格式是标准格式,第二种格式是VFP的特殊格式。第一种格式:INSERT INTO dbf_mame[(fname1[,fname2,...])]、 values(eExpression1[,eExpression2,...]);第二种格式:INSERT INTO dbf_name FROM ARRAY ArrayName|FROM MEMVAR。

二级Java语言

22. 如果一个线程调用方法,将使该线程进入休眠状态。

本题难度:★★★

涉及知识:线程的基本控制方法

名师解析:本题考核Java语言基本类的运用。Thread类提供的sleep()方法使一个线程暂停运行一段固定的时间。在休眠时间内,线程将不运行。

23.在Java线程中,共享数据的所有访问都必须作为临界区,使用进行加锁控制。

本题难度:★★★★

涉及知识:对象的加锁及其操作

名师解析:一个程序中单独的、并发的线程对同一个对象进行访问的代码段,称为临界区。在Java语言中,临界区可以是一个语句块或是一个方法,并且用synchronized关键字标识。

Java平台将每个由synchronized(Object)语句指定的对象设置一个锁,称为对象锁。共享数据的所有访问都必须作为临界区,使用synchronized进行加锁控制。用synchronized保护的数据也必须是私有的,使线程不能直接访问这些数据,必须通过对象的方法。

24. 实现线程交互的wait()和notify()方法在类中定义。

本题难度:★★★

涉及知识:线程间的wait()和notify()交互

名师解析:有时,某个线程进入了synchronized块后,共享数据的状态并不一定满足该线程的需要,它要等待其他线程将共享数据改变为它需要的状态后才能继续执行,但由于此时它占有了该对象的锁,其他线程无法对共享数据进行操作,为此Java引入wait()和notify(),这两个方法是java.lang.Object类的方法,是实现线程交互的两个方法。

25.Java语言的可以使用它所在类的静态成员变量和实例成员变量,也可以使用它所在方法中的局部变量。

本题难度:★★★

涉及知识:内部类

名师解析:在一个类的内部嵌套定义的类称为内部类,其特点有:内部类的类名只能在定义它的类或程序段中或在表达式内部匿名使用,外部使用它时必须给出类的全名。而且,内部类的类名不允许与包含它的类名相同。

内部类可以使用它所在类的静态成员变量和实例成员变量,也可以使用它所在类的方法中的局部变量。内部类可用abstract修饰定义为抽象类,也可用private或protected定义。内部类可作为其他类的成员,而且可访问它所在类的成员。除static内部类外,不能在类内声明static成员。一旦内部类声明为static,就变成顶层类,不能再使用局部变量。这时可声明static成员。

26. 阅读下列程序段

public class OperatorsAndExpressions{

String conditionalExpression(int score){

String result;

//如果score超过60分,则结果是passed,否则是doesn't pass

result=(score>=60)?"passed":"doesn't pass";

System.out.println(result);

return result;

}

public static void main(String args[]){

OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();

//条件表达式

OperAndExp.conditionalExpression(65);

}

}

其执行结果是。

本题难度:★★★★

涉及知识:参数传递

名师解析:该程序判断conditionalExpression方法的参数score的值是否超过60,如果超过,输出:passed,否则输出:doesn't pass。在main方法中先创建了OperatorsAndExpressions类的对象OperAndExp,随后将实际参数65赋给形式参数score,因为65>60,所以result="passed"。

27. 请将下面程序补充完整。

public class PowerCalc{

public static void main(String[] args){

double x=5.0;

System.out.println(x+"to the power 4 is"+power(x,4));

System.out.println("7.5 to the power 5 is"+power(7.5,5));

System.out.println("7.5 to the power 0 is"+power(7.5,0));

System.out.println("10 to the power -2 is"+power(10,-2));

}

static double (double x,int n){

if(n>1)

return x*power(x,n-1);

else if(n<0)

return 1.0/power(x,-n);

else

return n==0?1.0:x;

}

}

本题难度:★★★

涉及知识:方法的调用

名师解析:程序中main方法的输出语句调用了一个名为power()的方法(例如:System.out.println(x+"to the power 4 is"+power(x,4));),调用时,带入两个参数,参数类型为double和int。由此可见,程序中的static方法的方法名应该填power。

28. 请将下面的Applet程序补充完整。

import java.awt.*;

import java.applet.*;

public class Hi {

public void paint(Graphics g){

g.drawString("Hi!",25,25);

}

}

本题难度:★★★★★

涉及知识:考查的是Applet程序的应用

名师解析:每个Applet必须定义为Applet类的子类。Applet从Applet类继承了很多功能,包括与浏览器的通信、显示图形化用户界面GUI等。

29. 请在下划线处填入代码,使程序正常运行并且输出“Hello!”

class Test {

public static void main(String[] args){

Test t = new Test();

t.start();

}

public void run(){

System.out.println("Hello!");

}

}

本题难度:★★★★★

涉及知识:多线程

名师解析:通过继承Thread类实现多线程的方法是首先设计Thread的子类,然后根据工作需要重新设计线程的run方法,再使用start方法启动线程,将执行权转交到run。根据本题的主方法体的语句“t.start();”和run方法,可知道本题应该填“extends Thread”。

30. 下列程序构造了一个Swing Applet,请在下划线处填入正确的代码

import javax.swing.*;

import java.awt.*;

public class SwingApplet extends {

JLabel l = new JLabel("This is a Swing Applet.");

public void init(){

Container contentPane = getContentPane();

contentPane.add(l);

}

}

本题难度:★★★★★

涉及知识:Swing构件

名师解析:在Applet中可以使用Swing构件,采用这类构件的Applet均继承自javax.swing.JApplet类。由语句“JLabel l = new JLabel("This is a Swing Applet.");”可知,本程序中使用了Swing构件,又根据extends关键字可知,本题应该填JApplet。

冲刺题答案

1.A

2.C

3.C

4.D

5.A

6.C

7.A

8.D

9.X

10.max

11.*t , *s-*t

12. 6354

13. 9 9 11

14.&& , NULL,s[j]

15.int fun(int lim, int aa[max])

{

int i,j=0,k=0;

for(i=2;i

{ for(j=2;j

if(i%j==0) break;

if(j==i) aa[k++]=i;

}

return k;

}

16.数值或Numeric

17.应用程序生成器

18.5

19.单价 beteen 15 and 25 , 分类号

20.Delete form R where NO=20

21.Insert into R (NO,NAME,CLASS) values(30,"郑和",95031)

22.sleep

23.synchronized

24.java.lang.Object

25.内部类

26.passed

27.power

28.extends Applet

29.extends Thread

30.JApplet

编后做了上面的冲刺题,是不是感到意犹未尽?或者想直接跟孙老师进行交流?小编非常理解大家的心情,特意邀请孙老师来我们数动连线论坛做客(进入论坛后,再进入病毒安全板块即可),为大家在线答疑。不管你考的是二级考试的哪种科目,不管你在复习中碰到哪些问题,都可以向孙老师直接请教,时间不多,要抓紧哟!如果你还有什么需要《电脑报》帮忙的,来信就发到:pcw-chendx@vip.sina.com。