全国计算机等级考试二级C笔试试题详解.docx
- 文档编号:28386047
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:25
- 大小:30.06KB
全国计算机等级考试二级C笔试试题详解.docx
《全国计算机等级考试二级C笔试试题详解.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C笔试试题详解.docx(25页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C笔试试题详解
2000年9月全国计算机等级考试二级C笔试试题详解
一、选择题
(16)若变量已正确定义并赋值,以下符合C语言语法的表达式是
A)a:
=b+1B)a=b=c+2C)int18.5%3D)a=a+7=c+b
希希讲解(16):
用排除法。
A)中包含一个不合法的运算符“:
=”,错;C)明显错;D)可分解为两个表达式:
a+7=c+b和a=a+7,其中第一个是错的,因为C规定:
赋值号的左面只能是单个变量,不能是表达式或常量等。
因此,正确答案是B),它实际上相当于:
a=(b=c+2),进而可分解为两个表达式:
b=c+2和a=b。
(17)C语言中运算对象必须是整型的运算符是
A)%=B)/C)=D)<=
希希讲解(17):
前几年曾经考过类似的题目,很简单,正确答案是A)。
C规定:
取余运算符的运算对象必须是整型,复合运算符“%=”中包含%运算,它的运算对象也必须是整型。
(18)若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是
A)1 B)2 C)2.0 D)2.5
希希讲解(18):
该题的解答请参阅本站的“整数除法的注意事项”和“逗号表达式”两个主题讲座,那里有详细的分析。
正确答案是C)。
(19)若变量a,i已正确定义,且i已正确赋值,合法的语句是
A)a==1 B)++i; C)a=a++=5; D)a=int(i);
希希讲解(19):
(A)中是一个表达式,因为缺少分号,所以不是语句;(C)的错误同(16)题(D)的错误一样;(D)若改为a=(int)i;则是合法的语句,小括号写错了位置,从另一个角度理解,(D)的写法应该是一个函数调用语句,函数名是int,小括号中的i是实参,这样的话,函数名int又是不合法的,因为C规定:
用户标识符(包括函数名)不能是关键字,而int是一个关键字。
所以,正确答案是(B),它相当于语句i=i+1;
(20)若有以下程序段
intc1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后c3中的值是
A)0 B)0.5 C)1 D)2
希希讲解(20):
因为运算表达式中有一个浮点型数据1.0,所以,运算结果应该也是一个浮点类型,只有(B)符合这一条件,仅根据这一点就可以确定(B)是正确答案。
该语句的执行过程
(1)先将c2的值2转换为2.0;
(2)计算1.0/2.0,得到中间结果0.5;(3)将c1的值1转换为1.0;(4)计算0.5*1.0,得到结果0.5;(5)将0.5赋值给变量c3。
(21)有如下程序
main()
{
inty=3,x=3,z=1;
printf("%d%d\n",(++x,y++),z+2);
}
运行该程序的输出结果是
A)34B)42C)43D)33
希希讲解(21):
printf函数输出两个表达式的值,第一个是(++x,y++),它是逗号表达式,它的值应该就是y++的值3(关于逗号表达式,请参阅本站“二级C常考题型”中的一个专题的内容);第二个表达式是z+2,它的值为3。
所以,正确答案是(D)。
(22)能正确表达逻辑关系"a≥10"或"a≤0"的C语言表达式是
A)a>=10ora<=0 B)a>=0|a<=10
C)a>=10&&a<=0 D)a>=10||a<=0
希希讲解(22):
题目要求很明确,两个关系式"a≥10"和"a≤0"之间是“或”的关系,C语言中,逻辑“或”用运算符“||”,四个选项中只有(D)满足这一条件,它就是正确答案。
(23)有如下程序
main()
{
intx=1,a=0,b=0;
switch(x){
case0:
b++;
case1:
a++;
case2:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是
A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2
希希讲解(23):
该题目的关键是要搞清楚该程序执行了哪几条语句。
由于x的值等于1,所以switch结构中,程序从case1后面的语句开始执行,又因为case1后面的语句没有以break结束,所以程序要继续往下执行case2后面的语句。
所以,该程序共执行了这三条语句:
a++;a++;b++;因此,变量a和b最后的值应该为2和1,正确答案为(A)。
(24)有如下程序
main()
{
floatx=2.0,y;
if(x<0.0)y=0.0;
elseif(x<10.0)y=1.0/x;
elsey=1.0;
printf("%f\n",y);
}
该程序的输出结果是
A)0.B)0.C)0.D)1.
希希讲解(24):
该题目测验你对if...elseif结构的理解,比较简单。
x的值满足x<10.0的关系,所以程序将执行y=1.0/x;语句,y的值应该等于0.5。
最后,用printf函数输出时,%f的输出格式为小数点后保留6位,所以,(C)是正确答案。
(25)有如下程序
main()
{
inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec++;
printf("%d\n",c);
}
该程序的输出结果是
A)0 B)1 C)2 D)3
希希讲解(25):
该题目测验你对else和if的配对规则的理解。
程序中有二个if和一个else,这个else应该和哪个if配对成为一个if...else结构呢?
C中规定:
else总是与它前面最近的一个(还没有与else配成对的)if相配对。
因此,题目中的else应该与第二个if配对成为一个if...else结构,这个if...else结构从语法上看应该视为一条语句,因此,该程序中的if...else结构相当于下面的结构:
if(a
{
if(b<0)c=0;
elsec++;
}
由此不难看出,程序中的c=0;和c++;两条语句均没有执行,所以,输出结构为2,正确答案是(C)。
(26)有如下程序
main()
{
inti,sum;
for(i=1;i<=3;sum++)sum+=i;
printf("%d\n",sum);
}
该程序的执行结果是
A)6 B)3 C)死循环 D)0
希希讲解(26):
该程序中的循环执行过程中,变量i的值经初始化后(值为1)始终没有改变,所以,循环条件i<3也就始终成立,因此,这是一个死循环。
正确答案是(C)。
(27)有如下程序
main()
{
intx=23;
do{
printf("%d",x--);
}while(!
x);
}
该程序的执行结果是
A)321B)23C)不输出任何内容D)陷入死循环
希希讲解(27):
该题目的关键是正确理解
(1)do...while的执行流程;
(2)循环条件!
x的含义。
do...while结构属于先执行后判断的循环类型,也即,不管循环条件是否成立,它的循环体至少要执行一次,至于以后是否要执行,那得由while后小括号中的循环条件来决定。
所以,该程序首先要执行一次循环体,输出表达式x--的值(23),输出后,x的值变为22,程序接下来判断表达式!
x是否为“真”,因为x的值为“非零”,经过“非”运算后表达式的值为0,也即为逻辑“假”,所以,循环不再进行。
正确结果是(B)。
(28)有如下程序
main()
{
intn=9;
while(n>6){n--;printf("%d",n);}
}
该程序的输出结果是
A)987B)876C)8765D)9876
希希讲解(28):
该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。
第一次进入循环时,n的值是9,循环体内,先经过n--运算,n的值变为8,所以第一次的输出值是8,由此可以排除(A)和(D)。
由循环条件n>6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环体时输出为6,由此可以排除(C),所以,只剩下(B),它就是正确答案。
(29)设有说明语句chara='\72',则变量a
A)包含1个字符B)包含2个字符
C)包含3个字符D)说明不合法
希希讲解(29):
‘\72’是一个转义字符(这里的72是八进制,对应于十进制的58,表示这是一个ASCII码值为58的字符),正确答案为(A)。
(30)有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是
A)3 B)4 C)5 D)有语法错误
希希讲解(30):
该题目的正确答案为(A),请参阅本站“二级C常考题型”中“逗号表达式”专题,那里由详细解释。
(31)有如下程序
intfunc(inta,intb)
{
return(a+b);
}
main()
{
intx=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
该程序的输出结果是
A)12 B)13 C)14 D)15
希希讲解(31):
该题的关键在于对r=func(func(x,y),z);语句的理解。
该语句的执行过程是:
(1)执行func(x,y),返回值是7;
(2)将func(x,y)的返回值7作为一个实参,z作为第二个实参,再进行一次func函数的调用,相当于执行func(7,z)调用,返回值为15;(3)将15赋值给变量r。
所以,正确答案是(D)。
(32)有如下程序段
int*p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值
A)12 B)11 C)10 D)编译出错
希希讲解(32):
关键在于对指针的理解。
语句p=&a;使指针p指向了变量a,在这以后,有以下两个等价关系:
(1)p和&a等价;
(2)*p和a等价。
也即,凡是有*p的地方均可以a替代,反之也然。
于是,语句a=*p+b;就相当于a=a+b;运算后a中的值为11。
正确答案是(B)。
(33)对于基类型相同的两个指针之间,不能进行的运算是
A)< B)= C)+ D)-
希希讲解(33):
正确答案为(C)。
(34)以下函数返回a所指数组中最小值所在的下标值
fun(int*a,intn)
{
inti,j=0,p;
p=j;
for(i=j;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 笔试 试题 详解