二级C语言110真题含答案与解析交互.docx
- 文档编号:29121304
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:30
- 大小:25.95KB
二级C语言110真题含答案与解析交互.docx
《二级C语言110真题含答案与解析交互.docx》由会员分享,可在线阅读,更多相关《二级C语言110真题含答案与解析交互.docx(30页珍藏版)》请在冰豆网上搜索。
二级C语言110真题含答案与解析交互
二级C语言-110
(总分100,做题时间90分钟)
一、选择题
1.
以下选项中,当x为大于1的奇数时,值为0的表达式是______。
A x%2==0
B x/2
C x%2!
=0
D x%2==1
分值:
1
答案:
A
[解析]算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。
B选项的值为不定值,但绝对不是0。
C选项的值为真,即1。
D选项的值为真,即1。
2.
以下叙述中正确的是______。
A 在C语言中,逻辑真值和假值分别对应1和0
B 关系运算符两边的运算对象可以是C语言中任意合法的表达式
C 对于浮点变量x和y,表达式:
x==y是非法的,会出编译错误
D 分支结构是根据算术表达式的结果来判断流程走向的
分值:
2
答案:
B
[解析]A选项中,在C语言中,逻辑真值对应非0;C选项中,表达式:
x==y是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。
因此B选项正确。
3.
若变量已正确定义,以下选项中非法的表达式是______。
A a!
=4||"b"
B "a"=1/2*(x=y=20,x*3)
C "a"%4
D "A"+32
分值:
2
答案:
B
[解析]A选项中"a"即表示a为字符常量,再给"a"赋值1/2*(x=y=20,x*3),是不正确的。
因此B选项正确。
4.
与数学表达式x≥y≥z对应的C语言表达式是______。
A (x>=y)||(y>=x)
B (x>=y>=z)
C (x>=y)!
(y>=z)
D (x>=y)&&(y>=z)
分值:
2.5
答案:
D
[解析]本题考查关系表达式和逻辑表达式。
y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。
因此D选项正确。
5.
若a是数值类型,则逻辑表达式(a==1)||(a!
=1)的值是______。
A 1
B 0
C 2
D 不知道a的值,不能确定
分值:
2.5
答案:
A
[解析]逻辑或“||”要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。
6.
当变量c的值不为2、4、6时,值也为“真”的表达式是______。
A (c>=2&&c<=6)&&(c%2!
=1)
B (c==2)||(c==4)||(c==6)
C (c>=2&&c<=6)&&!
(c%2)
D (c>=2&&c<=6)||(c!
=3)||(c!
=5)
分值:
2.5
答案:
D
[解析]逻辑或运算符中只要有一个运算量为真结果就是真,当c>=2&&c<=6条件不成立时c的值肯定不是2、3、4、5、6,所以c!
=3,与c!
=5均成立。
所以D选项的结果一定为真。
7.
有以下程序:
#include<stdio.h>
main()
{inta=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!
=2||c--!
=3)
printf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
}
程序运行后的输出结果是______。
A 1,3,2
B 1,3,3
C 1,2,3
D 3,2,1
分值:
2.5
答案:
B
[解析]在if语句中,else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运箅对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,进入第二个if语句条件判断,因为b!
=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c--!
=3)c的值不变,也不再执行第一个else语句。
打印a的值1,b的值3,c的值3。
8.
若有以下程序:
#include<stdio.h>
main()
{inta=1,b=2,c=3,d=4;
if((a=2)||(b=1))c=2;
if((c==3)&&(d=-1))a=5;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
则程序的输出结果是______。
A 1,2,3,4
B 2,1,2,-1
C 5,1,2,-1
D 2,2,2,4
分值:
2.5
答案:
D
[解析]第一个if语句的判断条件是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为兵,后面的表达式不再进行执行判断。
执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2。
判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作。
所以结果为选项D。
9.
若有以下程序:
#include<stdio.h>
main()
{inta=1,b=2,c=3,d=4;
if((a=2)&&(b=1))c=2;
if((c==3)||(d=-1))a=5;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
则程序的输出结果是______。
A 2,2,2,4
B 2,1,2,-1
C 5,1,2,-1
D 1,2,3,4
分值:
2.5
答案:
C
[解析]第一个if语句的判断条件是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立执行c=2的赋值操作。
执行第二个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第二个运算对象d=-1,结果为非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。
10.
以下关于逻辑运算符两侧运算对象的叙述中正确的是______。
A 可以是任意合法的表达式
B 只能是整数0或非0整数
C 可以是结构体类型的数据
D 只能是整数0或1
分值:
2.5
答案:
A
[解析]C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A。
11.
设有宏定义:
#defineIsDIV(k,n)((k%n==1)?
1:
0)
且变量m已正确定义并赋值,则宏调用:
IsDIV(m,5)&&IsDIV(m,7)
为真时所要表达的是______。
A 判断m是否能被5和7整除
B 判断m被5和7整除是否都余1
C 判断m被5或者7整除是否余1
D 判断m是否能被5或者7整除
分值:
2.5
答案:
B
[解析]本题考查逻辑运算符的相关概念。
逻辑与若要为真,那么两边都要为真,需要m能被5和7整除,且都余1,所以选项B正确。
12.
表示关系式x≤y≤z的C语言表达式的是______。
A (x<=y)&&(y<=x)
B (x<=y)||(y<=x)
C (x<=y<=z)
D x<=y)!
(y<=x)
分值:
2.5
答案:
A
[解析]本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。
因此A选项正确。
13.
if语句的基本形式是:
if(表达式)语句,以下关于“表达式”值的叙述中正确的是______。
A 必须是逻辑值
B 必须是整数值
C 必须是正数
D 可以是任意合法的数值
分值:
2.5
答案:
D
[解析]if语句中的表达式可以是任意合法的数值,如常量,变量表达式。
所以D选项正确。
14.
有以下计算公式:
若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是______。
A if(x>=0)y=sqrt(x);if(x<0)y=sqrt(-x);
B if(x>=0)y=sqrt(x);elsey=sqrt(-x);
C y=sqrt(x);if(x<0)y=sqrt(-x);
D y=sqrt(x>=0?
x:
-x);
分值:
2.5
答案:
C
[解析]公式的要求是无论x大于等于0还是小于0,y的值都为x绝对值的开方。
选项C中如果x值小于0,则y=sqrt(x)就要出错。
本题重点考察的知识点是:
sqrt()函数。
sqrt()函数的作用是开方计算,要求输入的参数x必须大于等于0。
选项C一开始调用了sqrt(x)而没有判断x的正负,所以是错误的。
15.
下列条件语句中,输出结果与其他语句不同的是______。
A if(a!
=0)printf("%d\n",x);elseprintf("%d\n",y);
B if(a==0)printf("%d\n",y);elseprintf("%d\n",x);
C if(a==0)printf("%d\n",x);elseprintf("%d\n",y);
D if(a)printf("%d\n",x);elseprintf("%d\n",y);
分值:
2.5
答案:
C
[解析]A、B、D选项的含义均为a的值如果为0时打印y的值,否则打印x的值。
但是C选项的含义是:
a的值为0时打印x的值,不为0时打印y的值,与其他选项正好相反。
16.
若有以下程序:
#include<stdio.h>
main()
{inta=1,b=2,c=3,d=4,r=0;
if(a!
=1);elser=1;
if(b==2)r+=2;
else;if(c!
=3)r+=3;
else;if(d==4)r+=4;
printf("%d\n",r);
}
则程序的输出结果是______。
A 10
B 7
C 6
D 3
分值:
2.5
答案:
B
[解析]else总是和与之最近的if配对,执行第一个if,判断条件不成立,执行elser=1;语句。
再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立,执行第7行else后面的空语句“;”。
再执行第四个if的判断条件d==4成立,执行r+=4,r的值为7。
然后打印输出。
17.
若有以下程序:
#include<stdio.h>
main()
{inta=1,b=2,c=3,d=4,r=0;
if(a!
=1);elser=1;
if(b==2)r+=2;
if(c!
=3);r+=3;
if(d==4)r+=4;
printf("%d\n",r);
}
则程序的输出结果是______。
A 3
B 7
C 6
D 10
分值:
2.5
答案:
D
[解析]第一个if语句a!
=1条件为假,所以执行elst后的语句r=1。
第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!
=3条件为假,所以不做任何操作。
执行下面的r+=3操作,r的值变为6。
判断第四个if条件,d==4条件成立,执行r+=4操作,结果为10。
18.
以下叙述中正确的是______。
A 对于逻辑表达式:
a++||b++,设a的值为1,则求解表达式的值后,b的值会发生改变
B 对于逻辑表达式:
a++&&b++,设a的值为0,则求解表达式的值后,b的值会发生改变
C else不是一条独立的语句,它只是if语句的一部分
D 关系运算符的结果有三种:
0,1,-1
分值:
2.5
答案:
C
[解析]B选项和A选项中,&&、||都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。
而且&&、||的优先级比++高,所以题中只需判断a的值即可知道符号表达式的真假;D选项中,关系运算符的结果有“真”和“假”两种。
因此C选项正确。
19.
有以下程序:
#include<stdio.h>
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{ease0:
a++;break;
case1:
b++;break;
}
ease2:
a++:
b++:
break;
case3:
a++;b++;
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是______。
A a=2,b=2
B a=2,b=1
C a=1,b=1
D a=1,b=0
分值:
2.5
答案:
B
[解析]case常量表达式只是起语句标号作用,并不是在该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的ease语句,就从此case子句执行下去,不在进行判断,直到碰到break或函数结束为止。
所以执行内层switch(y)时只执行了a++,此时a的值为1。
然后执行外层case2语句的a++;b++;a为2,b为1。
所以结果为B。
20.
有以下程序段:
#include<stdio.h>
inti,n;
for(i=0;i<8;i++)
{n=rand()%5;
switch(n)
{case1:
case3:
printf("%d\n",n);break;
case2:
case4:
printf("%d\n",n);continue;
case0:
exit(0);
}
printf("%d\n",n);
}
以下关于程序段执行情况的叙述,正确的是______。
A for循环语句固定执行8次
B 当产生的随机数n为4时结束循环操作
C 当产生的随机数n为1和2时不做任何操作
D 当产生的随机数n为0时结束程序运行
分值:
2.5
答案:
D
[解析]case常量表达式只是起语句标号作用,并不是在该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。
简单的说break是结束整个循环体,而continue是结束单次循环。
B选项中当产生的随机数n为4时要执行打印操作。
C选项中当产生的随机数为1和2时分别执行case3与case4后面语句的内容。
由于存在break语句所以for循环不是固定执行8次,执行次数与产生的随机数n有关系。
21.
若有定义:
floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是______。
A switch(a+b){case1:
printf("*\n");case2+1:
printf("**\n");}
B switch((int)x);{case1:
printf("*\n");case2:
printf("**\n");}
C switch(x){case1.0:
printf("*\n");case2.0:
printf("**\n");}
D switch(a+b){case1:
printf("*\n");casec:
printf("**\n");}
分值:
2.5
答案:
A
[解析]B选项中switch((int)x);语句不应该有最后的分号。
switch(expr1),中的expr1不能用浮点类型或long类型,也不能为—个字符串,所以C错误。
case后面常量表达式的类型必须与switch后面表达式的类型一致,所以D错误。
22.
有以下程序:
#include<stdio.h>
main()
{inta[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{case0:
switch(a[i]%2)
{case0:
a[i]++;break;
case1:
a[i]--;
}break;
case1:
a[i]=0;
}
for(i=0:
i<4;i++)printf("%d",a[i]);printf("\n");
}
程序运行后的输出结果是______。
A 0304
B 2050
C 3344
D 3040
分值:
2.5
答案:
D
[解析]第一次循环i为0,i%2为0,执行switch(a[0]%2)中的case0语句,a[0]++,a[0]的值变成3;第二次循环i的值为1,i%2为1,执行case1:
a[i]=0;所以a[1]的值变成0;第三次循环i的值为2,i%2为0,执行switch(a[2]%2)中的case1语句,a[2]--,a[2]的值变成4;第四次循环i的值为3,i%2为1,执行case1:
a[i]=0;所以a[3]的值变成0。
23.
下列叙述中正确的是______。
A 在switch语句中,不一定使用break语句
B 在switch语句中必须使用default
C break语句必须与switch语句中的case配对使用
D break语句只能用于switch语句
分值:
2.5
答案:
A
[解析]default语句在switch语句中可以省略,所以B错误;switch语句中并非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循环结构中,所以D错误。
24.
有以下程序:
#include<stdio.h>
main()
{inty=10;
while(y--);printf("y=%d\n",y);
}
程序执行后的输出结果是______。
A y=0
B y=-1
C y=1
D while构成无限循研
分值:
2.5
答案:
B
[解析]执行y--直到值为0,由于y--是先用再减,所以退出循环时,y的值为-1。
25.
有以下程序:
#include<stdio.h>
main()
{intk=5;
while(--k)printf("%d",k-=3);
printf("\n");
}
执行后的输出结果是______。
A 1
B 2
C 4
D 死循环
分值:
2.5
答案:
A
[解析]--k先自减再使用,所以第一次判断条件即为while(4),条件为真,打印k的值,k=4-3,结果为1;第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符。
所以选择A选项。
26.
关于“while(条件表达式)循环体”,以下叙述正确的是______。
A 循环体的执行次数总是比条件表达式的执行次数多一次
B 条件表达式的执行次数总是比循环体的执行次数多一次
C 条件表达式的执行次数与循环体的执行次数一样
D 条件表达式的执行次数与循环体的执行次数无关
分值:
2.5
答案:
B
[解析]while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,再执行,直到最后一次判断条件后不成立,跣出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择B选项。
27.
有以下函数:
intfun(char*s)
{char*t=s;
while(*t++);
return(t-s);
}
该函数的功能是______。
A 计算s所指字符串的长度
B 比较两个字符串的大小
C 计算s所指字符串占用内存字节的个数
D 将s所指字符串复制到字符串t中
分值:
2.5
答案:
A
[解析]首先char*s接受一个字符型数组的首地址,并将这个首地址赋给另—个字符型指针char*t,while(*t++)不断循环直到*t为“\0”,再将t-1,这时字符指针t指向字符串的最后一个字符,又因为s指向字符数组的首地址,即字符串的首地址,所以return(t-s)便是返回字符数组中字符串的长度。
28.
有以下程序:
#include<stdio.h>
main()
{inta=7;
while(a--);
printf("%d\n",a);
}
程序运行后的输出结果是______。
A 0
B -1
C 1
D 7
分值:
2.5
答案:
B
[解析]a--的含义是先使用后减1,所以当a的值为0时,跳出循环,但是仍要执行a--,a的值变为-1。
29.
有以下函数:
intaaa(char*s)
{char*t=s;
while(*t++);
t--;
return(t-s);
}
以下关于aaa函数功能叙述正确的是______。
A 将串s复制到串t
B 比较两个串的大小
C 求字符串s的长度
D 求字符串s所占字节数
分值:
2.5
答案:
C
[解析]本题重点考查的知识点while循环语句的应用。
aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。
当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t--;语句让它回到结束标识处。
最后返回t-s,s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。
因此C选项正确。
30.
在以下给出的表达式中,与while(E)中的(E)不等价的表达式是______。
A (E>0||E<0)
B (E==0)
C (!
E==0)
D (E!
=0)
分值:
2.5
答案:
B
[解析]while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好相反,因此选择B选项。
31.
有以下程序:
#include<stdio.h>
intfun(chars[])
{intn=0;
while(*s<="9"&&*s>="0"){n=10*n+*s-"0";s++;}
return(n);
}
main()
{chars[10]={"6","1","*","4","*","9","*"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 110 真题含 答案 解析 交互