论文部分内容阅读
为帮助报名参加9月份NCRE考试的考生积极备考,本刊与教育部考试中心合作,由全国计算机等级考试官方对2007年4月考试的试题进行分析,依靠官方统计数据,选择出考生容易出错或得分率很低的重点和难点真题试题进行深入分析。相信通过分析这些试题,对大家熟悉NCRE考试和提高自身的水平,一定会有帮助。本刊首先刊登二级Java语言和C语言的分析总结,在以后的几期,我们会对其他项目也进行分析,敬请全国的考生们关注。
2007年4月二级Java程序设计
重点及难点试题分析
【试题描述】
请阅读下面程序
public class OperatorsAndExpressions {
void residual( ){
int i=100,j=30;
float m=563.5f,n=4.0f;
System.out.println(i%j);
System.out.println(m%n);
}
public static void main(String args[]){
OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();
//取模运算符在整数和浮点数中的应用
OperAndExp.residual( );}}
程序运行结果是
(A)10 (B)20 (C)10 (D)20
3.5 2.5 4.5 3.5
【试题考察知识点】可以看出该题是通过程序的形式考查考生对浮点数“%”操作运算和整数“%”操作运算的理解。“%”是取余运算符号,对于整数(int)取余运算的结果是整数(int);对于浮点数(float)取余运算的结果也是浮点数。
【解题思路】通过笔算得出整数运算取余结果是10,浮点数取余运算结果是3.5,所以该题的正确答案是A
【统计数据分析】该题目在得分较低的考生中(试卷得分为0-20分)回答正确和错误的考生群体各为一半,在得分最高的考生中(试卷得分为80-100分)回答正确的考生接近于100%,所以该题目能够很好地区分不同的考生群体。
【试题描述】
请阅读下面程序
public class ForLoopStatement {
public static void main(String[] args) {
int i,j;
for(i=1;i<5;i++){//i循环
for(j=1;j<=i;j++) //j循环
System.out.print(i+"×"+j+"="+i*j+"");
System.out.println( );
}
}
}
程序完成后,i循环和j循环执行的次数分别是
(A)4,10 (B)8,9
(C)9,8 (D)10,10
【考察知识点】该题是通过程序的形式考查考生对for语句的嵌套循环执行次数的判断以及for语句的特点(已知循环次数时使用)。
【解题思路】由程序可以看出该题目由两条for语句嵌套组成(i循环和j循环),具体的执行次数如下表
通过上表的分析可以看出i循环的执行次数为4次,j循环执行次数为10次,所以得出本题的正确答案为A
【统计数据分析】根据本次考试的考生抽样统计结果分析发现该题目的难度比较低,试卷得分超过40分的考生答对率为85.3%,可以看出大部分考生对嵌套式的for循环及for循环的变量能够很好地理解。
【试题描述】
Java对I/O访问所提供的同步处理机制是
(A)字节流 (B)过滤流
(C)字符流 (D)压缩文件流
【考察知识点】通过该题目的描述可以看出该题目是考查考生对I/O访问同步处理机制概念的理解。
【解题思路】Java语言为I/O访问提供的流为字节I/O流、字符I/O流、过滤流和管道流等,其中过滤流是保证某时刻只有一个线程访问一个I/O流,所以过滤流能够提供I/O访问的同步处理机制,根据上述分析可以知道本题的正确答案是B。
【统计数据分析】52%的考生则回答错误,在回答错误的考生中80%的考生选择了干扰项A或者C,说明考生群体对I/O流的基本知识有一定了解,但是如果深入到具体的概念就会产生错误的判断。
2007年4月NCRE二级C语言程序设计笔试卷
重点及难点试题分析
【试题描述】
有以下程序
main( )
{ int k=5,n=0;
do
{ switch(k)
{ case 1:case 3: n+=1;k--;break;
default: n=0;k--;
case 2:case 4: n+=2;k--;break;
}
printf("%d",n);
}while(k>0 && n<5);
}
程序运行后的输出结果是
(A)235 (B)0235
(C)02356 (D)2356
【考察知识点】该题考核考生对选择结构中switch语句和break语句的理解。在C语言中,switch语句通常和break语句联合使用,使得switch语句真正起到分支的作用。选择B和C的考生是没有理解default标号后,也是需要break作为间断的,否则将继续执行至switch语句体结束。
【解题思路】
所以在每次执行后输出n值的结果就是:235,答案为A
【统计数据分析】本题只有19%的考生答对,有31.4%的考生选择了B,30%的同学选择了C。
【试题描述】
有以下函数
int fun(char *s)
{char *t=s;
while(*t++);
return(t-s);
}
该函数的功能是:
(A)比较两个字符串的大小
(B)计算s所指字符串占用内存字节的个数
(C)计算s所指字符串的长度
(D)将s所指字符串复制到字符串t中
【考察知识点】该题考核考生对字符型指针和自加运算符的理解。在fun函数中,t首先被赋予了与s所指变量相同的首地址,执行“while(*t++);”语句后,循环体在指向字符串最后的“\0”时停止,此时t由于自加运算,指在“\0”后面一个内存地址处,所以当函数返回t-s时,得到两个内存字节的地址之差,也就是s所指字符串占用内存字节的个数。
【解题思路】举例:若*s="abc",该字符串的长度为3,占用4个内存字节(含最后一个结束符“\0”)。(t-s)为4,答案为B。
【统计数据分析】本题有25.7%的考生答对,有41.2%的考生选择了C。属于难题。
有以下程序
void f(int *q)
{ int i=0;
for( ;i<5;i++)(*q)++;
}
main( )
{ int a[5]={1,2,3,4,5},i;
f(a);
for (i=0;i<5;i++)printf("%d,",a[i]);
}
程序运行后的输出结束结果是
(A)2,2,3,4,5, (B)6,2,3,4,5,
(C)1,2,3,4,5, (D)2,3,4,5,6,
【考察知识点】该题考核的关键是在对“(*q)++;”语句的理解。语句的作用是将指针q所指的元素增1,每循环一次,对q所指的a[0]元素增加1,并未移动指针q。在执行f函数后,q所指数组的首个元素的数值增加了5。
【解题思路】很多考生选择D,错误之处就在于将“(*q)++;”语句理解指针内容加1,同时指针向后移动了一个元素。若要实现这个目标,则可以使用语句“(*q++)+=1;”,答案为B。
【统计数据分析】本题有25.8%的考生答对,有42.8%的考生选择了D。试题本身并非难题。
【试题描述】
以下程序的运行结果是
int k=0;
void fun(int m)
{ m+=k; k+=m; printf("m=%d k=%d ",m,k++);}
main( )
{ int i=4;
fun(i++); printf("i=%d k=%d\n",i,k);
}
【考察知识点】该题考核对自加运算和全局变量的理解。实参中表达式为i++,主函数中,i变为5(表达式值为4)。在函数fun里,m仍为4,k在执行printf语句之前为4,但在执行打印语句之后全局变量k变为5。所以首先输出:m=4 k=4,然后在主函数里输出:i=5 k=5。答案为m=4 k=4 i=5 k=5。
【统计数据分析】本题只有15.4%的考生答对。
2007年4月二级Java程序设计
重点及难点试题分析
【试题描述】
请阅读下面程序
public class OperatorsAndExpressions {
void residual( ){
int i=100,j=30;
float m=563.5f,n=4.0f;
System.out.println(i%j);
System.out.println(m%n);
}
public static void main(String args[]){
OperatorsAndExpressions OperAndExp=new OperatorsAndExpressions();
//取模运算符在整数和浮点数中的应用
OperAndExp.residual( );}}
程序运行结果是
(A)10 (B)20 (C)10 (D)20
3.5 2.5 4.5 3.5
【试题考察知识点】可以看出该题是通过程序的形式考查考生对浮点数“%”操作运算和整数“%”操作运算的理解。“%”是取余运算符号,对于整数(int)取余运算的结果是整数(int);对于浮点数(float)取余运算的结果也是浮点数。
【解题思路】通过笔算得出整数运算取余结果是10,浮点数取余运算结果是3.5,所以该题的正确答案是A
【统计数据分析】该题目在得分较低的考生中(试卷得分为0-20分)回答正确和错误的考生群体各为一半,在得分最高的考生中(试卷得分为80-100分)回答正确的考生接近于100%,所以该题目能够很好地区分不同的考生群体。
【试题描述】
请阅读下面程序
public class ForLoopStatement {
public static void main(String[] args) {
int i,j;
for(i=1;i<5;i++){//i循环
for(j=1;j<=i;j++) //j循环
System.out.print(i+"×"+j+"="+i*j+"");
System.out.println( );
}
}
}
程序完成后,i循环和j循环执行的次数分别是
(A)4,10 (B)8,9
(C)9,8 (D)10,10
【考察知识点】该题是通过程序的形式考查考生对for语句的嵌套循环执行次数的判断以及for语句的特点(已知循环次数时使用)。
【解题思路】由程序可以看出该题目由两条for语句嵌套组成(i循环和j循环),具体的执行次数如下表
通过上表的分析可以看出i循环的执行次数为4次,j循环执行次数为10次,所以得出本题的正确答案为A
【统计数据分析】根据本次考试的考生抽样统计结果分析发现该题目的难度比较低,试卷得分超过40分的考生答对率为85.3%,可以看出大部分考生对嵌套式的for循环及for循环的变量能够很好地理解。
【试题描述】
Java对I/O访问所提供的同步处理机制是
(A)字节流 (B)过滤流
(C)字符流 (D)压缩文件流
【考察知识点】通过该题目的描述可以看出该题目是考查考生对I/O访问同步处理机制概念的理解。
【解题思路】Java语言为I/O访问提供的流为字节I/O流、字符I/O流、过滤流和管道流等,其中过滤流是保证某时刻只有一个线程访问一个I/O流,所以过滤流能够提供I/O访问的同步处理机制,根据上述分析可以知道本题的正确答案是B。
【统计数据分析】52%的考生则回答错误,在回答错误的考生中80%的考生选择了干扰项A或者C,说明考生群体对I/O流的基本知识有一定了解,但是如果深入到具体的概念就会产生错误的判断。
2007年4月NCRE二级C语言程序设计笔试卷
重点及难点试题分析
【试题描述】
有以下程序
main( )
{ int k=5,n=0;
do
{ switch(k)
{ case 1:case 3: n+=1;k--;break;
default: n=0;k--;
case 2:case 4: n+=2;k--;break;
}
printf("%d",n);
}while(k>0 && n<5);
}
程序运行后的输出结果是
(A)235 (B)0235
(C)02356 (D)2356
【考察知识点】该题考核考生对选择结构中switch语句和break语句的理解。在C语言中,switch语句通常和break语句联合使用,使得switch语句真正起到分支的作用。选择B和C的考生是没有理解default标号后,也是需要break作为间断的,否则将继续执行至switch语句体结束。
【解题思路】
所以在每次执行后输出n值的结果就是:235,答案为A
【统计数据分析】本题只有19%的考生答对,有31.4%的考生选择了B,30%的同学选择了C。
【试题描述】
有以下函数
int fun(char *s)
{char *t=s;
while(*t++);
return(t-s);
}
该函数的功能是:
(A)比较两个字符串的大小
(B)计算s所指字符串占用内存字节的个数
(C)计算s所指字符串的长度
(D)将s所指字符串复制到字符串t中
【考察知识点】该题考核考生对字符型指针和自加运算符的理解。在fun函数中,t首先被赋予了与s所指变量相同的首地址,执行“while(*t++);”语句后,循环体在指向字符串最后的“\0”时停止,此时t由于自加运算,指在“\0”后面一个内存地址处,所以当函数返回t-s时,得到两个内存字节的地址之差,也就是s所指字符串占用内存字节的个数。
【解题思路】举例:若*s="abc",该字符串的长度为3,占用4个内存字节(含最后一个结束符“\0”)。(t-s)为4,答案为B。
【统计数据分析】本题有25.7%的考生答对,有41.2%的考生选择了C。属于难题。
有以下程序
void f(int *q)
{ int i=0;
for( ;i<5;i++)(*q)++;
}
main( )
{ int a[5]={1,2,3,4,5},i;
f(a);
for (i=0;i<5;i++)printf("%d,",a[i]);
}
程序运行后的输出结束结果是
(A)2,2,3,4,5, (B)6,2,3,4,5,
(C)1,2,3,4,5, (D)2,3,4,5,6,
【考察知识点】该题考核的关键是在对“(*q)++;”语句的理解。语句的作用是将指针q所指的元素增1,每循环一次,对q所指的a[0]元素增加1,并未移动指针q。在执行f函数后,q所指数组的首个元素的数值增加了5。
【解题思路】很多考生选择D,错误之处就在于将“(*q)++;”语句理解指针内容加1,同时指针向后移动了一个元素。若要实现这个目标,则可以使用语句“(*q++)+=1;”,答案为B。
【统计数据分析】本题有25.8%的考生答对,有42.8%的考生选择了D。试题本身并非难题。
【试题描述】
以下程序的运行结果是
int k=0;
void fun(int m)
{ m+=k; k+=m; printf("m=%d k=%d ",m,k++);}
main( )
{ int i=4;
fun(i++); printf("i=%d k=%d\n",i,k);
}
【考察知识点】该题考核对自加运算和全局变量的理解。实参中表达式为i++,主函数中,i变为5(表达式值为4)。在函数fun里,m仍为4,k在执行printf语句之前为4,但在执行打印语句之后全局变量k变为5。所以首先输出:m=4 k=4,然后在主函数里输出:i=5 k=5。答案为m=4 k=4 i=5 k=5。
【统计数据分析】本题只有15.4%的考生答对。