二级C语言笔试-358
(总分:105.00,做题时间:90分钟)
一、选择题(总题数:50,分数:64.00)
1.在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部特性,而对象的内部对外是不可见的。”这一性质指的是对象的
A) 分类性 B) 标识惟一性 C) 多态性 D) 封装性
(分数:1.00)
A) 分类性 B) 标识惟一性 C) 多态性 D) 封装性
(分数:1.00)
A.
B.
C.
D. √
解析:[解析] 从外面看只能看到对象的外部特性,而对象的内部,即处理能力的实行和内部状态,指的是对象的封装性。
2.C语言结构体类型变量在程序运行期间( )。
A) TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B) 所有的成员一直驻留在内存中
C) 只有最开始的成员驻留在内存中
D) 部分成员驻留在内存中
(分数:1.00)
A) TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B) 所有的成员一直驻留在内存中
C) 只有最开始的成员驻留在内存中
D) 部分成员驻留在内存中
(分数:1.00)
A.
B. √
C.
D.
解析:[解析] 结构体类型的变量在程序运行期间要作为一个整体占用连续的内存单元。
3.有以下程序段
int m=0,n=1;
char c='b';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d/n",m,c,n);
若从键盘上输入:10B10<回车>,则输出结果是______。
A) 10,B,10 B) 10,b,10 C) 10,b,1 D) 10,B,1
(分数:1.00)
int m=0,n=1;
char c='b';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d/n",m,c,n);
若从键盘上输入:10B10<回车>,则输出结果是______。
A) 10,B,10 B) 10,b,10 C) 10,b,1 D) 10,B,1
(分数:1.00)
A. √
B.
C.
D.
解析:
4.有以下程序:
main()
int c=35; printf("%d/n",c&c);
程序运行后的输出结果是( )。
A) 0 B) 70 C) 35 D) 1
(分数:1.00)
main()
int c=35; printf("%d/n",c&c);
程序运行后的输出结果是( )。
A) 0 B) 70 C) 35 D) 1
(分数:1.00)
A.
B.
C. √
D.
解析:[解析] 位与运算是将两个运算分量看作两个二进制数,然后对两个二进制数的相应位进行与运算,若同时为1则结果相应位为1,否则结果相应位为0。因此,当两个运算分量相同时,它们的相应位肯定也相同,即不同为1就同为0。所以得到的结果和运算分量也相同。所以,4个选项中选项 C) 符合题意。
5.下列程序的输出结果是
main()
double d=3.2;int x,y;enum c++
x=1.2;y=(x+3.8)/5.0;
printf("%d/n",d*y);
A) 3 B) 3.2 C) 0 D) 3.07
main()
double d=3.2;int x,y;enum c++
x=1.2;y=(x+3.8)/5.0;
printf("%d/n",d*y);
A) 3 B) 3.2 C) 0 D) 3.07
(分数:1.00)
A.
B.
C. √
D.
解析:[解析] 考查复合的赋值表达式。
[解题要点] 本题中,程序先执行语句x=1.2;,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程:先将整型变量x的值1转换为 double型1.0,然后与3.8进行加法运算,得到中间结果 4.8。接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进
[解题要点] 本题中,程序先执行语句x=1.2;,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程:先将整型变量x的值1转换为 double型1.0,然后与3.8进行加法运算,得到中间结果 4.8。接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进
行赋值运算,赋值号左边的变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0,d *y的值也为0。
[考点链接] 格式输出语句printf的使用。
[考点链接] 格式输出语句printf的使用。
6.能正确表示“当x的取值在[1,10]和[100,110]范围内为真,否则为假”的表达式是( )。
A) (x>=1)&&(x<=10)&&(x>=100)&&(X<=110)
B) (x>=1)||(x<=10)||(x>=100)||(x<=110)
C) (x>=1)&&(x<=10)||(x>=100)&&(x<=110)
D) (x>=1)||(x<=10)&&(x>=100)||(x<=110)
(分数:1.00)
A) (x>=1)&&(x<=10)&&(x>=100)&&(X<=110)
B) (x>=1)||(x<=10)||(x>=100)||(x<=110)
C) (x>=1)&&(x<=10)||(x>=100)&&(x<=110)
D) (x>=1)||(x<=10)&&(x>=100)||(x<=110)
(分数:1.00)
A.
B.
C. √
D.
解析:[解析] 本题考查逻辑与(&&)和逻辑或(||)运算符的使用。x值在[1,10]之间,C语言中可以写成x值在[100,110]之间,C语言表达式应写成“(x>=100)&&(x>=110)”;[1,10]和[100,110]满足任意条件就可以,所以是逻辑或的关系,因此只要将前两个表达式用逻辑或运算符连接起来即可,所以最后的表达式:(x>=1)&&(x<=10)||(x>=100)&&(x<=110)。
7.运行下列程序时,若输入的数据为“1,2,3”,则输出结果是( )。
main()
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a<b)
t=a;a=b;b=t;
if(a<c)
t=a;a=c;c=t;
if(b<c)
main()
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a<b)
t=a;a=b;b=t;
if(a<c)
t=a;a=c;c=t;
if(b<c)
t=b;b=c;c=t;)
printf("%f/n%f/n%f/n",a,b,c);
A) 1.00 B) 1.00
2.00 3.00
3.00 2.00
C) 1 D) 3.000000
3 2.000000
2 1.000000
(分数:1.00)
printf("%f/n%f/n%f/n",a,b,c);
A) 1.00 B) 1.00
2.00 3.00
3.00 2.00
C) 1 D) 3.000000
3 2.000000
2 1.000000
(分数:1.00)
A.
B.
C.
D. √
解析:[解析] 本题考查if语句。第1个if语句,实现如果a<b,则交换a、b值的功能;第2个if语句,实现如果a<c,则交换a、c的值的功能;第3个if语句,实现如果b<c,则交换b、c的值的功能。3个if语句结合起来实现的功能就是将a、b、c按从大到小排序。
8.以下程序的功能是计算s=1+12+123+1234+12345。
main()
int t=0,s=0,i;
for(i=1;i<=5;i++)
t=i+;
s=s+t;
printf("s=d%/n",s);
main()
int t=0,s=0,i;
for(i=1;i<=5;i++)
t=i+;
s=s+t;
printf("s=d%/n",s);
则程序运行后的输出结果是
A) t B) t*10 C) t*100 D) t+10
(分数:1.00)
A.
B. √
C.
D.
解析:[解析] 1、12、123、1234、12345可以写成1=0*10+1、12=1*10+2、123=12*10+3、123=123*10+4、12345=1234*10+5.按照这种规律后一项可以等于前一项乘以10再加上循环变量。这属于循环里面比较难的题目,需要考生出其数据的内在规律,
并转化为计算机语言,基本上都是累加和累积两种。
9.若x和y都是int型变量,x=100,y=200,且有程序片段:printf("%d",(x,y));
上面程序片段的输出结果 ( )
A) 200
B) 100
C) 100 200
D) 输出格式符不够,输出不确定的值
(分数:1.00)
上面程序片段的输出结果 ( )
A) 200
B) 100
C) 100 200
D) 输出格式符不够,输出不确定的值
(分数:1.00)
A. √
B.
C.
D.
解析:
10.有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
int data;
struct node*next;
*p,*q,*r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 ______。
A) q->next=r->next;r->next=q;p->next=r;
B) q->next=r->next;p->next=r;r->next=q;
C) p->next=r;q->next=r->next;r->next=q;
D) r->next=q;q->next=r->next;p->next=r;
(分数:1.00)
struct node
int data;
struct node*next;
*p,*q,*r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 ______。
A) q->next=r->next;r->next=q;p->next=r;
B) q->next=r->next;p->next=r;r->next=q;
C) p->next=r;q->next=r->next;r->next=q;
D) r->next=q;q->next=r->next;p->next=r;
(分数:1.00)
A.
B.
C.
D. √
解析:
11.以下对枚举类型名的定义中正确的是( )。
A) enum a=one,two,three;
B) enum aone=9,two=-1.three=200;
C) enum a="one","two","four";
D) enum a"nine","two","three";
(分数:1.00)
A) enum a=one,two,three;
B) enum aone=9,two=-1.three=200;
C) enum a="one","two","four";
D) enum a"nine","two","three";
(分数:1.00)
A.
B. √
C.
D.
解析:[解析] 枚举类型的定义类似于结构体和共用体,所以选项A和C不正确。大括号中的枚举元素应该使用合法标识符来定义,而不是字符串常量,所以选项D不正确。故应该选择B。
12.下列数据结构中,能用二分法进行查的是( )。
A) 顺序存储的有序线性表 B) 结性链表
C) 二叉链表 D) 有序线性链表
(分数:2.00)
A) 顺序存储的有序线性表 B) 结性链表
C) 二叉链表 D) 有序线性链表
(分数:2.00)
A. √
B.
C.
D.
解析:[解析] 二分法查只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表,都只能采用顺序查。
13.若有代数式 (其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是
A) sqrt(abs(n^x+e^X)) B) sqrt(fabs(pow(n,x)+pow(x,e)))
C) sqrt(fabs(pow(n,x)+exp(X))) D) sqrt(fabs(pow(x,n)+exp(x)))
(分数:1.00)
A) sqrt(abs(n^x+e^X)) B) sqrt(fabs(pow(n,x)+pow(x,e)))
C) sqrt(fabs(pow(n,x)+exp(X))) D) sqrt(fabs(pow(x,n)+exp(x)))
(分数:1.00)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论